scikit-learn의 실복 훈련 2~다양한 모형으로 탐색~

저번에 한 일


물류 회귀를 사용하여 고객 정보에 따라 고객이 정기예금을 신청할 확률을 예측했다
저번의 결과는
gridbest score는 0.938입니다.
AUC 0.91
네.

이번에 할 일


다른 모델을 이용하여 지난번보다 높은 정밀도를 목표로 한다.
무작위 삼림과 벡터기를 지원합니다.
다음에 심층 학습을 하겠습니다.
설치 코드는 여기.의bank2입니다.py
매크로 패키지 가져오기(마지막과 조금 다름)
import numpy as np
import pandas as pd
from sklearn.model_selection import *
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
import matplotlib.pyplot as plt
import warnings
import mglearn
# 実行上問題ない注意は非表示にする
warnings.filterwarnings('ignore') 
데이터 읽기(마지막과 동일)
df = pd.read_csv("data/bank_01.csv")
#ワンホットエンコーディング
data_dummies = pd.get_dummies(df)

features = data_dummies.loc[:, 'age':'poutcome_success']
X = features.values
y = data_dummies['y_no'].values
#データ確認
print("X.shape: {}  y.shape: {}".format(X.shape, y.shape))
print(data_dummies.y_no.value_counts())
GridSearchCV를 사용하여 최적 모델 검색
pipe = Pipeline([('scaler', StandardScaler()), ('classifier', SVC())])
param_grid = [
    {'classifier': [SVC()], 'classifier__C': [0.001, 0.01, 0.1, 1]},
    {'classifier': [RandomForestClassifier()], 'scaler': [None], 'classifier__max_features': [1, 2, 3, 4, 5]}
]
X_train, X_test, y_train, y_test = train_test_split(
    X, y, random_state=0)
grid = GridSearchCV(pipe, param_grid=param_grid, cv=5, scoring="roc_auc")
grid.fit(X_train, y_train)
print("Best parameters: ", grid.best_params_)
print("grid best score, ", grid.best_score_)
print("Test set accuracy: {:.2f}".format(grid.score(X_test, y_test)))

결실
Best parameters: {'classifier': SVC(), 'classifier__C': 0.1}
grid best score, 0.9249419295996347
Test set accuracy: 0.89
이 두 모델의 SVC는 0입니다.1에 높은 점수를 받았다.
이어 SVC를 조정하는gamma는 높은 점수를 목표로 한다.
SVC 검색 시 최적의 Cgamma
pipe = Pipeline([('scaler', StandardScaler()), ('classifier', SVC())])
param_grid = {'classifier__C': [0.001, 0.01, 0.1, 1], 'classifier__gamma': [0.01, 0.1, 1, 10, 100]}    

X_train, X_test, y_train, y_test = train_test_split(
    X, y, random_state=0)
grid = GridSearchCV(pipe, param_grid=param_grid, return_train_score=False, cv=5, scoring="roc_auc")
grid.fit(X_train, y_train)
print("Best parameters: ", grid.best_params_)
print("grid best score, ", grid.best_score_)
print("Test set AUC: {:.2f}".format(grid.score(X_test, y_test)))

결실
Best parameters: {'classifier_C': 1, 'classifier_gamma': 0.01}
grid best score, 0.9296152371929293
Test set AUC: 0.90
C는 1,gamma는 0.01에서 높은 점수를 받았다.
'mean_test_score의 히트맵 확인
xa = 'classifier__alpha'
xx = param_grid[xa]
ya = 'classifier__hidden_layer_sizes'
yy = param_grid[ya]
plt.figure(figsize=(5,8))
scores = np.array(grid.cv_results_['mean_test_score']).reshape(len(yy), -1)
mglearn.tools.heatmap(scores, xlabel=xa, xticklabels=xx, 
                      ylabel=ya, yticklabels=yy, cmap="viridis")

결실

gamma는 0.01에서 높은 점수였지만 C와는 아무 상관이 없었다.
'mean_test_스코어는 반올림 유효 숫자이기 때문에 최고 점수는 0.9296152371929293이다.
저번의 점수보다 조금 낮다.
다음번 깊이 있는 학습을 사용한다.

좋은 웹페이지 즐겨찾기