scikit learn と TensorFlow による実践機械学習 - izudon/izudon.github.io GitHub Wiki
第1章の要点
機械学習
機械学習とは(機械学習の定義)
コンピュータプログラムは、 経験EによってタスクTに対する測定指標Pで測定した 性能が上がる時、TについてEから学習すると言われる
━━━トム・ミッチェル(1997)
- 経験E
- タスクT
- 測定指標P
機械学習の分類
- 教師あり学習 と 教師なし学習
- 人間の関与のもとで訓練されるかどうか。
- オンライン学習 と バッチ学習
- その場で少しづつ(逐次的・漸進的に)学習できるかどうか。
- インスタンスベース学習 と モデルベース学習
- 単純にデータポイント同士を比較するか、パターンを見つけ出してそれを用いるか。
機械学習が得意とする4つのケース
- 手作業の省略
- 手作業による大量のチューニングや長大なルールリストが
単純な学習アルゴリズムに置換でき、性能も向上する。
- 手作業による大量のチューニングや長大なルールリストが
- 解決策の発見(複雑な問題)
- 従来の方法ではよい解決策が見つからない問題を
機械学習ならばうまく解いてしまう可能性がある。
- 従来の方法ではよい解決策が見つからない問題を
- 環境変化への対応(変動する環境)
- 新しいデータに対応できる。
- 知見の獲得
- 従来なら見つけにくかったルールなどを
機械学習プログラムが見つけてしまう可能性がある。
- 従来なら見つけにくかったルールなどを
教師あり学習の具体例(一部知ってる)
- k近傍法 → 知った
- 線型回帰 → 知ってる
- ロジスティック回帰 → 知らないけど回帰の一種だろうと想像はつく
- サポートベクトルマシン(SVM)→ 知らない
- 決定木とランダムフォレスト → 知らない
- ニューラルネットワーク → 知らない
教師なし学習の具体例(全部知らない)
- クラスタリング(clustering)
- k平均
- 階層型クラスタ分析(HCA)
- EMアルゴリズム(expectation maximization : 期待値最大化法)
- 異常検知(anomaly detection)もここに入ると思われる
- 可視化(visualization)と次元削減
- 主成分分析(PCA : principal component analysis)
- カーネルPCA
- 局所線形埋め込み(LLE : locally-linear embedding)
- t分布型確率的近傍埋め込み法(t-SNE : t-distributed stochastic neighbor embedding)
- 相関ルール学習 =「おむつとビールはセットで買われている」
- アプリオリ
- eclat
モデルベース学習による予測の進め方
- データの検討
- モデルの選択
- 訓練(training)= 適応度関数が最大またはコスト関数が最小となるようにモデルパラメータを定める。
- 推論(inference)= 新しいケースにモデルを適用し、結果を得る。
機械学習が抱える問題点
- まずいデータ
- 数が少ない
- 機械はまだ人間ほど賢くはなく数百万のデータが必要。
- 偏りがある(現実を代表しているとは言えない)
- サンプリングバイアス(sampling bias)がある。
- サンプリングノイズ=データが少ない時特に問題
- ノイズ(欠損、誤り、外れ値)がたくさんある
- 欠損がある場合以下の中から適切なものを選ぶことになる。
- その属性を完全に無視してしまう
- そのインスタンスを完全にないものとして扱う
- 欠損値を補う(例えばそれら以外の中央値とする)
- 特徴量を持つモデルと持たないモデルを両方訓練する
- 欠損がある場合以下の中から適切なものを選ぶことになる。
- 無関係な特徴量
- 特徴量エンジニアリング(feature engineering)= 次元削減が有効
- 数が少ない
- まずいアルゴリズム
- 過学習(overfitting)
- モデルが複雑すぎる場合に起こり得る
- 過少適合(underfitting)
- モデルが単純すぎる場合に起こり得る
- 過学習(overfitting)
過学習を防ぐために取りうる手段
- モデルの単純化
- よりパラメータの少ないモデルを選ぶ(パラメタを減らす)
- モデルに制約を与える(パラメタに上限値下限値を設けるなど)= 正則化(regularization)
- 学習に用いる属性値を減らす(特徴量エンジニアリング?)
- データを増やす(偏りもなくなる?)
- ノイズを減らす
- 誤りを修正する
- 外れ値を取り除く
- 欠損値を補う
機械学習の応用例
- OCR(Optical Character Recognition 光学的文字認識)
- スパムフィルタ(spam filter)
- 異常検知(anomaly detecting)
日本語の訳語
- 学習(learn)
- 訓練セット(training set)
- 訓練インスタンス(training instance)= 訓練セットの個々のデータのこと
- ターゲット(target)= 訓練データ等ではなく、実際に予測したい対象物。
- タスク(task)= 例えば、新しいメールをスパムかそうでないか判断すること
- 標本(sample)
- 精度(accuracy)
- データマイニング(data mining)= 人間には気づけなかったデータのパターンに、機械学習を用いることで気づける可能性がある。
- 分類(classification)
- クラス(class)= 例えば、スパムかハムかも「クラス」。
- 回帰(regression)
- ロジスティック回帰(logistic regresson)
- ラベル(label)= この場合は、価格。
- 「札(ふだ)付きのワル」この「札」のこと。
- 特徴量(feature)= 走行距離、使用年数、ブランド、etc.
- クスリをヤッている、詐欺まがいのことをしでかす、etc.
- 属性(attribute)
- 予測子(predictor)
- クラスタリング(clustering)
- 可視化(visualization)= 予想外のパターンを見つけられたりする
- 次元削減(dimension reduction)
- 異常検知(anomaly detection)
- 半教師あり学習(semisupervised learning)
- ほとんどは、教師あり学習と教師なし学習を結合したもの。
- 例えば DBN(deep belief network)
- 制限付きボルツマンマシン(restricted Boltzmann machines : RBM)
- 教師なし学習で RBM を逐次的に訓練してから
教師あり学習でシステム全体を微調整するもの。
- 強化学習(reinforcement learning)
- エージェント(agent)
- 報酬(reward)
- 方策(policy)
- バッチ学習(batch learning)
- オフライン学習(offline learning)
- オンライン学習(online learning)
- ミニバッチ(mini-batch)
- アウトオブコア(out-of-core)= 主記憶(core)に入りきらないほどの大きな訓練データセット
- 差分学習(incremental learning)
- 汎化(generalization)
- インスタンスベース学習(instance-based learning)
- 類似度の尺度(measure of similarity)
- モデルベース学習(model-based learning)
- モデルの選択(model selection)
- モデルパラメータ(model parameter)
- 適応度関数(utility function)= モデルがどれほど良いかを示す
- コスト関数(cost function)= モデルがどれほど悪いかを示す
- 訓練(training)
- 推論(inference)
- 特徴量エンジニアリング(feature engineering)
- 特徴量選択(feature selection)
- 特徴量抽出(feature extraction)= 次元削減アルゴリズムが役立つ
- 過学習(overfitting)
- 過少適合(underfitting)
- 自由度()
- 正則化(regularization)= 過学習を防ぐためにモデルに制約を加えること。
例えば、パラメタの数を減らす、パラメタの範囲に上限値と下限値を設ける、など。 - ハイパーパラメータ(hyperparameter)
- 訓練セット(training set)
- テストセット(test set)
- 汎化誤差(generalization error)
- 標本外誤差(out-of-sample error)
- 検証セット(validation set)
- 交差検証(cross-validation)
- 前提(assumption)
- ノーフリーランチ(NFL : no free-lunch)
- アプリオリ(a priori ラテン語)= 無前提で
1.6 演習問題(p.32)
1. 機械学習はどのように定義すれば良いか
- 人間が教えなくてもデータさえ与えれば機械の方で勝手に賢くなって新たなデータに精度良く対応できるようになるようなそんなマシンを作ること。
2. 機械学習が力を発揮する問題の4つのタイプを挙げられるか
- 手組みの判断ロジックや長いリストなどを、単純んが学習アルゴリズムへと置換でき、場合によっては性能も上げられる
- 解決策の見つけにくい複雑な問題を解くことができる
- 環境変化に対処できる
- 人間には見つけにくかった新たな知見を得られる
3. ラベル付きの訓練セットとは何か
- 教師あり学習で用いられるデータセットの特徴。
- 各データにはその処理の結果として算出されるべき「答え」がくっついていいる。この「答え」を「ラベル」と表現したものが「ラベル付きデータ」。
- 荷物につけられたネームタグみたいなものを想像すれば良い。
- 「正常」「異常」のようなもの、あるいは「手書き文字(画像)」に対する「文字(アスキーコード)」、あるいは「幸福度」のような実数値が、ラベルとなりうる。
4. 教師あり学習の応用分野の中でとくによく見られる2つは何か
- 分類(Classification)と回帰(Regression)
5. 教師なし学習がよく使われる4つの応用分野は何か
- クラスタリング
- 可視化
- 次元削減
- 相関データ分析
6. さまざまな未知の領域を探索するロボットで使える機械学習アルゴリズムのタイプはどのようなものか
- 強化学習(reinforcement learning)
7. 顧客を複数の領域にセグメント化するためにはどのようなタイプのアルゴリズムを使うか
- クラスタリング
8. スパム検出は、教師あり学習問題、教師なし学習問題のどちらとして構築すればよいか
- 教師あり学習問題
9. オンライン学習システムとは何か
- データセットが更新されるたびに毎度ゼロから学習し直す「バッチ学習」とは異なり・・・
- データセットが更新されたときその「差分のみ」を与えることで、全体を学習したのと同じ状態にすることができる機械学習システムのこと。
10. アウトオブコア学習とは何か
- 主記憶(core)に収まりきらないような大量のデータを用いる学習のこと。
- 一度に学習させることができないため、(バッチ学習ではなく)オンライン学習となる。
11. 類似度の尺度を使って予測する学習アルゴリズムはどのようなタイプのものか
- 教師なし学習
12. モデルのパラメータと学習アルゴリズムのハイパーパラメータは何が違うのか
- モデルのパラメータとは、モデルを最適化するための調整値のこと。
- ちなみにモデルの最適化とは、モデルの良し悪しを判定する尺度を用いて、それがもっとも「良い」と判定されるように、モデルの形を調整すること。
- 判定の尺度には、その最大化を目指して調整する「適応度関数(utility function)」が用いられる場合と、その最小化を目指して調整にあたる「コスト関数(cost function)」が用いられる場合がある。大抵は後者である。
- コスト関数に、各点からの距離が用いられる場合が、最小二乗法である。
- モデルの最適化を目指して頑張っている場合に「過学習(overfitting)」が起こる場合がある。
- 過学習とは、モデルが訓練データに最適化しすぎたあまり新規のデータに対して十分な精度が出せなくなること。
- データセットを8割の訓練データと2割のテストデータに分けた場合(よくやる手法)、訓練データの精度がテストデータでは相当程度低下する場合には、過学習が発生していると言える。
- そこで、訓練データとテストデータをどのように取り分けても、過学習が起こらないような学習アルゴリズムを構築するわけだが、こうなると次は、用意したデータセット以外のデータセットに対して十分な精度が出ない場合がある。
- 学習アルゴリズムのハイパーパラメータとは、このように、用意したデータセットで過学習が起こらない学習アルゴリズムを構築した場合に、それ以外のデータセットに対して精度が出ないケースにおいて、学習アルゴリズム自体がよくないパラメータを持ってしまっているためだと考える。この時のパラメータをハイパーパラメータという。
- 従って、モデルのパラメータはモデルに対する固定化の尺度であり、学習アルゴリズムのハイパーパラメータとは学習アルゴリズムに対する固定化の尺度である。
13. モデルベースの学習アルゴリズムは何を探し求めるか/成功するためにもっともよく使われる戦略は何か/どのようにして予測をするのか
- モデルベースの学習アルゴリズムは、過学習をしないモデルとそのパラメータを探し求める。
- 成功するためにもっともよく使われる戦略は、コスト関数の最小化である。
- どのようにして予測するのか:概ね次の手順となる。
- データの検討
- モデルの選択
- 訓練(訓練データを用いて適応度関数を最大化またはコスト関数を最小化するパラメータを割り出す)
- 予測(学習済みのモデルを新しいデータに適用して結果を得る)
14. 機械学習が抱える大きな難問のうち、4つを言えるか
- データが少ない(と精度が出ない)
- データに偏りがある(サンプリングバイアスがあったりサンプリングノイズが大きいと精度が出ない)
- データにノイズが多い(誤り、欠損、外れ値が多く補わなければならないようなデータだと精度が出ない)
- モデルの選択を誤る(と、過学習や過少適合となってしまい精度が出ない)
データに偏りがある(サンプリングバイアス)データの品質が悪い(欠損やあいまいな値や間違いが多く推測等で補完している)語句の意味などが時代とともに変わってしまっていて(「スイカ」など)連続性がないため、過去の学習結果をそのままでは適用できない。モデルが悪い(具体的に何だったか考え中)
15. モデルが訓練データに対しては高い性能を発揮するのに、新しいインスタンスにはうまく汎化しない場合、何が起きているのか/3つの解決方法を言えるか
- 何が起きているか
- 過学習
- 解決策
- モデルを単純化する(パラメタを減らすor制約する(正則化する)、単純なモデルを選ぶ(自ずとパラメタも減る?))
- データを増やす
- ノイズを減らす(欠損値を補う、誤りを正す、外れ値を除去する)
16. テストセットとは何か/テストセットが必要なのはなぜか
- テストセットとは
- 未知のデータに対するモデルの精度を予測するために用いる、訓練データとは別のデータセット。
- なぜ必要か
- 訓練データを用いただけでは、過学習が起きてしまっている恐れがあるため。
17. 検証セットの目的は何か
- 複数のモデルのうちどれが良いかを、(学習させた上で)検証するためのデータセット。
18. テストセットを使ってハイパーパラメータを調整すると、どのような問題が起きるか
- 最も良いと判定されたモデルを実際のデータに適用した場合に精度が出ないことがある。
- 原因は、テストセットを検証に「複数回」用いてしまっているからで、これでは、
「そのテストセットのために」最適なモデルを選んでしまったことになる。
19. 交差検証とは何か/検証セットよりも優れているのはなぜか
- 交差検証とは以下のような検証のやり方。
- 用意したデータを複数のサブセットにきれいに分け
- うちひとつをテストセットとする。
- 残るサブセットから毎回違うデータセットを検証セットとして
モデルの検証を行い、最良モデルの選定をおこなう。 - その後、テストセットを用いて1回限りのテストを行い、
本番精度の見込みを立てる。
- 検証セットが再利用されないため、本番環境での精度との差異が
生まれにくいモデルが選択されるものと期待できる。