본문 바로가기
통계학/BITAmin

10주차 복습 : KNN, SVM, Ensemble

by zzyunzz 2020. 12. 11.
##위에서 찾은 다른 best parameter들은 쓰고, n_neighbors 하이퍼파라미터만 조정해서 정확도 찾았음

train_acc = []; test_acc = [] 

candidates = [1,2,3,4,5]
for cand in candidates:
    knn = KNeighborsClassifier(metric = 'euclidean', n_neighbors = cand, weights = 'uniform')
    knn.fit(X_train, y_train)
    train_acc.append(knn.score(X_train, y_train))
    pred = knn.predict(X_test)
    test_acc.append(accuracy_score(y_test, pred))

fig = plt.figure(figsize = (12, 7))
ax = fig.add_subplot(1,1,1)

ax.plot(candidates, train_acc, label = 'train_acc')
ax.plot(candidates, test_acc, label = 'test_acc')

plt.xlabel('n_neighbors')
plt.ylabel('accuracy')
plt.xticks([1,2,3,4,5])
plt.legend(loc = 'best')
plt.show() 

'''
그래프 보니까 n_neighbors = 4일 때 test accuracy가 가장 높음 
'''
### 다시 학습하고 정확도 / 오차행렬 출력

knn = KNeighborsClassifier(metric = 'euclidean', n_neighbors = 4, weights = 'uniform')
knn.fit(X_train, y_train)
pred = knn.predict(X_test)

print('test 정확도 : {0:.4f}'.format(accuracy_score(y_test, pred)))
confusion_matrix(y_test, pred)

구성한 코드를 실행해서 그래프로 확인하면 n_neighbors = 4로 뒀을 떄 test accuracy가 가장 높다.

모델 구성의 목적은 예측을 잘 하는 것이므로,

test accuracy가 가장 높은 값을 보이는 하이퍼 파라미터를 모델에 적용하면

test 정확도 : 0.7972
array([[75, 13],
       [16, 39]], dtype=int64)

결과는 이렇게 나온다.

사회과학 현상 데이터로 모델링 했을 땐 70% 이상의 정확도만 보이면 유의미하다고 어디선가 주워들었으니 ...

이 정도면 나름 괜찮은 성능

댓글