Posts on scikit-learn

MNIST手書き文字機械学習。TensorFlowチュートリアルの前に、scikit-learnのSVMで復習する。その2。

前回惨敗の正答率だった、SVMによるMNIST手書き文字分類。 まずはscikit-learn付属のデータセットで復習してみることにする。 scikit-learn付属の手書き文字データセットは解像度がひどい こんな感じで試してみると、 from sklearn.datasets import load_digits from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from sklearn.svm import SVC d = load_digits() X_train, X_test, y_train, y_test = train_test_split(d.data, d.target, train_size=0.8) svc = SVC() f…

MNIST手書き文字機械学習。TensorFlowチュートリアルの前に、scikit-learnのSVMで復習する。

TensorFlowを手持ちのMacにインストールしてチュートリアルを写経...する前に、まずは復習がてらscikit-learnのSVMを使って分類してみようと思います。 久々ですっかり忘れてきているもので。 MNIST手書き文字イメージデータのダウンロード THE MNIST DATABASEからトレーニング用とテスト用の手書きイメージデータをダウンロードしましょう。 以下4つです。 train-images-idx3-ubyte.gz: training set images (9912422 bytes) train-labels-idx1-ubyte.gz: training set labels (28881 bytes) t10k-images-idx3-ubyte.gz: test set images (1648877 bytes) t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes) 手で落としてgunzipしてもいいんですが、せっかくなのでpythonで書いてみます。 MNIST手書きイメージデータを扱うためだけのクラス ダウンロードしてgzip伸長する関数を書くと、こうなります。 …最初メモリを節約しようとgeneratorで書いたんですが、データ数が多すぎて処理が重くなったのでやめました^^; 代わりに、流行り?のasyncioを使います。 MNIST手書き文字イメージデータのDataFrame化 先ほどのクラスを使えば、手書き文字イメージデータをDataFrame化するのは簡単です。 from mnist_dl import…

機械学習ライブラリTensorFlowの日本語書籍まとめ。

まだ全部は読破できていない上、1冊は発売予定なんですが… Google製機械(深層)学習ライブラリ、TensorFlowの解説本を紹介します。 TensorFlowのフロントエンドがPythonなので、どの書籍もPythonの基本を理解していることが前提の内容となっています。 まずはこちらのポップな表紙の「TensorFlowはじめました」。 TensorFlowはじめました 実践!最新Googleマシンラーニング (NextPublishing)[Kindle版]posted with ヨメレバ有山 圭二 インプレスR&D 2016-07-29 KindleAmazon[書籍版] 本当にTensorFlowとは何なのか? Tensorとは何か? といった、TensorFlow公式ページのチュートリアルを読めば分かるような位置から図解入りで解説してくれます。 Amazonの評価コメントの評価は低いですが、入門としてはとてもお勧めだと思います。自分のような入門者にとっては、概念を図解してくれるだけでも理解のとっかかりになって、有難いものです。 次は、「TensorFlowで学ぶディープラーニング入門」。はい、まだ発売してません。すいません。 TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~posted with ヨメレバ中井 悦司 マイナビ出版 2016-09-28 AmazonKindle楽天ブックス でも上記の書籍は、副題からも、この中井悦司さんが出されている他の書籍を見ても、かなり本格的な内容であることが予想できますね。ニューラルネットワークって… 言葉は知っているけど、技術的にどうこう言われるとガクブルなので、勉強します。…

機械学習って面白い。Pythonを使ってデータを分類、可視化してみた。

実践Pythonデータサイエンスのレクチャー86 決定木とランダムフォレスト、やっっっと最終章に辿り着きました。 まぁ、理解しきれてないけど… 長かった。 この最終章、visualize_tree()という独自関数を使ってランダムフォレスト分類器による分類結果を二次元マップとして描いて可視化するんですが、パッと見、よく分からないんです。 理解した気になったmeshgrid()関数のことを、実際は理解できていなかったことも要因かな…。 復習を兼ねてvisualize_tree()関数を紐解いてみたら、その過程がとても楽しかったので、簡単に紹介します。 やりたいこと 機械学習の教師用データを自分で作り、それを学習したモデルを作って、未知のデータを網羅的に与えた結果を図示して楽しむのが、ここでの目的です。 機械学習って、本来はもっと高尚な目的があって分析すると思うんですが、ここではその辺りは無視します。 可視化までの流れ概略 教師用データを単純に描画するとこうなって、 教師用データの最大最小範囲に収まる領域を満遍なく予測するため、青い点で示した座標値を作り、 それを分類モデルに与えて、結果を色付けして重ねてやると、こうなる。これは面白い。 可視化までの流れ詳細 では、実際にコードを書いて備忘録を作っていきます。 教師となるデータを作る まずはsklearn.datasets.make_blobs関数を使って、教師データを作ります。 import numpy as np import pandas as pd from pandas…

代表的な機械学習アルゴリズム4つの精度を不倫データで比較する。

変なタイトル…。 またも前回の続きですが、udemyで紹介される機械学習アルゴリズムは以下の4つ。 というより、多すぎて試しきれず、以下の4つに絞ったというか。 ロジスティック回帰 k近傍法 サポートベクトルマシン ナイーブベイズ分類 これらをデフォルトのまま使って予測精度を比較してみようかなと。 まずは不倫データを整えます。前回までの記事にコードのコピペです。 import pandas as pd import numpy as np from pandas import DataFrame, Series import statsmodels.api as sm def is_affairs(affairs): return 1 if affairs > 0 else 0 X = sm.datasets.fair.load_pandas().data Y = X.affairs.…

機械学習用データから分かる、不倫への明暗を分ける5つの要因。

興味本位で始めた、機械学習用不倫データセットと、Pythonの機械学習ライブラリscikit-learnを使って、愛妻の不倫を予測した前回の続き。(疑っているわけじゃないです) 結局、どのパラメータが不倫の大きな要因なのか? 不倫を避けるにはどうすればいいのか? と疑問に感じた人が調べるのは、係数(coefficient)です。 詳しい話はUdemyの実践 Python データサイエンスの講習やWikipediaを参照するとして、ざっくり言うと、「旦那の職業」「妻本人の職業」「子供の人数」・・・などの係数のうち、どれが目的変数(妻が不倫するかしないか)を決定するのに最も影響力を持つか、と解釈しました。 係数は、前回作ったロジスティック回帰modelに格納されているので、一目でわかるように可視化します。 from sklearn.linear_model import LogisticRegression from sklearn.cross_validation import train_test_split # トレーニング用データと確認用データを分離 X_train, X_test, Y_train, Y_test = train_test_split(X, Y,…

「不倫」データセットを機械学習して妻の説明変数パラメータを与えたところ、結果は…

結果はシロでした! 不倫しないそうです。(本人に結果報告したら「わかんないよ」と言われましたが…) まずは学習データをロードします。 import pandas as pd import numpy as np from pandas import DataFrame, Series import statsmodels.api as sm X = sm.datasets.fair.load_pandas().data 学習データに対する正解を作ります。 未知のデータ(妻パラメータ)に対する不倫するか(1)しないか(0)の結果を知りたいんですよね。 def is_affairs(affairs): return 1 if affairs > 0 else 0 Y = X.affairs.apply(…

Udemyデータサイエンス講座のロジスティック回帰テーマは「不倫」。

実践 Python データサイエンス、最後の方でscikit-learnを使って機械学習の基礎が学べます。これは面白い。 今やっとロジスティック回帰なんですが、ここに至るまでにこなしたのは株価解析や(これも面白かったけど)、アメリカ大統領選得票数の解析など、ちょっと堅いテーマが多かったのです。 それがロジスティック回帰にきて、テーマはなんと、「不倫」。 以下のようなデータセットを使ってLogisticRegressionモデルに食わせるわけですが、要するに以下のパラメータを与えれば、その人が不倫するかしないかの2値で予測結果が返っってくるというわけです。あくまで機械学習の学習用のテーマに過ぎないんですが…。 print(sm.datasets.fair.NOTE) :: Number of observations: 6366 Number of variables: 9 Variable name definitions: rate_marriage : How rate marriage, 1 = very poor, 2 = poor, 3 = fair, 4 = good, 5 = very good age : Age yrs_married…