훈련 세트에 너무 맞추어져 있어 테스트 세트의 성능 정하
훈련 세트를 충분히 반영하지 못해 훈련 세트, 테스트 세트에서 모두 성능이 저하
훈련 세트로 학습한 모델이 테스트 세트에 대해 정확히 예측 하도록 하는 것
K - 최근접 이웃 알고리즘
-새로운 데이터 포인트와 가장 가까운 훈련 데이터셋의 데이터 포인트를 찾아 예측
-K 값에 따라 가까운 이웃의 수를 결정
-분류와 회귀에 모두 사용 가능
K가 3일 때
K를 5로 늘렸을 때
-k 값이 작을수록 모델의 복잡도가 상대적으로 증가(과대적합)
-k 값이 클수록 모델의 복잡도가 낮아진다.(과소적합)
-100개의 데이터를 학습하고 k를 100개로 설정하여 예측하면 빈도가 가장 많은 클래스 레이블로 분류
from sklearn.neighbors import KNeighborsClassifier # 학습 모델 알고리즘
from sklearn import metrics # 평가를 위한 모듈
# info() : 전체 행, 결측치 여부, 컬럼별 정보
bmi.info()
# 기술(요약)통계량 확인
bmi.describe()
# 인덱스의 중복을 제거한 값 확인하기
bmi.index.unique()
# label별 색을 넣어주는 함수 정의
def myScatter(label, color):
tmp = bmi.loc[label]
plt.scatter(tmp['Weight'],
tmp['Height'],
c = color,
label = label)
# 문제데이터('Height부터 Weight')와 답데이터(Label)로 분리
# 문제데이터('Height부터 Weight') X라는 변수에 담기 (2차원)
# 답데이터(Label) y라는 변수에 담기 (1차원)
data
# 크기/모양 확인하기
print(X.shape)
print(y.shape)
# 룬현세트와 테스트세트로 나누기
# 훈련세트 : 테스트세트 = 7:3
# X_train(0~349), X_test(350~), y_train(0~349), y_test(350~)
X_train = X.iloc[:350,:]
X_test = X.iloc[350:,:]
y_train = y.iloc[:350]
y_test = y.iloc[350:]
# 각 데이터 크기 확인하기
print(X_train.shape)
print(X_test.shape)
print(y_train.shape)
print(y_test.shape)
# 모델 생성
# 하이퍼파라미터 튜닝
knn_model = KNeighborsClassifier(n_neighbors= 10)
# 학습/훈력 진행
# 모델명.fit(훈련용 문제, 훈련용 답)
knn_model.fit(X_train, y_train)
# 예측 진행
# 모델명.predict(테스트용 문제)
pre = knn_model.predict(X_test)
pre
# 성능 평가
y_test
pre
metrics.accuracy_score(pre, y_test)
# 활용하기
# 새로운 미지의 데이터 예측하기
knn_model.predict([[150,83],[185,43],[160,50]])