条件を見つけ決定木を作り分類する。最初はランダムに条件を試す。
from sklearn import tree model = tree.DecisionTreeClassifier(max_depth=3, random_state=0)
tree.plot_tree(model, feature_names=特徴量の列名のリスト,class_names=ラベルの値のリスト, filled=True, fontsize=12)
import matplotlib.pyplot as plt plt.subplots(figsize=(16, 12)) tree.plot_tree(model, feature_names=x_train.columns, class_names=y_train.unique(), filled=True, fontsize=12)
model.feature_importances_ で分かるのでそれに列名(x_train.columns)を付けて表示
pd.Series(model.feature_importances_, x_train.columns)
回帰分析の手法で分類を行う。
from sklearn.linear_model import LogisticRegression model = LogisticRegression(random_state=0)
決定木をランダムに多数作成し、その多数決で決定する。
from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier(n_estimators=200,max_depth=3,random_state=0)
# 特徴量の重要度表示 pd.Series(model.feature_importances_,["列名1", "列名2", "列名3"])
勾配ブースティング。
決定木を多数作成し、その予測合計値で決定する。ただし、決定木は前の決定木を元に進化させる。
※教師データは数値であることが必要。
pip install xgboost
from xgboost import XGBClassifier model = XGBClassifier() model.fit(train_x, train_y) model.score(test_x, test_y)
# 特徴量の重要度表示 pd.Series(model.feature_importances_,["列名1", "列名2", "列名3"])
from sklearn.neural_network import MLPClassifier model = MLPClassifier(hidden_layer_sizes=(100,), random_state=0, max_iter=1000) model.fit(train_x, train_y) model.score(test_x, test_y)
予測用の直線を引く。元データの値が1つの場合には単回帰分析という。
この場合、次のような式になる:係数×値1+定数
値が複数の場合、重回帰分析という。このときには次の式になる。
係数1×値1+係数2×値2+係数3×値3+・・+定数 で表される
from sklearn.linear_model import LinearRegression model = LinearRegression()
# 係数を列名とともに表示 tmp = pd.DataFrame(model.coef_) tmp.index = ["列名1","列名2","列名3"] tmp
重回帰分析のうち、1つのデータが重要な場合に使用。
係数の範囲を絞ることで過学習が置きにくい。
from sklearn.linear_model import Ridge model = Ridge(alpha=0.1)
予測に役立たない係数を0にする。1つのデータが重要な場合に使用。
from sklearn.linear_model import Lasso model = Lasso(alpha=10)
代表点を分類する数だけ決め、そこからの平均距離が最も近くなるようにする。
最初にランダムに代表点を決め、そこから近いものに分類し、中央点を出す。そこを新たな代表点とし計算する。これを繰り返す。
# K平均法 from sklearn.cluster import KMeans model = KMeans(n_clusters=3,random_state=0) # 3つに分類