結果の標準偏差、モデルセレクションについて
import pandas as pd
df = pd.read_csv('./input/bank.csv')
# 名義尺度を除く
df = df.drop(labels=["職種", "結婚", "学歴", "連絡手段", "前回の結果"], axis=1)
df.head() →いらないものを削除している。
X = df.iloc[:, :-1]
y = df.iloc[:, -1]
import numpy as np
from sklearn.model_selection import cross_val_score
まず決定木を試す
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier(random_state=0)
scores = cross_val_score(tree, X, y, cv=10)
print("正答率", np.mean(scores), "標準偏差 +/-", np.std(scores))
正答率 0.69 標準偏差 +/- 0.142828568570857
ロジスティック回帰を試す
from sklearn.linear_model import LogisticRegression
# C=0.01, 0.1, 1, 10, 100を試した
lr = LogisticRegression(C=0.01, random_state=0, solver='liblinear')
scores = cross_val_score(lr, X, y, cv=10)
print("正答率", np.mean(scores), "標準偏差 +/-", np.std(scores))
正答率 0.745 標準偏差 +/- 0.1171537451385998
SVMを試す
from sklearn.svm import SVC
# C=0.01, 1, 100, gamma=0.01, 1, 100を試した
svm = SVC(C=1, gamma=0.01, random_state=0)
scores = cross_val_score(svm, X, y, cv=10)
print("正答率", np.mean(scores), "標準偏差 +/-", np.std(scores))
正答率 0.515 標準偏差 +/- 0.05024937810560447
ロジスティック回帰が一番良さそう
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.3,
random_state=0,
)
# 判定用に変数に保存
clf = lr
clf.fit(X_train, y_train)
clf.score(X_test, y_test)
0.7833333333333333
コメント