YouTubeによるPythonデータサイエンス超入門シリーズ「機械学習の基本〜教師あり学習〜」で紹介したソースコードを掲載しているページです。
ご自由に動画で使用したCSVのダウンロードやソースコードのコピー&ペーストなどしてご活用ください。
YouTubeチャンネル
動画リンク
ローデータのダウンロード
ソースコード
ライブラリ・データの準備
ライブラリの読み込み
1 2 3 4 5 |
import numpy as np import pandas as pd import scipy from sklearn.model_selection import train_test_split |
分類問題用データ
1 2 3 4 5 6 7 8 9 10 11 |
#分類タスク用データ df_class = pd.read_excel("従業員データ.xlsx") #説明変数と目的変数に分離 y = df_class["Result"] X = df_class[["年次", "月給(万円)", "管理職", "社員満足度"]] #学習用とテスト用に分離 X_train, X_test, y_train, y_test = train_test_split( X,y,test_size=0.3,stratify=y ) |
回帰問題用データ
1 2 3 4 5 6 7 8 9 10 11 |
#回帰タスク用データ df_reg = pd.read_excel("家賃データ.xlsx") #説明変数と目的変数に分離 y = df_reg["Result"] X = df_reg[["平米", "築年数", "首都圏", "最寄駅からの距離"]] #学習用とテスト用に分離 X_train, X_test, y_train, y_test = train_test_split( X,y,test_size=0.2 ) |
機械学習モデルの構築
決定木分析(分類)
1 2 3 4 |
from sklearn.tree import DecisionTreeClassifier model = DecisionTreeClassifier() model.fit(X_train,y_train) |
決定木分析(回帰)
1 2 3 4 |
from sklearn.tree import DecisionTreeRegressor model = DecisionTreeRegressor() model.fit(X_train,y_train) |
SVM(分類)
1 2 3 4 |
from sklearn.svm import SVC model = SVC() model.fit(X_train,y_train) |
SVM(回帰)
1 2 3 4 |
from sklearn.svm import SVR model = SVR() model.fit(X_train,y_train) |
ランダムフォレスト(分類)
1 2 3 4 |
from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier() model.fit(X_train,y_train) |
ランダムフォレスト(回帰)
1 2 3 4 |
from sklearn.ensemble import RandomForestRegressor model = RandomForestRegressor() model.fit(X_train,y_train) |
勾配ブースティング(分類)
1 2 3 4 |
from sklearn.ensemble import GradientBoostingClassifier model = GradientBoostingClassifier() model.fit(X_train,y_train) |
勾配ブースティング(回帰)
1 2 3 4 |
from sklearn.ensemble import GradientBoostingRegressor model = GradientBoostingRegressor() model.fit(X_train,y_train) |
モデルの評価
分類問題
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from sklearn.metrics import confusion_matrix from sklearn.metrics import classification_report #予測の実行 y_pred = model.predict(X_test) #混同行列 cm = confusion_matrix(y_test, y_pred) #各種評価値 cr = classification_report(y_test, y_pred, output_dict=True) pd.DataFrame(cr) |
回帰問題
1 2 3 4 5 6 7 8 9 |
from sklearn.metrics import mean_squared_error #予測の実行 y_pred = model.predict(X_test) #2乗誤差 MSE = mean_squared_error(y_test,y_pred) MSE |
モデルの可視化
決定木
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import cython from dtreeviz.trees import dtreeviz import graphviz #結果の可視化 viz = dtreeviz(model,X_train,y_train, target_name = "Result", feature_names = ["年次", "月給(万円)", "管理職", "社員満足度"], class_names = ["在籍","退職"], fontname = "Hiragino Maru Gothic Pro", fancy = False ) viz |
Feature Importance
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import seaborn as sns # モデルの特徴量の重要度を取得 fi = model.feature_importances_ # 特徴量の重要度をデータフレームに格納し、降順にソート df = pd.DataFrame({ 'Feature': X.columns, 'Importance': fi }).sort_values(by='Importance', ascending=False) # 棒グラフの描画 sns.set(font="Hiragino Maru Gothic Pro") sns.barplot(data=df,x="Importance",y="Feature") |
予測
分類問題
1 2 3 4 5 6 7 8 9 |
df_class_p = pd.read_excel("従業員データ_予測用.xlsx") df_class_p_X = df_class_p[["年次", "月給(万円)", "管理職", "社員満足度"]] pred = model.predict(df_class_p_X) pred_proba = model.predict_proba(df_class_p_X) df_class_p["予測結果"] = pred df_class_p["退職確率"] = pred_proba[:,1] |
回帰問題
1 2 3 4 5 6 7 |
df_reg_p = pd.read_excel("家賃データ_予測用.xlsx") df_reg_p_X = df_reg_p[["平米", "築年数", "首都圏", "最寄駅からの距離"]] pred = model.predict(df_reg_p_X) df_reg_p["予測結果"] = pred |