[PYTHON] &[machine learning] KNeighborsClassifier / LogisticRegression / LinearSVC 를 이용한 손글씨 분류
digit_train 파일을 이용하여 손글씨를 분류용선형모델연습하는 방법
위 첨부파일은 python에 업로드하기 위한 파일
1. 필요한 것을 import 해준다
numpy는 필요없는데 중간에 추가해줌
중간 주석으로 단 순서대로 진행할 예정이다
사용된 데이터는 위에 첨부된 digit_trian.csv 다
2. 탐색적 데이터 분석 = EDA 을 통해 데이터 구성을 본다
해당 데이터 (digit_data 는 이미지를 픽셀단위를 표시한 것으로 label 로 뜨는건 미리 써놓은 답 이다 )
즉 index 0 은 1을 표시한 것
img를 픽셀단위로 자름
최대값, 최솟값을 보고 아래 표를 통하여 어떤 값이 많이 분포하였는지 확인 할 수 있다
원래 이미지를 보기위해서는 28,28 로 구성되었기때문에
img의 값을 reshape 해준다. 색은 gray 로 선택해줌
다른 이미지를 확인해보기 위하여 img3 실행 (index번호를 붙였기때문에 4가 나온다)
- img3을 전체에서 자른후
- 자른 이미지를 reshape한다
참고로 matplotlib.pyplot 에는 이미지를 보여주는 함수 < imshow > 가 내장되어있다
KNeighborsClassifier
LogisticRegression
LinearSVC
세가지 모델로 데이터를 train 시키고 후에 test점수를 매겨 볼 거다
사용을 위한 import 를 해준다
Knn , logist , linear 에 대하여 각각 train 을 시켜본다
참고로 기본 cv 는 5로 설정한다.
(cv : 해당 데이터를 5로 잘라 데이터 분석함 / 값을 바꾸면 수치도 달라진다 )
해당 수치는
Knn : 0.9165460039643658
logist : 0.8232028781559416
linear : 0.8248100718169964
으로 나왔다.
knn은 거리를 이용하는 거라 다른 것보다 시간이 걸린다
_______
현재 수치로는
- 셋중 Knn 이 제일 가장 적합함
- Knn은 거리를 계산한 값이기에 그럴 가능성이 더 높다
- 선형은 픽셀단위라 픽셀이 조금 틀어지면 다른 값으로 인지해서 성능이떨어진다
- Knn 에 기본 5 보다 크고 작게 하여 총괄값을 바꿔볼 수 있다
- 선형 도 튜닝 값을 따로 하여 값을 바꿔본다
를 생각할 수 있다
v 다른 수치를 알아보기 위하여 하이퍼파라미터 튜닝을 시도한다
다른 수치를 알아보기 위하여 하이퍼파라미터 튜닝을 시도한다
모델마다 다른 값으로 시도한다
train > test 할 경우 test에 맞춘 모델이 나올 수 있기에 교차검증 (Cross validation) 을 시도한다
교차검증을 하는 것이 ln[ 40 ] 이다
knn은 1부터 100까지 하였다.
logist는 0.001 , 0.01, 0.1 , 10 , 100, 1000 로 train 해본다
들어가는 c값이 크면 규제를 약하게, 작으면 규제를 강하게 준다
logist는 알림이 뜬다 오류는 아니니 그대로 진행하면 된다
LinearSVC은 측정시 랜덤값이 들어가서 같은 자료라도 사람마다 사람마다 다르다
linear 도 알림이 뜬다 오류는 아니니 그대로 진행하면 된다
튜닝 후 제일 높은 수치를 각 모델마다 찾아 평가를 한다
평가시에는 fit. train 값을 이용하여 test점수를 매긴다
test 점수를 통하여 어떤 모델이 해당 data에 적합한지 알아 낼 수 있다 .
해당데이터에는 knn 방법이 제일 적합한 것으로 알 수 있다.