はじめに
機械学習の勉強の備忘録まとめを作成します。
基本統計量について
| 名称 | 英語名称 | 算出方法 |
|---|---|---|
| 平均値 | mean | 合計値を個数で割る |
| 中央値 | median | 合計値の個数の真ん中の値(なければ中心部に当たる2つの値の平均値) |
| 最大値 | max | データの中の最大の値 |
| 最小値 | min | データの中の最小の値 |
| 分 散 | variance | データのばらつきを示す指標 |
| 標準偏差 | standard deviation | データのばらつきを示す指標(分散の改良版) |
| 相関係数 | correlation coefficient | データ同士の関連性の値 |
略したりしてコードにしているので、一応英語名称もまとめてあります。
相関の強さ
相関は、下記のような強さ別での判断基準になっています。
a < -0.7 < b < -0.3 < c < 0.3 < d < 0.7 < e
| 場所 | 相関 |
|---|---|
| a | 強い負の相関 |
| b | 弱い負の相関 |
| c | 無相関 |
| d | 弱い正の相関 |
| e | 強い正の相関 |
上記表のように、0.3,0.7を基準として、統計的に相関があるか、あった場合はどのぐらい関係をしている内容なのか、判断できます。
機械学習の大まかな流れ
1. 目的の明確化
機械学習を行う際に、どこがゴールとなるのか?を最終的に決める。
機械学習は時間的にも作業的にもコストがかかるので、あくまでも手法でしかないことを念頭に実行するかどうかを検討する。
2. データ収集
データを作成する、既存のデータセットを活用する等、データの収集方法を確認する。
3. 前処理
- ダミー変数化:文字列を数値に置き換える
- 欠損値処理:データの欠損部があるか確認し、あれば処理(補填or削除)を行う
- 外れ値の除外:手法により影響可能性があるので、削除するか検討する
- 特徴量の絞り込み:データ内の関連しそうな要因(特徴量)を絞る
- 標準化:平均が0、分散が1となるようにデータを変換し、データの分布や値を統一し、適切な判断ができるようにする
- 多項式特徴量・交互作用特徴量の追加:データ数を増やすために行われる
多項式特徴量 ある特徴量を累乗し、新しい特徴量として追加
交互作用特徴量 データ同士の掛け合わせ - 特徴量と正解データへの分割:教師あり学習で必須
- 訓練・検証用・テストデータの分離:学習は学習用、ちゃんとできてるか確認する用、本番の性能評価用というような形で分割する
4. 学 習
- 未学習モデルの生成:選択した学習方法でモデルを作成する
- 訓練データで学習:まずは訓練データで学習を行う
5. 評 価
- 検証データでの評価:訓練ができているかどうか確認し、必要があれば前処理を追加・修正する
- 最終評価:テストデータでの性能評価を行う
コード一覧
scikit-learn
今までに使用したimport部のコードごとに、内容をまとめます。
tree:決定木モデル
# 決定木モデルの使用
from sklearn import tree
# 回帰木の作成
from sklearn.tree import DecisionTreeClassifier,DecisionTreeRegressor
決定木モデルは、分類・回帰問わず使用でき、分類であれば分類木、回帰であれば回帰木という名称になっています。
外れ値の影響を受けにくく、可視化した後に過程の説明がしやすいのも特徴です。
linear_model:線形モデル
# 重回帰モデルの作成
from sklearn.linear_model import LinearRegression
#ロジスティック回帰による学習
from sklearn.linear_model import LogisticRegression
特徴量 1つ → 単回帰
特徴量 2つ以上 → 重回帰
ロジスティック回帰については標準化をしないとよい値が出ないので、標準化と原則セットで使用します。
model_selection:モデルの選定
# 訓練データとテストデータへ分離
from sklearn.model_selection import train_test_split
訓練データ、検証用データ、テストデータと割合やランダムシードを決めて分割できます(ホールドアウト法)。
preprocessing:前処理
# 標準化
from sklearn.preprocessing import StandardScaler
データごとに平均値や最大・最小値のずれがあり、数値的に適切な判断ができるように、平均が0、分散が1となるようにデータを変換します。
ensemble:アンサンブル学習
# ランダムフォレスト回帰
from sklearn.ensemble import RandomForestRegressor
# アダブースト回帰
from sklearn.ensemble import AdaBoostClassifier,AdaBoostRegressor
バギング:復元抽出(ブートストラップサンプリング)を行う→ランダムフォレスト
ブースティング: 逐次学習→アダブースト回帰
metrics(metrics =行列、測量等)
# 混同行列(confusion_matrix)計算
from sklearn.metrics import confusion_matrix
# MAE(平均絶対誤差)計算
from sklearn.metrics import mean_absolute_error
# MSE(平均2乗誤差)計算
from sklearn.metrics import mean_squared_error
# 再現率と適合率を一括計算
from sklearn.metrics import classification_report
MAE:平均絶対(絶対値 =absolute)誤差
MSE:平均2乗(2乗 =square)誤差
RMSE:平均平方根(平方根 =root)2乗誤差
RMSEについては、scikit-learn上にクラスがないので、MSEの計算後にsqrt()で求めます。
おわりに
ざっと内容をまとめてみたので、内容の掘り下げは別記事に書いていきます。
参考文献
『スッキリわかるPythonによる機械学習入門 第2版』 須藤秋良・著