##위에서 찾은 다른 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% 이상의 정확도만 보이면 유의미하다고 어디선가 주워들었으니 ...
이 정도면 나름 괜찮은 성능
'통계학 > BITAmin' 카테고리의 다른 글
unicodedecodeerror: 'utf-8' codec can't decode byte 0xc3 in position 9382: invalid continuation byte (오류해결?) (0) | 2021.07.18 |
---|---|
13주차 - (1) : 불균형데이터의 처리 (0) | 2021.01.21 |
12주차 : 2학기 기말고사, 복습과제로 오답정리 (0) | 2021.01.12 |
11주차 : Bagging, Boosting - AdaBoost, GBM, XGBoost, LightGBM (0) | 2021.01.04 |
댓글