💡 KNN 알고리즘의 경우 K 값 = n_neighbors 옵션 값, Decision Tree알고리즘에서 max_depth 옵션 값을 어떻게 설정해야하는가 ❓
파라미터 값 설정에 따라 모델의 성능이 달라진다 ❗
방법 :
▪ Grid Search
1. 성능을 테스트할 파라미터 값의 범위 지정(딕셔너리 형태)
2. 위 파라미터 값 범위를 모두 사용하는 Grid Search 모델 선언 후 학습
3. 학습 데이터에 대해 가장 좋은 성능을 보인 파라미터 값으로 자동으로 학습
4. 이후 예측 및 평가 과정을 바로 진행
▪ Random Search
1. 성능을 테스트할 파라미터 값의 범위 지정(딕셔너리 형태)
2. 위 파라미터 값 범위에서 몇 개 선택할 지 정하여 Grid Search 모델 선언 후 학습
3. 학습 데이터에 대해 가장 좋은 성능을 보인 파라미터 값으로 자동으로 학습
4. 이후 예측 및 평가 과정을 바로 진행
K-Fold Cross Validation을 위해 cv 값 지정 => 실제 수행되는 횟수 : 파라미터 조합 수 X cv 값
| Random Search |
범위지정 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 |
| 무작위수행 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 | |
| 최적값 | 9 선정 | |
| Grid Search |
범위지정 | 6, 7, 8, 9, 10, 11, 12 |
| 수행 | 6, 7, 8, 9, 10, 11, 12 | |
| 최적값 | 10 선정 |
성능예측
1. 모듈 불러오기
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_absolute_error, r2_score
from sklearn.model_selection import cross_val_score, GridSearchCV
2. 선언하기
model_dt = DicisionTreeRegressor(random_state=1)
3. 성능예측
cv_score = cross_val_score(model_dt, x_train, y_train, cv=5)
5번의 cross validation 프로세스를 거쳐서 test데이터셋의 5번의 정확성을 계산한다.
입력 :
print(cv_score)
print(cv_score.mean())
출력 :

모델 튜닝
▪ Grid Search로 튜닝 진행
▪ GridSearchCV 알고리즘을 사용하는 모델을 선언한다.
▪ 다음 정보를 최종 모델에 파라미터로 전달한다.
- 기본 모델 이름
- 파라미터 변수
- cv : K-Fold 분할 개수(기본값=5)
- n_iter : 시도 횟수(기본값=10)
- scoring : 평가 방법
1. 파라미터 선언
param = {'max_depth' : range(1, 51)}
2. 선언하기
model_dt = DecisionTreeRegressor(random_state=1)
model = GridSearchCV(model_dt,
param,
cv=5,
scoring='r2')
3. 학습하기
model.fit(x_train, y_train)
4. 결과확인
▪ model.cv_results : 성능 테스트와 관련된 많은 정보가 포함되어 있음
-> 이 중 중요한 정보만 추출해서 확인
▪ model.cv_results_['mean_test_score'] : 테스트로 얻은 성능
▪ model.best_params_ : 최적의 파라미터
▪ model.best_score_ : 최고의 성능
print('=' * 80)
print(model.cv_results_['mean_test_score'])
print('-' * 80)
print('최적파라미터: ', model.best_params_)
print('-' * 80)
print('최고성능:', model.best_score_)
print('=' * 80)

변수 중요도 시각화하기
model.best_estimator_
model.figure(figsize=(5, 5))
plt.barh(y=list(x), width=model.best_estimator_.feature_importances_)
plt.show()
=>

5. 실제 성능 평가
학습을 통해 예상한 성능과 실제 평가에 따른 성능의 차이가 있을 수 있다.
y_pred = model.predict(x_test)
print('MAE:', mean_absolute_error(y_test, y_pred))
print('R2-Score:', r2_score(y_test, y_pred))
=>

'AI > MachineLearning' 카테고리의 다른 글
| 제조데이터와 AI (0) | 2024.11.20 |
|---|---|
| 머신러닝 모델링 라이브러리 불러오기 (0) | 2023.04.11 |
| 의사결정트리(Decision Tree) (0) | 2023.02.24 |
| 로지스틱 회귀 개념, 모델링 과정 (0) | 2023.02.23 |
| K-Nearest Neighbor 개념, min-max scaling , 모델링 과정 (0) | 2023.02.23 |