sklearn:クラスタリング

clustering

クラスタリング

正解データが欠落してる状態を想像してください。

データたちをクラスター(かたまり)として自動的に分類していく作業です。

正解データがないので「教師なし学習」に分類されます。

サンプルデータを用意します

k-means クラスタリングをします

プロットします

というふうにやります。

 

 

sklearn:ハイパーパラメータの最適化

hyper_params_optimise

ハイパーパラメータを学習と評価を自動的に繰り返すことによって、最適値にする方法があります

ハイパーパラメータとは

  • ユーザーが手動で設定するパラメータのこと。(訓練によって決まらない)
  • 決定木の層の深さ、ランダムフォレストの決定木カバレッジなど。

最適化の方法

グリッドサーチ:ハイパーパラメーターを自動で色々振った機械学習モデルを作成するします。(ランダムサーチというやり方もありますがマイナーなので割愛)

グリッドサーチと交差検証を行うのが一般的です。

ではやってみましょう

特に細かい説明は必要ないですよね。利用していきましょう。

 

 

ああ

 

 

ああ

 

sklearn:機械学習モデルを評価 混同行列・交差検証・ROC・AUC

model_evalation

今日は機械学習モデルの評価について考えてみます。

機械学習モデルの評価

訓練したモデルに対して、新しいデータが入ってきたときに、データのカテゴリをどれだけ正確に当てられたかが、その訓練済みモデルの性能になりますよね。

カテゴリの分類精として、下記4つの確率的な指標があります。

  1. 度適合率 Precision = tp / (tp + fp) :予測するクラスをなるべく間違えないようにする指標
  2. 再現率 Recall = tp / (tp +fn )
  3. F値  F-Value = 2/((1/適合率)+(1/再現率)) :適合率と再現率の調和平均
  4. 正解率 (tp+tn)/(tp+fp+fn+tn) :予測と実績が一致したデータの割合

で、これを一つの行列にまとめたのが、
混同行列 Confusion matrix

というものです。

各変数になっていのは

  • tp : True-Positive 正例Positiveと予測して、正解Trueだった
  • fp : False-Positive 正例Positiveと予測して、不正解Falseだった
  • fn : True-Negative 負例Negativeと予測して、正解Trueだった
  • tn : False-Negative 負例Negativeと予測して、不正解Falseだった

という結果の数が入ります。

統計用語が入っていますが、

  • 正例:興味のある事柄のクラスに属するデータ
  • 負例:興味のない事柄のクラスに属するデータ

ということです。

アイリスデータをSVMで分類する

混同行列を見ていきたいので、まずはサンプルデータとしてアイリスデータをSVM分類し、予測結果まで実行してみます。

混同行列を算出する

基本的には適合率が高いものが優秀と考えています。

再現率も考慮して 適合率と再現率の間を取るのがF1という値です。

こんな形のマトリクスで出力されます。

層化k分割交差検証

もともとのデータをk個の塊に等分して、訓練用データと検証用データの組み合わせをkパターン用意して、kパターンすべてについて一気に交差検証をする方法です。

ROCとAUC

予測確率の正確さを見ていく方法です。

  •  ROC曲線:Receiver Operating Characteristic
  •  AUC : Area Under the Curve

確率の高い順にデータを並べる
確率以上のデータはすべて正例と予測する

実際に正例だったデータの割合(真陽性率)
実際は負例にも関わらず正例と予測されたデータの割合(偽陽性率)

正例と予測する確率のしきい値を変えていったときに真陽性率を横軸、
偽陽性率を縦軸にとったものがROC曲線

次に AUC曲線 Area Under the Curveですが、要するにROC曲線の面積のことです。1に近いほど正例、0.5に近づくほど正例と負例が混在していて分類できなくなるという意味があります。

ROC曲線と AUCを素早く求めて見ましょう

参考

機械学習の評価指標 – ROC曲線とAUC

 

 

sklearn:主成分分析をやってみる

principal_component_analysis

主成分分析です。

高次元データに対して、ばらつきが大きくなる方向を見極め、次元を落とす方法です。

まずはサンプルデータを作ってプロットしてみます

で、これを主成分分析すると

となり、軸PC1方向にデータは散らばっているが軸PC2にはあまり散らばっていないことがわかるわけです。って、可視化すると当たり前ですよね・・・。

いずれ必要になったときに、次元削減関係は深堀りしていきますので、今日はただのメモ書きになりました。

sklern:ボストンデータを重回帰分析 

今日は ボストンの不動産データを使って重回帰分析をしてみましょう。

一気にいきます。

データ読み込み 訓練検証データに分割 機械学習モデル定義 訓練 予測

相関グラフ

横軸に予測結果 縦軸に実際のデータをプロットしています。右肩上がりのまあまあな相関が取れていますが、外れ値を除いても0.5~1.5倍のばらつきがあるようです。

以上

sklern:ランダムフォレストでアイリスデータを分類してみる

random_forest

前回は決定木一本でアイリスデータを分類してみましたが、決定木のハイパーパラメータ次第では性能が異なってきます。

このハイパーパラメータ自体の決定も自動化する方法がランダムフォレストです。

データセット読み込みからデータ分割まで

ここはいつもどおりです。

 

ランダムフォレストで決定木を100本作成して訓練する

さあ予測して性能を確認しましょう。

 

変数resultは

になりました。97%あってますね。

ということで、100本分の決定木を一気に評価できたわけです。

sklern:決定木でアイリスデータを分類してみる

decision_tree decision_tree.ipynb

決定木を使ってアイリスデータを分類してみます。

基本手順

基本手順はsklearnや他の機械学習モジュールであるtensor flowなども全く一緒です。

  1. データの読み込み
  2. 訓練用データと検証用データに分割
  3. 機械学習モデルの定義とハイパーパラメータの設定
  4. 訓練
  5. 予測
  6. 性能評価

必要なモジュール

インストールしておきましょう。

$ pip install pydotplus

graphvizもインストールしておきましょう。

graphviz もインストールしておきます。別ページにしておきますので、予めやっておく必要があります。当ページの最後の方にも同じ内容を記載しておきます。

スクリプト

データの読み込み~訓練 までです。

予測して、性能を評価します。

では、決定木を可視化してみましょう。

graph.write_png(‘tree.png’) で決定木のグラフはホームディレクトリに出力されていますので、眺めてみましょう。

 

graphvizのインストール

さて、これでうまく行かない人もいるのでしょうか。

上記スクリプトの中にも注意書きを書いていたのですが、graphvizを予めインストールしておく必要があります。

しかし、pip install graphvizしても

&pip install graphviz だけでは graph.write_png(‘tree.png’) の部分が実行されません。

どうやらdot.exe にパスを通しなさいと警告がでるのですが、そもそもpip install された 先がわかりませんでした。作戦変更です。

graphviz 公式サイトからのインストール

graphvizの公式webサイト

https://graphviz.gitlab.io/_pages/Download/Download_windows.html

からgraphvizのインストール graphviz-2.38.zip をダウンロードして展開するとreleaseというフォルダが作成されます。

C:\\Program Files (x86)\\ の下に 新規でgraphviz-2.38フォルダを作成して、そのさらに下にreleaseフォルダを移動します。

結果、dot.exeが

C:\\Program Files (x86)\\graphviz-2.38\\release\\bin\\dot.exe

の位置になります。(インストーラーがなさそうなので、フォルダ移動だけです。)

システム環境変数の追加

ではパスを通しましょう。

windowsボタンをおして検索に「システム環境変数」と入れます。システムのプロパティが開くので、環境変数ボタンを押して、システム環境変数のpathを編集します。

新規ボタンを押して、さっきのdot.exeのパスである

C:\\Program Files (x86)\\graphviz-2.38\\release\\bin\\dot.exe

をコピペします。

 

これでgraphvizが使えるようになったと思います。

補足:graphviz  のpipインストール ではだめです

なにやら graphviz-0.12 というバージョンがおかしなことになっているものが入ってきました・・・。

ということで、前述した公式サイトからダウンロードしてファイルを移動してパスを通して・・・という方法が良いのです。以上

 

sklearn:サポートベクター分類

sklearnのサポートベクター分類の一般的なやり方です。

線形分類とか

カーネルに操作を加えた分類とか

スクリプト