붓꽃 데이터 세트로 분류를 예측한 프로세스 정리
1. 데이터 세트 분리
데이터를 학습 데이터와 테스트 데이터로 분리
2. 모델 학습
학습 데이터를 기반으로 ML알고리즘을 적용해 모델을 학습시킨다.
3. 예측 수행
학습된 ML모델을 이용해 테스트 데이터의 분류(붓꽃 종류)를 예측
4.평가
이렇게 예측된 결괏값과 테스트 데이터의 실제 결괏값을 비교해 ML 모델 성능을 평가
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
import pandas as pd
iris=load_iris()
iris_data=iris.data
iris_label=iris.target
print('iris target 값:', iris_label)
print('iris target 명:', iris.target_names)
iris_df=pd.DataFrame(data=iris_data,columns=iris.feature_names)
iris_df['label']=iris.target
iris_df.head(3)
iris target 값: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
iris target 명: ['setosa' 'versicolor' 'virginica']
X_train, X_test, y_train, y_test=train_test_split(iris_data, iris_label,
test_size=0.2, random_state=11)
#DecisionTreeClassifier 객체 생성
dt_clf=DecisionTreeClassifier(random_state=11)
dt_clf.fit(X_train, y_train)
#학습이 완료된 decisiontreeclassifier 객체에서 테스트 데이터 세트로 예측 수행
pred=dt_clf.predict(X_test)
pred
array([2, 2, 1, 1, 2, 0, 1, 0, 0, 1, 1, 1, 1, 2, 2, 0, 2, 1, 2, 2, 1, 0,
0, 1, 0, 0, 2, 1, 0, 1])
from sklearn.metrics import accuracy_score
print ('예측 정확도:{0:.4f}'.format(accuracy_score(y_test,pred)))
예측 정확도:0.9333
#추가 과적합을 방지하기 위한 교차검증과 실제 테스트데이터간의 정확도 비교를 통해 모델의 과적합 판단하기
-> 붓꽃 데이터를 결정트리로 모델링
하이퍼 파라미터 튜닝을 하고
교차검증으로 최종마무리하는 알고리즘
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
# 붓꽃 데이터셋 로드
iris = load_iris()
X = iris.data
y = iris.target
# 학습 데이터와 테스트 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 결정 트리 분류기 생성
dt_clf = DecisionTreeClassifier(random_state=42)
# 하이퍼 파라미터 그리드 설정
param_grid = {
'max_depth': [3, 5, 7],
'min_samples_split': [2, 3, 4],
'min_samples_leaf': [1, 2, 3]
}
# 그리드 서치 객체 생성
grid_search = GridSearchCV(estimator=dt_clf, param_grid=param_grid, cv=5)
# 모델 학습 및 하이퍼 파라미터 튜닝
grid_search.fit(X_train, y_train)
# 최적의 모델 및 하이퍼 파라미터 출력
best_dt_clf = grid_search.best_estimator_
print("최적의 하이퍼 파라미터:", grid_search.best_params_)
# 교차 검증을 통한 모델 평가
cv_scores = cross_val_score(best_dt_clf, X_train, y_train, cv=5)
print("교차 검증 평균 정확도:", cv_scores.mean())
# 테스트 세트를 이용한 모델 평가
y_pred = best_dt_clf.predict(X_test)
test_accuracy = accuracy_score(y_test, y_pred)
print("테스트 세트 정확도:", test_accuracy)
최적의 하이퍼 파라미터: {'max_depth': 3, 'min_samples_leaf': 3, 'min_samples_split': 2}
교차 검증 평균 정확도: 0.95
테스트 세트 정확도: 1.0
1) 교차 검증을 통해 모델의 일반화 성능을 평가하고 최적의 하이퍼파라미터를 찾은 후
2) 테스트 데이터를 사용하여 모델의 최종 성능을 평가
-> 모델이 학습 데이터에만 과도하게 적합되어 있는지, 새로운 데이터에 대해 얼마나 잘 일반화되는지를 확인 가능
3) 만약 모델이 학습 데이터에서는 높은 성능을 보이지만 테스트 데이터에서는 성능이 저하
-> 모델이 과적합되었을 가능성
=>이때는 모델의 복잡도를 줄이거나 규제를 추가하여 과적합을 방지
교차 검증과 테스트 데이터를 통한 정확도 검사를 통해 모델이 과적합되었는지를 판단,
필요한 조치를 취하여 모델의 성능을 향상시킬 수 있음!
'프로젝트,실습 > 실습' 카테고리의 다른 글
1.보스턴 주택 가격 회귀 구현 (0) | 2024.04.21 |
---|---|
회귀 실습 (0) | 2024.04.21 |
파이썬 머신러닝- 3.피마 인디언 당뇨 예측 (0) | 2024.04.14 |
파이썬 머신러닝- 2.타이타닉 생존자 예측 (0) | 2024.04.08 |
분류 머신러닝 실습 정리 (0) | 2024.04.07 |