강의 영상 주소 : https://www.youtube.com/watch?v=0nqvO3AM2Vw&list=PL5-TkQAfAZFbzxjBHtzdVCWE0Zbhomg7r&index=2
해당 슬라이드 : https://web.eecs.umich.edu/~justincj/slides/eecs498/498_FA2019_lecture02.pdf
< Hyperparameters >
샘플 수가 충분하지 않을 경우에 우연히 데이터를 어떻게 나눴는지에 따라서 성능의 차이가 많이 날 수 있습니다.
데이터를 나누는 작업에 의해 모델 성능 결과가 크게 변동되지 않게 하기 위해 K-Fold 교차검증을 사용합니다.
다음으로는 knn의 특성으로 universal approximation이 나왔는데 초록색으로 보이는 nearest neighbor function이 그림에서 보이는 검은점(training points)들 즉, 트레이닝된 샘플들의 수가 점점 무한이 늘어날수록 true function에 근사할 수 있는 특성이 있습니다.
이 페이지에서는 k-nn의 문제점 중 하나인 차원의 저주(curse of dimensionality)에 대해서 설명하고 있습니다.
간단하게 말하면 데이터의 특징(feature)이 너무 많아서 알고리즘의 성능 저하가 일어나는 현상입니다.
knn에대해 다시 한번 정리해보자면 knn이 하는 일은 트레이닝 데이터를 이용해서 공간을 분할하는 일이였습니다. 이는 knn이 잘 동작하려면 전체공간을 조밀하게 커버할 만큼의 충분한 트레이닝 샘플이 필요하다는 것을 의미합니다. 그렇지 않으면 테스트 이미지를 정확하게 분류하지 못합니다.
위 첫번 째 그림을 보면 점 하나는 트레이닝 샘플입니다. 그리고 각 점의 색은 트레이닝 샘플이 속한 카테고리를 나타낸다고 볼 수 있습니다.
왼쪽에 1차원 공간을 보면 이 공간을 조밀하게 채우려면 4개의 트레이닝 샘플이면 충분한데 그 옆에 2차원 공간을 다 채우려면 16개가 필요합니다. 이렇게 3차,4차,5차...로 늘어나게 되면 각 공간을 조밀하게 하기 위해선 필요한 트레이닝 샘플의 수는 기하급수적으로 증가하게 되는데 이는 좋지 않은 현상입니다.
왜냐하면 고차원의 이미지의 경우 모든 공간을 조밀하게 채울만큼의 데이터를 모으는 일은 현실적으로 불가능하고
차원의 저주의 가장 직접적인 영향은 feature의 개수/차원이 늘어날수록 필요한 계산량과 메모리 사용량은 그보다 더 빠르게 증가하게 돼 계산 불가 상태에 빠지기 때문에 knn을 사용할 때에는 이 점을 유의해서 사용해야 합니다.
[차원의 축소]
- 차원의 수를 줄이는 것, 변수의 수를 줄이는 것
- 차원의 축소를 통해서 모형의 정확도를 높일 수 있고 모델학습 속도가 향상될 수 있을 뿐더러 데이터를 시각화하기 좋습니다.
- 차원의 축소방법 중 1) Feature Selection 과 2) Feature Extraction 두가지방법이 있습니다.
1) Feature Selection(변수 선택)
중요한 변수를 찾는 과정으로써 가지고 있는 변수들 중 중요하다고 생각하는 변수 몇 개만 고르고 나머지는 다 버리는 방법입니다.
그렇기 때문에 어떠한 변수가 중요한 변수인지를 분석하는 과정이 중요한데 예를 들어 변수간에 중첩이 있는지 어떤 변수가 타겟에 큰 영향을 주는 지 등을 분석하여 중요한 변수를 찾습니다.
2) Feature Extraction(변수 추출)
모든 변수를 조합해서 데이터를 잘 표현할 수 있는 중요한 성분의 새로운 변수를 추출하는 방법입니다.
예를 들어 1,2,3,4,5는 변수가 있다고하면 이 1,2,3,4,5를 조합해서 새로운 A,B,C,D,E ..... 가 된다는 뜻 입니다.
변수추출을 할 때 주로 사용하는 방법은 주성분 분석(Principal component analysis; PCA)이고 잘 알려져있는 방법이기는 하지만 PCA로 모든 차원의 축소를 커버할 수 는 없습니다.
참고:
https://kkokkilkon.tistory.com/127
https://bahnsville.tistory.com/1198
앞에서 얘기한 문제때문에 입력이 이미지인 경우에는 k-nn분류기를 잘 사용하지 않습니다. 우선 테스트 시간이 너무 오래걸리고, L1,L2 distance가 이미지간의 거리를 측정하기에는 적절하지 않기 때문입니다.
위 이미지들을 보면 원본 이미지에 박스로 눈,입을 가려도 보고 살짝 이동도 시켜보고 파란색조도 추가해보기도 했는데 각 이미지들을 원본이미지와 비교해봤을 때 변형시킨 3개의 이미지와 원본이미지의 L2 distance가 동일하다고 합니다.
고차원의 공간에서 '거리'는 매우 직관적이지 않는 경우가 많습니다.
시각적으로 봤을 때 세번 째 이미지가 그나마 원본이랑 유사하긴 하지만 거리값에 이런 정보가 반영되지 않기때문에 별 의미가 없게 됩니다.
합성곱 신경망(ConvNet, Convolutional Neural Network)
주로 음성 인식이나 시각적 이미지를 분석하는데 사용
물체의 위치와 방향에 관계없이 물체의 고유한 특징을 학습할 수 있습니다.
ConvNet을 이미지에 적용시켜서 구한 feature vector를 가지고 knn을 적용하면 괜찮은 결과를 얻을 수 있다고 합니다.
Image Captioning : 이미지를 설명하는 문장으로 변환시켜주는 방법
* feature vector : 특징이 하나 이상의 수치 값을 가질 경우, d-차원의 열 벡터로 표현