科学の箱

科学・IT・登山の話題

機械学習

Pythonではじめる機械学習 – Chap02

投稿日:

2.1 Classification and Regression

分類問題の目的

  • クラスがどのようなラベルであるかを予測

分類問題

  • 2つのクラスに分類するバイナリクラシフィケーション 例)Yes/No, Spam問題
  • 複数のクラスに分類するマルチクラスクラシフィケーション 例) Iris

回帰問題の目的

  • 連続値を求める
  • 例) 年収を年齢、教育、居住地から計算する。

分類と回帰の見分け方

  • 目的とする変数が連続変数であれば回帰、不連続(つながっていない)場合には分類

2.2 Generalization, Overfitting, and Underfitting

Generalization

  • 教師データの学習により、検証データ(正解ラベルはわかっているが、学習には与えられていない)について高い正解率で予測できた場合、モデルは”一般化されている”といえる。

Overfitting

  • 学習データでは高い正解率を出すが、検証データでは低い場合、”過学習”と呼ぶ。これはモデルが学習データに対して適合しすぎているために、新しいデータについて応用が効かないことをしめす。

Underfitting

  • 学習データで高い正解率を出さない。

モデルの複雑さとデータ数の関係

明確な値は与えられていないが、データ数が多いほど、より複雑なモデルを構築できる。

  • 一般的なルールはあるのか?
  • そもそも複雑なモデルとは?

2.3 Supervised Machine Learning Algorithms

2.3.2 k-Nearest Neighbors

neighborの数を増やすと境界面がスムーズになっていく。よりシンプルな分類となる。neighborが少ない場合には境界面は過学習の方向に振れており、新しいデータについては正しく分類できない可能性がある。

ではneighborはとにかく増やせばよいのだろうか。いまneighborを20まで増やすと直線になる。これは線形分類となり、もしデータが非線形であれば、正しく分類できない。さらに線形分類であれば、k-NN法以外の学習モデルを利用することができる。

neighborの数を増やしすぎると、線形分類になってしまい、非線形分類はできない。よって正解率等を検証しながら適切なneighborを見つける必要がある。

具体的な方法としては訓練データと検証データについて両方から得られた正解率をプロットする。訓練データの正解率がUの字の一番下になるNeighborあるいは、訓練データと検証データの正解率の差がもっとも小さくなるNeighborが理想的なパラメータといえる。

neighborsの数により境界面がスムーズになるのは、k-NN回帰でも同様である。下記では、▲は学習データ、▼は検証データを表す。線は-3~3を1000分割してモデルから予測された値でプロットしている。neighborが増えるほど境界線がスムーズになっていることがわかる。

k-NNのパラメータ

  • neighborsの数: kNNではあたりをつけてグループ数を指定する。わからない場合には、3~5について正解率を検証するとよい。
  • 距離単位: ユークリッド距離はほとんどの場合有効である。

k-NNの利点

  • 理解しやすい
  • データが多い場合でもパフォーマンスがよい
  • ベースラインとして有効

k-NNのデメリット

  • 予測に時間がかかる
  • 特徴の取り扱いが単純である
  • 実際の業務で使われることは少ない

2.3.3 Linear Models

リッジ回帰ではαの値により相関が変わってくる

αを固定してトレーニングデータの数により、相関係数がどのように変わるかを見てみる。

  • 学習データについては線形回帰が常にリッジより高い相関を示す。
  • 線形の学習はデータ数が少ないと相関が1.0であり、データ数が増えるにつれて次第に下がる。しかしデータ数が500でもおよそ0.9の相関を示す。
  • リッジ学習ではデータ数による相関の大きな違いはない。
  • 線形の検証データではデータ数が400を越えないと相関係数が0.6を越えない→モデルとして学習データが400以下では成り立たない。
  • リッジは検証データ数について100を越えると相関係数が0.6を示す特異点が現れる。次の特異点はおよそ350であり、ここで0.6から0.8へと相関係数が伸びる。

 

様々な線形回帰モデルの違い

  • 係数と切片の組み合わせがデータに適合する度合いの計算方法
  • 正則化項

最もよく使われる線形回帰モデル

  • ロジスティック回帰
  • SVM

the strength of the regularization is called C, and highervalues of C correspond to less regularization. In other words, whenyou use a high value for the parameter C, LogisticRegression andLinearSVC try to fit the training set as best as possible, while withlow values of the parameter C, the models put more emphasis on findinga coefficient vector (w) that is close to zero.

正則化の強度を指定するパラメータがCである。Cが大きいと正則化の度合いは小さくなる。つまり、学習データの正解率が上がる反面、検証データの正解率が低くなる可能性がある。Cが小さくなると係数を0に近づけるようにする。小さすぎると未学習になる可能性がある。

L1正則化(ラッソ)とL2正則化(リッジ)の選択

  • モデルを直感的に理解したいならL1正則化が望ましい。L1は特徴量を削減してくれる。学習モデルがどの特徴量を重視するかがわかりやすい。
  • 過学習を防ぎつつ、利用できる特徴量をすべてモデルに考慮するならばリッジ。ただし、モデルの状態によっては係数が正負逆転する場合があり解釈が難しくなる。

回帰モデルにおけるハイパーパラメータ

  • 回帰におけるαとLinearSVCおよびLogisticRegressionにおけるC
    • αが大きくなる、Cが小さくなるとよりシンプルなモデルになる→係数が小さくなる
  • L1およびL2の選択
    • 特徴量の数を制限したいならばL1、よくわからないならデフォルトのL2

データ量が多い場合に回帰で時間を短縮する方法

  • LogisticRegressionもしくはRidgeでsolver=’sag’を指定する。
  • SGDClassifierもしくはSGDRegressorを利用する

2.3.4 Naive Bayes Classifiers

ハイパーパラメータ

  • α: αを大きくすると境界面がスムーズになる。

モデルによる違い

  • GaussianNBは最も一般的に利用される。高次元データで有効。
  • MultinonomialNBとBernouliNBはテキストなどのスパース行列で利用される。

2.3.5 Decision Trees

決定木は過学習を起こしやすい。そのための仕組みは大きく2つに分かれる。

  • pre-pruning : 決定木作成をあるタイミングで終了する。
  • post-pruning : 決定木は作成するが、少ない情報量のノードを削除する。

pre-pruninngの閾値としては決定木の属性が使える。

  • 決定木の深さ
  • ノードの最大数
  • ノードあたりのデータの数

決定木の検証

  • Feature importanceを可視化する。
  • 回帰における係数とは異なり、Feature Importanceは常にプラスになる。
  • Feature Importanceが0だからといって、その属性が重要ではないという意味にはならない。単純にモデルによって選択されなかっただけである。理由としてはその属性に似た別の属性による分類が可能だったことが考えられる。

決定木のメリット

  • 素人にもわかりやすい
  • 特徴量の前処理が必要ない

決定木のデメリット

  • 過学習を起こしやすい

2.3.6 Ensembles of Decision Trees

決定木のアンサンブル手法

  • 手法としては、Random ForestとGBDがある。

Random Forestの生成手順

  • n_estimatorsで生成する決定木の数を決める。
  • ブートストラップサンプルを取得する。ブートストラップサンプルはn_samplesによって決まるデータ数をランダムに与えられた学習データから取得する。これにより、およそ1/3が失われたサンプルが出来上がる。
  • 各ノードに対してmax_featuresで指定された数の特徴量だけを用いて、決定木を生成する。

Random Forestのハイパーパラメータ

  • max_features=n_featuresになると決定木とブートストラップサンプリング以外は決定木と変わらない。
  • max_featuresが大きいとRandom Forestで生成される、n_estimators数のツリーは比較的似てくる。max_featuresが小さいと、ツリーの形状は異なるが収束するために深くなる傾向がある。

Random Forestの特徴

  • 最もよく使われているアルゴリズム、精度が高く、あまりパラメータの調整が必要ない
  • データのスケーリングが必要ない
  • 解釈が難しくなるので、非専門家やビジネスサイドに説明する場合には、決定木が望ましい。
  • CPUパワーが必要になる。n_jobsで並列数を指定できる。
  • random_stateで決定木を生成する際のランダム状態を指定できる。これにより同じツリーを再現できる。
  • Random Forestは高次元データ、スパース行列、テキストデータには向かない。
  • n_estimatorは高いほどよい、ただしCPUおよびメモリを消費する。
  • ベストプラクティスとして分類に対してはmax_features = sqrt(n_features)、回帰についてはmax_features=n_featuresがある。

GRADIENT BOOSTED REGRESSION TREES

  • Regerssionと呼んでいるが、回帰と分類両方に使える。
  • MLコンテストや実際のビジネスにおいてよく用いられる。
  • パラメータの調整がRandom Forestより複雑である。しかし適切なパラメータ調整できれば優れた結果を返す

機械学習のアプローチ

  • Random Forestを試す。大部分の場合これで十分。
  • 予測時間を短くしたあるいは最後のコンマレベルで正解率を上げたい場合はGradient Boosted Regression Treesを試す。

GRADIENT BOOSTED REGRESSION TREES

  • データスケーリングは必要ない
  • パラメータチューニングに時間がかかる。
  • 学習時間が長い
  • 高次元データ、スパース行列には向いていない

2.3.7 Kernelized Support Vector Machines

多項式の利用

  • ポリノミアル(多項式)にして次元を追加する。
  • 項の選び方によっては境界面が出来上がる。分類が正しくできる境界目ができるとは限らないので、特徴量あるいは項の計算について試行錯誤す必要がある。

カーネルトリック

  • 多項式を利用したいが、選択する特徴量が不明である、また項によっては計算量が増える。これらを解消するのがカーネルトリック。

SVM

  • サポートベクター:境界面を作るために選択されたデータのグループ
  • 距離:サポートベクターを選択する閾値

SVMのハイパーパラメータ

  • gamma : 学習データが境界面に与える影響を調整する。Gausian Kernel直径の逆数に比例する。gammaが小さければより広く影響を与える。大きければ影響は小さい。直径が大きくなるほど影響を与えるデータは多くなる。gammaが小さい場合には富士山のように急激に高度が変わるイメージ。逆にgammaが大きい場合には奥多摩の山のようにあまり高度差がない。
  • C : 正則化項は小さくなると境界面の複雑さに影響を与えている。

SVCの特徴

  • 様々な種類のデータセットに利用できる。
  • 低次元から高次元に対応する。
  • スケーリングが必要。
  • データセットサイズが10,000を越えるとパフォーマンス的な問題が出る可能性がある。
  • データとハイパーパラメータの調整が必要→Treeベースのモデルが好まれる。
  • 学習モデルを検証する際に意味づけが難しい

2.3.8 Neural Networks (Deep Learning)

下記の意味が分からない。続き。よって線形モデルをより正確な予測をするためにもう一つ別のトリックを使う。(このトリックはreluもしくはtanhのこと)

Computing a series of weighted sums is mathematically the same as computing just one weighted sum,

MLPClassifierで学習してみる

  • 非線形であるが比較的スムーズな境界面となる→過学習を起こしていない。
  • MLPのハイパーパラメータを調整する。デフォルトのレイヤー数は100であり、これはデータセットに対して多すぎる。
  • レイヤー数=境界面の直線の数となる
  • L2正則化はalphaで制御する。デフォルトは低い値に設定されている。これは正則化が小さい、よって境界面はギザギザになることが予想される。それに対してalphaを大きくすると境界面はなだらかになるが、未学習の可能性が高くなる。

MLPClassifierで複雑度を制御する方法

  • 隠れ層の数
  • alpha

MLPClassifierから出力される下記のメッセージはadamアルゴリズムによる学習曲線の検証結果である。学習曲線がプラトーに達していないために、イテレーションを増やすように警告している。

ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn’t converged yet. % self.max_iter, ConvergenceWarning)

 

NNの特徴 – Pros

  • 極端に大きなデータから必要な特徴量を学習し複雑なモデルを構築できる
  • 処理時間、データ、チューニングにより他のアルゴリズムを凌駕する

NNの特徴 – Pros

  • 処理時間が長くなる傾向がある
  • データの正規化が必要
  • パラメータの調整は技術と時間がかかる

NNのアプローチ

  • 十分なIterationにより過学習を起こさせる
  • alphaを調整して一般化させる
  • algorithmパラメータではadamもしくはlbfgsを設定するとよい

2.4 Uncertainty Estimates from Classifiers

予測について0および1だけでなく、その確実性がわかると便利である。

不確実性を知るモジュールが用意されている

  • decision_function
  • predict_proba

classes_の使い方

gbrt.classes_[[1,0,1]]
# array(['red', 'blue', 'red'], dtype='<U4')

 

decision_function

  • decision_functionは境界面からの距離を返す。
  • 距離により分類の確実性を判断できるかは疑問である。
  • 学習モデルの境界線とdecision_functionの距離によるヒートマップを比較する
  • 理想としては円形もしくはガウス曲線で境界が徐々に変わるのが望ましい。しかし実際には明確な等高線を観察できないので、decision_functionにより分類の確実性を判断できるとはいいがたい。

predict_proba

print(gbrt.predict_proba(X_test[:6]))
#[[0.01573626 0.98426374]
 [0.84575649 0.15424351]
 [0.98112869 0.01887131]
 [0.97406775 0.02593225]
 [0.01352142 0.98647858]
 [0.02504637 0.97495363]]
  •  predict_probaは配列を戻す。この配列はn x 分類数となる。このときnはサンプル数である。配列の一つをとると、ベクターになっている。このベクターは各分類における確率を示す。そのためにベクターの合計は1になる。上記の例では一番目のデータは[0.01573626 0.98426374]となっている。これは分類0が1.6%、分類1が98.4%の確率を示す。

predict_probaの信頼性

A model that is more overfitted tends to make more certain predictions, even if they might be wrong. A model with less complexity usually has more uncertainty in its predictions. A model is called calibrated if the reported uncertainty actually matches how correct it is—in a calibrated model, a prediction made with 70% certainty would be correct 70% of the time.

  • 過学習のモデルにおいては、間違っていても確実性は高い傾向となる。
  • 複雑度が小さいモデルでは、不確実性は多めに出る→正しい傾向になる。
  • カリブレートされたモデル : 不確実性は実際の予想の正確さと適合している。例えば70%の確実度である場合、70%の確率で正しくなる→意味がよくわからない。

メタ情報

inarticle



メタ情報

inarticle



-機械学習

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

仕事で始める機械学習 – 3.学習結果を評価しよう – 指標

主な指標 モデル構築後に確認する主な指標は4つある。 正解率 適合率 再現率 F値 正解率 $$ 正解率 = \frac{TP + TN}{TP+FP+TN+FN} $$ 正解率は全データ数に対する正 …

no image

pythonのデータ分析ライブラリで遊んでみる。

こちらを参考にしてPythonのデータ分析用のライブラリをそろえてみた。 まずはお手軽にヒストグラムを書いてみる。コマンドラインからipythonを立ち上げる。 ipython –pylab &#8 …

no image

売り上げデータの分析

利益 = 売り上げ – コスト 売り上げ = 客数 x 客単価 コスト ≒ 人件費 + 廃棄コスト 客数 客単価 = Σ 品物i x 購入数 客数を増やす方法 来てもらう方法 安売りキャン …

no image

手書き数字データについて次元縮約および教師ありモデルの構築

前回手書き数字データについてイメージで確認した結果、人の目で確認する分には区別ができる。では機械学習ではどのように実施していくのか。 今回は以下の内容について説明する。 多様体学習による次元縮約 ナイ …

no image

dataanalysis-002-week3

exploratory analysis グラフの目的 データのおおよそを理解する パターンを探す モデリングを探す デバッグ コミュニケーション boxplot 値のレンジを確認する 他の値とレンジ …

2019年12月
« 11月   4月 »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

side bar top



アーカイブ

カテゴリー