본문 바로가기

머신러닝/지도학습

[Machine Learning] KNN 알고리즘 실습사례_wine 분류

320x100

KNN Algorithm


간단하게 시작하자면
K개의 이웃(Neighbors)한 점들을 인접한(Nearest) 영역에서 포집시키는 방법입니다.

KNN 알고리즘은 비교적 합리적이고 유용한 방식은 아니지만,
빠르고 쉬우며 분류나 회귀, 두 분석에서 모두 사용되지만 분류에서 자주 사용됩니다.

단 아웃라이어(outlier)에 매우 취약하다는 약점도 있습니다.

원본 csv파일은 데이터분석 공모전 사이트 kaggle.com에서 받아왔다는 점을 알립니다.
원본 : Wine_data | Kaggle

 

Wine_data

UCI Wine Dataset for Classification

www.kaggle.com

 

본 게시글에서는 데이터 분석의 지도용 파일이 아닌
실습 파일로 구성되어 있습니다. 오류나 오독이 존재할 수 있으니, 문제시에는 댓글 부탁드립니다.♡

+ 사용한 편집기는 jupyter notebook 입니다. (colab도 가능합니다!)


python에서 이번에 필요한 library들을 호출합니다.


필자는 파일을 미리 다운받아서 wine.csv로 저장했습니다.
저장한 경로를 로드해줍니다.
(맨위에도 파일 url이 있습니다)


특별한 점은 없습니다. 파일 확인과정입니다.
object가 없네요.


확인과정_2 입니다.


확인과정_3 입니다.
중간에 1보다 작은 소수들이 눈에 띄입니다.
일단 넘어갑니다.


feature간의 상관관계를 확인했습니다.
1에 가까울 수록 1:1의 관계를 갖습니다.


이번 시간에 특별히 필요한 시각화 그래프는 아니지만, 필자가 특별히
좋아하는 그래프라 가져왔습니다. 특이사항은, 이쁩니다.


불편한 일을 막기 위해 Nan 값을 조사합니다.
없었습니다.


항상 필요한 과정은 아닙니다만, wine 데이터의 경우, 소수점 아래 숫자가
너무 많습니다. 그냥 두면 큰 문제가 생길수 있으니 소수점 아래 자리를 4자리 까지만
표시하도록 변환합니다.

바로 사이킷런의 train_test_split 패키지를 꺼내서
분리를 시작합니다.

test사이즌 0.2~0.3 구간을 주로 추천합니다.
일단은 사이즈와 random에 특별한 의미는 없습니다.
아, 참고적으로 X는 독립변수, y는 종속변수 입니다.

함수 예시
y = aX+ b

이처럼 X의 변화에 따라서 y가 결정되게 됩니다.
자주 언급되는 내용이기 때문에 이미 아실것이라 생각합니다.


아까 소수점 4자리만 보이게 변환한 것도 조회됩니다.
훈련셋의 5개를 조회합니다.

K-NN 알고리즘을 시작하기 위해
KNeighborsClassifier 패키지를 호출합니다.
복잡할 수 있는데, 이 철자에 주의바랍니다.

짧게, knn으로 정의했습니다.


.fit을 써서 적용시켜 줍니다.

주석은 크게 신경쓰지 않아도 됩니다.

↓↓↓다시 한 사유↓↓↓


데이터의 스케일이 다른 관계로 정규화 스케일링을 먼저 하고
KNN을 진행했으나, 한번 실패하는 상황이 있었습니다.


(스케일링 단계에서)
from sklearn.preprocessing import StandardScaler 를 사용하여
선 정규화 스케일링→ 후 학습을 시킬려고 했을 때,
위처럼 float64로 Dtype이 가득 차있을 경우 knn.fit 과정에서 에러가 반환됩니다.

label type이 'continuous' 라는 사유로 에러가 조회됩니다만
실제로 정규화 scaler를 생략하고 knn을 실시하면 이화면은 사라집니다.


아무튼 다시 돌아와서, pred부터 확인합니다.


왜 넓은 화면을 다 안쓰고, 줄바꿈부터 하는지 모르겠습니다.
일단 독립변수 시험셋의 예측값을 구한 것입니다.


info로 정보도 조회해봅니다.
int값이 포함되어 있습니다.

proba로 클래스별 예측확률도 구합니다.

accuracy_score 패키지도 호출합니다.
점수를 계산해봅니다.


영 맘에 드는 점수는 아니지만, 일단 정확도 평가점수가 나왔습니다.

다음 분석에서는 무엇이 문제였는지,
또한 어떻게 하면 정확도 평가점수를 높이는지 방법을 알아보겠습니다.


 

728x90