빅데이터 분석기사/작업 유형 2 (ML)

모델 학습, 평가, 예

유방울 2023. 6. 2. 02:13

 

머신러닝 모델 인터페이스 

- 모델의 기반 클래스 모든 머신러닝 모델(Estimator)은 반드시 상속 구현
- 학습/훈련, 예측, 평가/검정 방법 인터페이스 일관성 제공
- BaseEstimator를 상속받아 만들어진 모델들은 개별 알고리즘으로 구현, 동일 interface를 사용
- fit(X_train, y_train) : 모델 학습/훈련
- score(X_test, y_test) : 성능 측정  : 1에 가까울수록 좋은 성능
- predict(X_test) : 예측 값 반환

 

help(KNeighborsClassifier)  # KNN
# 기본값! 나타남
#  p=2, metric='minkowski' 거리임! 유클리안 거리를 사용함
KNeighborsClassifier(n_neighbors=5, *, weights='uniform', algorithm='auto', 
                     leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None)
# [8] 모델 생성 및 학습

# k가 3인 knn 분류기 생성, 객체 생성
# 포지셔널 방식 knn = KNeighborsClassifier(3)
knn = KNeighborsClassifier(n_neighbors=3)

# knn 에 Train set 전달하여 모델 생성(학습)
knn.fit(x_train, y_train)
# 위와 동일한 결과 
# 한 줄로 작성
knn = KNeighborsClassifier(n_neighbors=3).fit(x_train, y_train)
# [9] 평가하기
# train set, test set을 각각 사용함
# train, test의 성능이 다르면 n_neightbors 값을 바꿔보기 
# 성능이 낮은 경우 : hyperparameter 조절, model을 변경, 데이터의 전처리를 변경 등을 통해 성능을 향상할 수 있음
print('train 성능 :', knn.score(x_train, y_train))
print('test  성능 :', knn.score(x_test, y_test))
# [10] knn 모델에 Test set 적용하여 예측치 얻기
pred = knn.predict(x_test)
pred

array([0, 1, 0, 2, 0, 1, 2, 0, 0, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 0, 0, 2,
       2, 2, 0, 1, 1, 2, 0, 0])
#예측값
print(y_test.to_numpy())
#실제값
print(pred)

[0 1 0 2 0 1 2 0 0 1 2 1 1 2 1 2 2 1 1 0 0 2 2 2 0 1 1 2 0 0]
[0 1 0 2 0 1 2 0 0 1 2 1 1 2 1 2 1 2 1 0 0 2 2 2 0 1 1 2 0 0]
# [10-2] 예측 확률 값 (번호가 중간에 추가되어 이상해서 10-2로 수정했습니다.)
pred_proba = knn.predict_proba(x_test)
print(pred_proba)

[[1.         0.         0.        ]
 [0.         1.         0.        ]
 [1.         0.         0.        ]
 [0.         0.         1.        ]
 [1.         0.         0.        ]
 [0.         1.         0.        ]
 [0.         0.         1.        ]
 [1.         0.         0.        ]
 [1.         0.         0.        ]
 [0.         0.66666667 0.33333333]
 [0.         0.         1.        ]
 [0.         1.         0.        ]
 [0.         1.         0.        ]
 [0.         0.         1.        ]
 [0.         1.         0.        ]
 [0.         0.         1.        ]
 [0.         1.         0.        ]
 [0.         0.         1.        ]
 [0.         1.         0.        ]
 [1.         0.         0.        ]
 [1.         0.         0.        ]
 [0.         0.         1.        ]
 [0.         0.33333333 0.66666667]
 [0.         0.         1.        ]
 [1.         0.         0.        ]
 [0.         1.         0.        ]
 [0.         1.         0.        ]
 [0.         0.         1.        ]
 [1.         0.         0.        ]
 [1.         0.         0.        ]]