오일석씨의 패턴인식책을 공부해보자
우리는 여자친구가 안경을 써도 누군지 알 수 있다. 여자친구가 모자를 써도 알 수 있다.
만약 못 알아본다면 그날 나의 존재는 세상에서 지워질 것이다.
아무튼 우리는 누군가임을 상태가 아예 바뀌지 않는 이상 알 수 있다.
그러나 기계한테 recognition, 인식이란 정말 어려운 말이다.
그래서 우리는 패턴인식이라는 것에 관심을 가지게 되었다.
그런 분야를 살짝 알아보자면
1. 공장 자동화
2. 자연어 처리
3. 데이터 마이닝
4. 정보 검색
5. 사람 컴퓨터 인터페이스
6. 생체 인식
7. 지능 교통 시스템
8. 지능 자동차
9. 생물 정보학
10. 지능 로봇
사실 수많은 분야가 있지만 그냥 10개만 추려보았다.
이게 다 기계가 할 수 있게 사람이 노력하고 있는 분야다.
그렇다면 어떻게 기계가 인식하는가?
여기서 패턴인식이 나온다
패턴 인식의 처리과정을 간략히 하자면
패턴>>>> 특징>>>>>분류>>>>부류
위와 같이 나눌 수 있다.
용어는 영어로 알아두는 것이 좋다
pattern, feature, classification, class
그렇다면 패턴 하나만 입력시키면 될까????
그럼 그 패턴과 비슷하거나 같은 것만 인식할 수 있다. 즉 같지만 달라보이면 인식하지 못할 것이다.
여자친구가 쌩얼,,,이런 비유하면 안되지만 ㅎㅎ 아무튼 쌩얼은 인식 못해서 등짝맞는 것처럼 ㅎㅎ
그래서 여자친구의 모든 패턴들을 머릿속에다 입력해놓아야 한다. 그래야 맞지 않을 거니까
그렇다면 패턴을 발생시키는 도메인(domain)을 뭐라고 하느냐??
패턴 원천(patter source)라고 한다. // source는 어디에든 붙어서 많이 나온다.
그래서 여자친구의 패턴을 수집해야만 한다.
++이를 샘플(sample)이라고 한다.
그리고 기계는 학습속도가 사람보다 엄청나게 빠르다.
많이 입력시킬수록 많이 알아듣는다.
그리고 후에 나아가서는 가지고 있는 학습능력을 바탕으로
쌩얼에 모자쓰고 안경쓴 여자친구도 여자친구인 것을 인식할 수 있다.
샘플은 2가지를 수집한다.
1. 학습을 위한 집합(training set)
2. 테스트를 위한 집합(test set)
이 2개를 합쳐서 데이터 베이스라고 말하기도 한다.
이제 샘플을 모았으니 특징을 추출해야한다. (feature)
샘플의 특징을 알아먹는 것이 기계다.
사람처럼 아우라라든가 설명할 수 없는 무언가를 느끼고 여친을 알아보는 것이 아니다.
특징들은 서로 유사하지 않을수록, 다시 말해서 M개의 부류(class)가 있다면 서로 다른 값을 보이는 특징일수록 유리하다.
(당연히 비슷하면 모르겠지...?)
무엇을 분류해야하느냐에 따라서 특징이 달라질 수 있다.
예를 들어 이미지 인식이라고 한다면
아니 그냥 더 쉽게 필기 숫자를 분류하고자 한다면
필기를 개별적인 화소를 특징으로 생각할 수 있다.
8*8 비트맵을 떠올려보자
이들을 벡터로 표현하면 64차원 벡터(x1,x2,.....x64)가 된다. 이 때 x를 특징벡터(feature vector)라고 한다.
(기계는 사람하고 달라서 벡터로 만들어야 알아듣는다.)
비트맵에 가로와 세로로 배열된 64개의 화소를 벡터 형태로 만들기 위해서는 행 또는 렬 우선으로 재배치하면 된다.
특징벡터의 개수로도 판단할 수 있지만 우리는 개수로만 판단하면 안된다.
만약 3과 7의 특징벡터의 개수가 같다? 그렇다고 같은 글자냐? 그건 아니다.
그래서 우리는 2차원 특징벡터를 만들어본다.
x= (x1,x2)가 되는 것이다.
이들을 특징 공간(feature space)에 그려보면 좌표평면에 그리는 것과 같이 된다.
책에선 이렇게 나온다.
우린 지금까지 2가지 특징 추출방법을 생각해냈다.
x1-x64 // X=(x1,x2)
이렇게 2가지
개별화소를 특징으로 가지게 하는 것 괜찮다.
그렇지만 64개가 다쓰이는 것이 아니라서 너무 비효율적이다.
숫자 3을 나타내는데에 특징이 몇개나 가지고 있어야 3이 될까 생각해보니 까마득하다.
64비트라 이정도면...ㅎㅎ
2번째 방법은
어느정도 분류가 가능하다. 물론 도움은 된다. 그런 완벽하진 않다.
위에 두가지 방법다 분별을 할 수 있기야 하겠다...
그러나 분별력(discriminating power)에 있어서 차이가 난다.
++특징이 서로 다른 부류를 얼마나 잘 구별해주느냐에 관한 척도를 분별력이라고 한다.
그러면 나올 수 있는 질문
특징을 몇 개를 사용해야 좋은 것일까???
특징을 많이 사용한다고 해서 꼭 좋은 것은 아니다.
"쓸모 없는" 특징 같은 경우가 그 경우다.
그러한 특징들은 계산속도만 늦추지 결과에 아무런 차등 도움이 안된다,
특징 벡터의 차원이 커질수록 계산량이 기하급수적으로 커지는 상황도 있다.
이걸 다른 글에서도 설명했는데
"차원의 저주(Curse of Dimensionality)라고 한다."
그래서 특징이 많은 경우, 아니 특징의 차원 벡터가 클 경우 PCA를 이용해서 차원을 줄이는 기법을 사용하기도 한다.
그 다음은 분류(classification)이다.
어떤 패턴이 들어왔을 때 이것이 어떤 부류(class)인지 할당해주는 작업을 말한다.
만약 2가지의 class가 있다고 치자, 그리고 특징 공간은 2차원이다.
각각 클래스마다 임의의 개수의 train set이 있다고 하자.
가장 쉬운 방법은 직선으로 두 부류를 구별하는 것이다.
++우선 아무 그림이나 가져와봤다.
직선을 기준으로 위 아래를 2차원 특징 벡터로 분류하는 것이다.
++이러한 곡선도 사용 가능하다.
**위의 선들은 결정선이라고 부른다
Decision Line
++나중에는 결정 평면(Decision plane)도 나온다. 참고만하자
이러한 선들은 2단계를 걸친 분류기 설계 과정을 거쳐 만들어진 것으로 볼 수 있다.
1단계는 모델 선택(model selection)
즉, 분류기를 표현하는 수학적 모델로 무엇을 쓸 것인지 정하는 것이다.
**성능 평가를 통해 어떤 모델을 선택할 것인지 결정할 수 있다.
2단계 학습(learning)
모델 선택이 끝났으면 분류기를 학습시켜야 한다.
*Learning, Training"은 거의 같은 의미로 사용된다.
일반적으로 결정 직선같이 1차의 다항식으로 나오는 경우
선형 분류기(linear classifier)라고 부른다.
2차 이상의 다항식으로 표현되는 경우
비선형 분류기(nonlinear classifier)라고 부른다.
마지막으로 지도학습과 비지도학습에 대해 알아보자면
지도학습(supervised learning), 비지도학습(unsupervised learning)
지도학습에서 모든 샘플은 정답이 있는 training set이다.
이미 샘플의 정보가 있는 클래스가 있다.
즉 true class라고 부르기도 한다.
지도학습의 목적은 분류기가 최소의 오류를 갖도록 하는 매개 변수(결정 직선의 경우 기울기와 절편)을 알아내는 것이다.
비지도학습에서는 샘플의 정보가 없다.
비지도학습의 목적은 서로 다른 부류를 분류하는 것이 아니라 비슷한 샘플들을 같은 집단으로 모으는 것이다.
(그것이 지도 학습의 결과와 같아질지는 모른다)
이를 우리는 군집화(Clustering)이라고 한다.
다음 글에서 성능 평가에 대해서 알아보자.
'데이터 사이언스(Data Science) > 머신러닝,Machine Learning, 기계학습' 카테고리의 다른 글
[머신러닝] 패턴인식( pattern recognition) - 2 (0) | 2020.08.18 |
---|---|
[ML & DI] 머신러닝을 위한 데이터융합-5 (0) | 2020.08.12 |
[ML & DI] 데이터 융합을 위한 머신러닝-4 (0) | 2020.08.12 |
[ML & DI] 데이터 융합을 위한 머신러닝-3 (0) | 2020.08.11 |
[ML & DI] 데이터 융합을 위한 머신러닝-2 (0) | 2020.08.11 |