【Pythonデータサイエンス超入門2-3】機械学習の基本〜教師あり学習編〜【YouTube】
動画で学べるPythonによるデータサイエンスの基礎シリーズ、6本目です。ついにAI開発に欠かせない技術、機械あり学習を扱います。
動画
アジェンダ
時間 | 内容 |
---|---|
0:00 | イントロダクション |
2:39 | 機械学習/教師あり学習とは? |
6:43 | 回帰問題と分類問題 |
13:54 | 扱う機械学習モデルの紹介 |
14:48 | ├ 決定木分析 |
18:08 | ├ SVM |
21:18 | ├ ランダムフォレスト |
24:01 | └ 勾配ブースティング |
25:39 | 分析モデルの比較・選び方 |
29:08 | 精度の測り方〜回帰問題〜 |
33:07 | 精度の測り方〜分類問題〜 |
46:05 | 良いモデルとは?〜過学習について〜 |
54:41 | Pythonによる実装 |
55:08 | ├ ライブラリ&データの準備 |
1:07:33 | ├ 分類問題+決定木分析:モデルの構築 |
1:10:45 | ├ 分類問題+決定木分析:精度検証&パラメータ調整 |
1:23:00 | ├ 分類問題+決定木分析:決定木の可視化 |
1:29:56 | ├ 分類問題+決定木分析:未来予測 |
1:36:35 | ├ 分類問題+SVM |
1:38:56 | ├ 分類問題+ランダムフォレスト |
1:43:01 | ├ 分類問題+勾配ブースティング |
1:47:59 | └ 回帰問題 |
1:58:07 | クロージング |
シリーズ一覧
ローデータのダウンロード
ソースコード
ライブラリ・データの準備
ライブラリの読み込み
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 |