1편 링크
2편 링크
베이스라인 모델은 정확도 95%, Recall 0.62의 성능을 보였다.
이번엔 앞서 전처리했던 데이터를 가지고 학습을 시켜보자.
print(len(pokemon.columns))
>>> 45
전체 컬럼 수는 45개로 기존의 13개에 비해 3배 넘게 늘어났다.
이 중 불필요한 컬럼을 제거하고 학습용 데이터와 타겟 변수를 생성한다.
# 학습용 데이터 생성
features = ['Total', 'HP', 'Attack', 'Defense', 'Sp. Atk', 'Sp. Def', 'Speed', 'Generation',
'name_count', 'long_name', 'Forme', 'Mega', 'Mewtwo', 'Kyurem', 'Deoxys', 'Hoopa',
'Latias', 'Latios', 'Kyogre', 'Groudon', 'Poison', 'Water', 'Steel', 'Grass',
'Bug', 'Normal', 'Fire', 'Fighting', 'Electric', 'Psychic', 'Ghost', 'Ice',
'Rock', 'Dark', 'Flying', 'Ground', 'Dragon', 'Fairy']
len(features)
>>> 38
X = pokemon[features]
print(X.shape)
>>> (800, 38)
# 타겟 변수 생성
target = "Legendary"
y = pokemon[target]
print(y.shape)
>>> (800, )
# 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=15)
print(X_train.shape, y_train.shape)
>>> (640, 38) (640,)
print(X_test.shape, y_test.shape)
>>> (160, 38) (160,)
준비가 되었으면 다시 모델에 훈련시킨다.
model = dtc(random_state=25)
# 훈련
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
# 오차 행렬
confusion_matrix(y_test, y_pred)
>>> array([[141, 6],
[ 1, 12]])
# 평가
print(cr(y_test, y_pred))
>>> precision recall f1-score support
False 0.99 0.96 0.98 147
True 0.67 0.92 0.77 13
accuracy 0.96 160
macro avg 0.83 0.94 0.87 160
weighted avg 0.97 0.96 0.96 160
지표 | 베이스라인 | 전처리 후 |
---|---|---|
Accuracy | 95% | 95.6% |
Recall | 0.62 | 0.92 |
확연하게 성능이 향상되었다.