Python

Pythonではじめての機械学習~scikit-learn、tensorflow

投稿日:

機械学習

勉強しているところなので、間違っている箇所もあるかもしれません.

機械学習は、高度な数学知識を使って、多数のデータから、有用な特徴を算出するいくつかのアルゴリズムを使った技法のことをいう.
例えば、ニューラルネットワークを使った深層学習は、機械学習の一分野である.

集合知プログラミングは、そんな機械学習のサンプルがたくさんある書籍だったけど、もうさすがに古い内容かも.

anaconda

anacondaは、Pythonの主要なライブラリをパッケージしたオープンデータサイエンスのプラットフォーム.
だいたいこれをインストールしておけば、環境が整う.

Anaconda

jupyter

jupyterは、インタラクティブなプログラミング言語の実行環境.
PythonやRなどのインタラクティブ実行環境Jupyter Notebookをインストールする

scikit-learn

scikit-learnは、Google製の機械学習用のライブラリ集.
scikit-learn.org/stable/

インストール

scikit-learnの使い方

オブジェクトを準備して、fitで学習し、predictで予測する、scoreでスコアを出すことができる.
オブジェクトは、大まかに、分類、回帰、クラスタリング、次元削減に分類できる.
参考:scikit-learn から学ぶ機械学習の手法の概要
今回は、100k以下のデータなので、linear SVNで分類してみる.

学習のために、学習用のデータと回答、性能を検証するために、テスト用データと回答が必要となる.
学習データとテストデータが同一だと、過学習の問題が生じて汎用性が無くなる可能性がある.
なので、必ず学習用データとテスト用データはわけるべき.

サンプルデータ

scikit-learnには、実験用に様々なサンプルデータが用意されている.
これは、乳がんの識別データ.

識別のもとになる特徴はdataに、識別結果はtargetに保管されている.
なお、DESCRにデータの基本情報、feature_namesに特徴の名前、target_namesに識別結果の名前が保管されている.

データ数は569個、1つのデータは30次元のベクトル.

これらを学習用と検証用のデータに分割する.
ShuffleSplitという便利なメソッドを利用して簡単に分割できる.

学習用のデータで学習して、テスト用データで性能を出す.95はなかなか

ネクストステップ

  • 学習用のデータと検証用のデータを分けるのにデータが偏らないようにする.
  • データのクリーニング
  • 特徴量の抽出、標準化など
  • グリッドサーチ
  • scikit-learnでも多層パーセプトロンのモデルを作成できる

tensorflow

tensorflowは、データフローグラフを使って数値演算を行うオープンソースソフトウェア.Google製.
www.tensorflow.org/

インストール

www.tensorflow.org/install/

GPUなしの環境

GPUつきの環境

tensorflowの使い方

モデルを作成して、セッションオブジェクトから、データを与えて学習する.
Hello Worldの例.

ディープラーニングの仕組みは、おおまかに次の通り.

  1. ベクトルを入力値として、「重み付け」と「バイアス付け」を行う計算をパーセプトロンという一つの単位として、複数のパーセプトロンから出力値を演算するモデルを作成する.複数のパーセプトロンを経由することで複雑な学習が可能になる.
  2. そして、モデルから演算された結果と正しい回答とを比較し、間違っていたら、正しい方向に「重み」と「バイアス」を少しだけ修正する.修正には損失関数を最小化するように動く.
  3. こうした少しだけの修正を可能にするために各パーセプトロンの各レイヤーに活性化関数(シグモイド関数,ReLU)が必要.修正には、勾配という各ベクトルを微分した数値を使うので、微分するためには傾きがある数値である必要があるため.
  4. 識別問題の場合は、出力値を0-1のあいだに収束させるためにソフトマックス関数を最後に使う.ソフトマックス関数を使う際に交差エントロピー誤差というレイヤがあると、学習の計算が楽になる.
  5. データが多いときは、いくつかのデータのまとまりをランダムに作出してミニバッチ処理を行う.

ディープラーニングの仕組みについては次の本がわかりやすかった.

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 [書籍]

著者斎藤 康毅

出版社オライリージャパン

出版日2016年9月24日

商品カテゴリー単行本(ソフトカバー)

ページ数320

ISBN4873117585

Supported by amazon Product Advertising API

サンプルデータ

MNIST For ML Beginners
MNISTデータのダウンロード

import tensorflow

宣言など

入力値など仮置きする数値は、placeholderで、学習して変動する数値は、Variableで宣言する.
固定値は、constant.

本当は、Wやbの初期値をゼロに統一するべきではない.学習の方向と量が同じに単調になってしまうから.

パーセプトロンをモデルとして作成

matmulは行列の積を求める関数.

損失関数を定義

各数値の初期化

バッチ処理

バッチ処理で、学習.

結果

92%の正答率はいまいち.
やり方(Wbの初期値のランダム化、多層パーセプトロン、畳込みニューラルネットワーク、畳込みとプーリング処理、ドロップオフによる過学習の防止など)によって99%まであげることができる.Deep MNIST for Experts

-Python
-,

執筆者:

関連記事

関連記事はありませんでした