본문 바로가기

머신러닝

Supervised learning - KNN

train_test_split(cancer.data, cancer.target, stratify=cancer.target)
#strtify : classification에서 중요함 (비율 유지)

generalization : 목표

overfitting : 너무 복잡한 모델을 선택 -- 너무 복잡해지면 training data에 너무 민감해져 새로운 데이터에 일반화안됨

        - 많은 데이터로 극복(다양성을 키워줌)

underfitting  : 너무 간단한 모델 선택됨

np.bincount(cancer.target) : 빈도수 파악

interaction term 추가 : feature engineering

 

KNN

K 최근접 이웃 분류

from sklearn.neighbors import KNeighborsClassifier

clf = KNeighborsClassifier(n_neighbors=3)
clf.fit(X_train, y_train)
clf.predict(X_test)
clf.score(X_test, y_test)
fig, axes = plt.subplot(1,3, figsize=(10,3))  # 1*3 subplot자리 만듦
for loop 사용
ax.set_title(f'neighbors') #그래프 상단에 표시됨
ax.set_xlabel()
ax.set_ylabel()
ax[0].legent(loc=2)
------------------------------
그래프 한개
plt.ylabel("acc")
plt.xlabel("acc")

이웃의 수를 늘릴수록 결정 경계는 부드러워짐(더 단순한 모델이 됨) - data를 많이 봄

but 모델이 너무 단순해지면 underfitting 일어남 - 테스트 정확도 감소


K 최근접 이웃 회귀

 

이웃 간의 평균이 예측값이 됨

regression에서 score를 사용한다면 score는 R^2를 반환(예측의 적합도를 측정)

 

KNN에서는 k를 홀수로 지정(동률이 나올 수 있음)

중요매개변수 : 데이터 포인트 사이의 거리를 재는 방법(distance), 이웃의 수(uniform)

eg = KNeighborsRegressor(n_neighbors=3, weights='distance') #defalut = uniform

training set이 너무 크면 예측 느림, 잘동작안함, 희소한 데이터셋에서도 잘동작못함

'머신러닝' 카테고리의 다른 글

MLP  (0) 2021.07.21
svm  (0) 2021.07.15
tree  (0) 2021.07.15
linear model  (2) 2021.07.03
ML_introduction  (0) 2021.06.29