機械学習関連の関数

機械学習関連の関数はMathematica9でもあります.教師なし学習のクラスタリングもver9で充分可能です.Mathematica10で初めて実装されたのだと勘違いしていたので,実際にMathematica10でどんな関数が追加されたのかを確認しました.

 

ドキュメントセンターの機械学習では次のように紹介されています.

機械学習

Wolfram言語には,PredictClassify等の高度に自動化された関数から,特定のメソッドや診断法に基づいた関数まで,統合された幅広い機械学習機能が含まれている.関数は,数値的,分類別,時系列,テキスト,画像等多くの種類のデータに適用できる.

一般的な教師あり学習

Classify  組込みの分類子を使ったり,例から学習したりして,データをカテゴリに分類する

ClassifierFunction  データに適用する分類子の記号表現

Predict  組込みの分類子を使ったり,例から学習したりして,データの値を予測する

PredictorFunction  データに適用する予測器の記号表現

ClassifierMeasurementsPredictorMeasurements  テストデータに対するの性能

ClassifierInformationPredictorInformation  モデル情報等

PerformanceGoal  ▪  Method  ▪  UtilityFunction  ▪  ClassPriors  ▪  IndeterminateThreshold

教師あり学習のための特定のメソッド

Nearest  最近傍を求める

FindFit  一般化された非線形フィットを求める

LinearModelFit  ▪  LogitModelFit  ▪  NonlinearModelFit  ▪  GeneralizedLinearModelFit  ▪ ProbitModelFit

TimeSeriesModelFit  さまざまな種類の時系列をフィットする

Interpolation  データ集合の値の補間を求める

FindSequenceFunction  離散数列を再現する関数を求める

FindHiddenMarkovStates  マルコフ(Markov)モデルで最も尤もらしい経路を求める

教師なし学習法

Eigensystem  ▪  SingularValueDecomposition  ▪  PrincipalComponents  ▪ KarhunenLoeveDecomposition

FindClusters  数値,テキスト,画像等のデータのクラスタを探す

ClusteringComponents  配列と画像の値を元にクラスタを探す

FindGraphCommunities  グラフ中のコミュニティやクラスタを探す

HiddenMarkovProcess  数値データの中のパターンを求める

SmoothKernelDistribution  データのカーネル密度推定を求める

データの準備 »

Standardize  平均がゼロで単位分散を持つようにデータを変換する

Clip  ▪  Rescale  ▪  Threshold  ▪  LogisticSigmoid  ▪  ImageAdjust

CountsBy  ▪  GroupBy  ▪  SortBy  ▪  DeleteDuplicates

データのフィルタリング »

MovingAverage  リスト,時系列などの移動平均を計算する

GaussianFilter  ▪  MeanFilter  ▪  MeanShiftFilter  ▪  LowpassFilter  ▪  ...

この中でMathematica10で新しく導入されたのはこちらです.

一般的な教師あり学習

Classify
ClassfierFunction
Predict
PredictorFunction
ClassifierMeasurements,
PredictorMeasurements
ClassifierInformation
PredictorInformation
UtilityFunction
IndeterminateThreshold

教師あり学習のための特定のメソッド

TimeSeriesModelFit
FindHiddenMarkovStates

教師なし学習法

HiddenMarkovProcess

データの準備 »

LogisticSigmoid
CountsBy
GroupBy

__

主に教師あり学習の関数が追加されているようです.例えばClassify関数の例題で画像のパターン認識をしています.

昼と夜を見分けられるように,分類子を訓練する:

In[1]:=
Click for copyable input
 
Out[1]=

例で検定する:

In[2]:=
Click for copyable input
 
Out[2]=

Classify関数が画像のどんな部分を特徴抽出して判別しているのか分からないけども,なんとなくパターン認識できいてる例ですね.

Mathematicaによる教師なし機械学習 【ClusteringComponents】

Mathematica10では機械学習のための関数が多く導入されています.

機械学習は数値データのみならずテキストや画像データを入力として受けて,予測やクラスタリング,そしてパターン認識などの技術に応用されるアルゴリズムです.発展し続けるビッグデータデータマイニング分野に役立ちます.

f:id:keble14:20140813173352j:plain

詳しいことは,[ドキュメントセンター] → [データの操作と解析] → [機械学習]からどうぞ.

今回は機械学習の中の教師なし学習で簡単なクラスタリングを行います.

①20コの2次元座標データを入力して散布図を描きます.以下のデータです.

 data = {{0.12, 0.12}, {0.12, 0.38}, {0.25, 0.25}, {0.38, 0.12}, {0.38,
0.38}, {0.12, 0.62}, {0.12, 0.88}, {0.25, 0.75}, {0.38,
0.62}, {0.38, 0.88}, {0.62, 0.12}, {0.62, 0.38}, {0.75,
0.25}, {0.88, 0.12}, {0.88, 0.38}, {0.62, 0.62}, {0.62,
0.88}, {0.75, 0.75}, {0.88, 0.62}, {0.88, 0.88}};

ListPlot[data]

f:id:keble14:20140818114153j:plain

次のような4つのクラスに分けてもらう,ということを目指します.

f:id:keble14:20140818120701j:plain

②データを加工していきます.ClusteringComponents関数で20コの座標を4つにクラス分けし,それぞれの座標に対するクラスのラベルを取得します.これによってlabelはlist変数としてクラスの番号1~4のどれかが入ります.

label = ClusteringComponents[data, 4, 1, Method -> "Optimize"]

>出力結果

label

{1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4}

 例えば出力結果ではlabelの第1要素から第5要素までが1になっているので,dataの第1座標から第5座標が"1"のクラスに分けられたことがわかります.

 最後に"1"~"4"のクラスごとにデータを分けて,改めて散布図を描けばクラスごとに色分けされます.べた書きです.

class1 = {};
class2 = {};
class3 = {};
class4 = {};


For[i = 1, i <= Length[data], i++,
Switch[label[ [i]],
1, AppendTo[class1, data[ [i]]],
2, AppendTo[class2, data[ [i]]],
3, AppendTo[class3, data[ [i]]],
4, AppendTo[class4, data[ [i]]];]
]

ListPlot[{class1, class2, class3, class4}]

(*data[ [i]]に半角スペースを入れているのは,はてなブログの自動変換機能を避けるためです.そうしないとこうなる,datai.Part関数を使ってもOK.)

f:id:keble14:20140818115922j:plain

無事に狙い通りのクラス分けをしてくれました.

 

 [補足1]

クラスタ数を入力できるように書き直しました.

c = 4;(*クラスタ数*)
label = ClusteringComponents[data, c, 1, Method -> "Optimize"]

(*空のクラスをクラスタ数だけ生成*)
class = Table[{}, {i, 1, c}];
(*データをクラスに分ける*)
For[i = 1, i <= c, i++,
pos = Flatten[Position[label, i]];
For[j = 1, j <= Length[pos], j++,
AppendTo[classi, datapos[ [j]]]
]
]

ListPlot[class]

[補足2]

label = ClusteringComponents[data, 4, 1, Method -> "KMeans"]

クラスタリングメソッドをKMeans法に変えてみるとこのような結果に.

f:id:keble14:20140819123846j:plain

青色と黄色のクラスが予想通りにはなっていません.

KMeans法は,始めに乱数を用いて各データをランダムにクラスに割り当てをします.そして逐次,クラスを改善していく手法であり,乱数によってはこちらが期待した結果にならない場合があることが原因のようです.

ClusteringComponents[data2, 4, 1, Method -> "KMeans",
"RandomSeed" -> 10]

 ランダムシードを色々変えてみるとうまくいきます.

f:id:keble14:20140818115922j:plain

 

ClusteringComponentsだけでクラスタリングに必要な作業がすべてできるので簡単です.

 

[追記1]

教師なしクラスタリングを一挙に行うFindClusters関数というのがありました.

class = FindClusters[data, 4]

 {{{0.12, 0.12}, {0.12, 0.38}, {0.25, 0.25}, {0.38, 0.12}, {0.38,
0.38}}, {{0.12, 0.62}, {0.12, 0.88}, {0.25, 0.75}, {0.38,
0.62}, {0.38, 0.88}}, {{0.62, 0.12}, {0.62, 0.38}, {0.75,
0.25}, {0.88, 0.12}, {0.88, 0.38}}, {{0.62, 0.62}, {0.62,
0.88}, {0.75, 0.75}, {0.88, 0.62}, {0.88, 0.88}}}

ListPlot[class]

f:id:keble14:20140821161720j:plain

・ClusteringComponents関数は与えられたデータをクラスに分けてそのラベルのリストを出力する

・FindClusters関数は与えられたデータをクラスごとにリストでまとめたものを出力する

Mathematica10 トライアル版インストール

計算ソフトMathematica10が2014年7月21日導入されました.新機能などはこちらから.30日間の無料評価版(free 30-day trial version)がインストールできます.以下の手順でインストールできます.

 

1.ダウンロードの準備

http://www.wolfram.com/mathematica/new-in-10/ ←こちらから

ダウンロードにはMathematicaを販売しているWolframのIDが必要です.

f:id:keble14:20140808152704j:plain

言語は英語と日本語の2種類がありLanguageから選択できます.英語を選べばヘルプなど当然すべてが英語になります.Mathematicaの使用にはヘルプにとてもお世話になるので日本語の方が良いです.

 

2.セットアップファイルをダウンロード

Wolfram IDの発行などが,うまくできればこのような画面がでます.

f:id:keble14:20140808154129j:plain

Windows version

Mac version

Linux version

の3つが選べます.僕はWindowsのものを選択.画面左側のアクティベートキーを後で使うのでブラウザ画面をこのまま残しておくと楽です(同じ内容が登録したメールアドレスに届くので消しても問題ないですが).

 

日本語のWindows版を選んだ場合は,「Mathematica_10.0.0_Japanese_WIN.zip」という圧縮されたzipファイルがダウンロードできますので,ダウンロード後は解凍が必要です.ファイルは3GBを超えているのでダウンロードに時間がかかると思います.

(メモ:zipファイルの容量が大きいのでLhaplusだと解凍に失敗するかもしれません.僕はできて友達はだめだったのでLhaplusのversionによるのかも.ダメだった場合は諦めずに別の解凍ソフトを使いましょう!例えばExplzhなら解凍できるようです).

 

英語のWindows版は「Mathematica_10.0.0_WIN.exe」がダウンロードできます.

 

3.インストール

セットアップファイルを実行します.カチカチと次へ次へ.

f:id:keble14:20140808221905j:plain

 

4.アクティベート

Mathematica10を初めて起動すると,アクティベートキーの入力を求められます.ダウンロード画面もしくはWolframに登録したメールアドレスにアクティベートキーがあるのでそれを入力すればOKです.

 

f:id:keble14:20140808222203j:plain

 

「新規ドキュメント」から新しいファイルが作れますよ!