Miyazawa’s Pukiwiki
MATLAB Note/統計
はすでに存在します。
開始行:
#access
#analog
-目次
#contents
**教師あり学習 [#zb868433]
-各手法の詳細やパラメータの変更に関しては、[[Statistics T...
***決定木 [#k532ac4f]
-Statistics Toolbox が提供している機能です。
-[[参考(関数):http://www.mathworks.com/access/helpdesk/he...
-ウィキペディア「[[決定木:http://ja.wikipedia.org/wiki/%E...
-まずは入力値データ(独立変数)と、結果データ(従属変数)...
#geshi(matlab){{
%独立変数(天気、気温、湿度、風の強さ)
meas = [
1 29 85 1
1 27 90 2
2 28 78 1
3 21 96 1
3 20 80 1
3 18 70 2
2 18 65 2
1 22 95 1
1 21 70 1
3 24 80 1
1 24 70 2
2 22 90 2
2 27 75 1
3 22 80 2
]
%従属変数(ゴルフをするか、しないか)
species = [
'×'
'×'
'○'
'○'
'○'
'×'
'○'
'×'
'○'
'○'
'○'
'○'
'○'
'×'
]
}}
-決定木の表示は、以下のようにします(上のコードに続けて実...
#geshi(matlab){{
t = classregtree(meas, species,'names',{'天気' '気温' '湿...
view(t);
}}
-結果は以下のようになります。~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/ket...
-上記の結果は入力値の数が足りないため、十分な結果とはいえ...
#geshi(matlab){{
meas2 = [meas ; meas]; %measの値を2度...
species2 = [species ; species]; %speciesの値を...
t2 = classregtree(meas2, species2,'names',{'天気' '気温' ...
view(t2);
}}
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/ket...
#geshi(matlab){{
meas3 = [meas ; meas ; meas]; %measの値を3度...
species3 = [species ; species ; species]; %speciesの値を...
t3 = classregtree(meas3, species3,'names',{'天気' '気温' ...
view(t3);
}}
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/ket...
#geshi(matlab){{
meas5 = [meas ; meas ; meas ; meas ; meas];
species5 = [species ; species ; species ; species ; speci...
t5 = classregtree(meas5, species5,'names',{'天気' '気温' ...
view(t5);
}}
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/ket...
-入力値を3回以上繰り返し与えると、決定木が収束しました。
-「湿度が高い晴れの日」と「風が強い雨の日」はゴルフをしな...
-決定木の評価は 関数 TEST EVAL ISBRANCH CUTPOINT CUTVAR C...
***サポートベクターマシン - Support Vector Machine Toolbo...
-ここでは、[[SVM - Support Vector Machines Software:http:...
--これが比較的多機能で、理解しやすいためです。
-&color(red){【注意】};
--いまのところ、32ビット Windows環境でしか動きません。[[q...
-導入
--リンク先のZIPファイルをダウンロードして、解凍してできた...
--フォルダのパスを指定します。「svm」フォルダの一階層上の...
%フォルダの実行パスをMATLABサーチパスに加える
addpath 'svm';
---「svm」フォルダを右クリック → パスに追加 → 選択フォル...
---README には MATLAB のサーチパスに加えるように、とあり...
-実行
--以下は全て、「svm」フォルダの一階層上のフォルダで実行し...
--学習データと教師データを指定
---ここでは、とりあえず、[[SVM TOOLBOX v0.55:http://theov...
% 学習データを指定
data = load('iris_inputdata.txt'); %データセットを読...
x = data(:, 1:2) %学習データ(入力...
y = data(:, 3) %正解データ(ター...
% データを表示
disp([x y])
---左から2列が入力ベクトル、3列目がターゲットベクトル(...
--カーネルを指定
---カーネルはSVMの分類学習のルールのようなものです。このT...
help svkernel
で確認できます。なお、存在しない名前を指定した場合、「lin...
---ここでは、スプラインカーネルを指定しておきます。
kernel = 'spline';
--境界を推定
---続いて、境界の推定学習を行ないます。
[nsv, alpha, b0] = svc(x, y, kernel) % x : 入力ベ...
% 詳細は >> ...
[h] = svcplot(x, y, kernel, alpha, b0) %結果をプロット
---以下のようにプロットされます。~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/svm...
---赤丸と青丸がターゲットベクトルの種類、縦軸と横軸が入力...
---SVM TOOLBOX v0.55 の結果とは少し境界が異なりますが、う...
--とりあえず、以下のカーネルが動きました(他は謎のエラー...
--- erfb カーネルと anova カーネル~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/svm...
--- liner カーネル~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/svm...
---どちらも、おそらく飛び地になっている赤が原因で、うまく...
-評価
--新しい入力を SVM の境界と照らし合わせて、どちらのターゲ...
--ここでは、簡単な学習データと教師データを与えて境界を推...
%フォルダの実行パスをMATLABサーチパスに加える
addpath 'svm';
% 学習データを指定
x = [1 1 ; 2 2 ; 3 3 ; 4 4];
% 教師データを指定
y = [1 ; 1 ;-1 ;-1 ];
disp([x y]);
% カーネルを指定
kernel = 'spline';
% 境界を推定
[nsv, alpha, b0] = svc(x, y, kernel);
% 結果をプロット
[h] = svcplot(x, y, kernel, alpha, b0);
% テストデータを与えて評価
tstX = [1 0 ; 4 3];
tstOUTPUT = svcoutput(x, y, tstX, kernel, alpha, b0);
disp([tstX tstOUTPUT]);
---結果は以下のようになります。~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/svm...
---左上の数字が学習データと教師データ、左下の数字がテスト...
---[1 0] がターゲット 1 (青丸)、[4 3] がターゲット -1 ...
-&color(red){注意事項};
--README によれば、上記のプログラムは MATLAB で書かれてい...
---MATLAB のソースは勉強用で、実際のクラスタリングを行な...
---C 版については、こちらでは動かしていないので、よく分か...
--入力ベクトルが3次元以上になっても、(svcplot は使えな...
--これがソフトマージン法(多少のエラーを許容して境界を引...
***サポートベクターマシン - MATLAB SVM TOOLBOX v0.55 [#h4...
-[[SVM TOOLBOX v0.55:http://theoval.sys.uea.ac.uk/~gcc/sv...
--【注】&color(red){これはデモプログラムがあり、機能が分...
-導入
--解凍してできた「svm_v0.55」フォルダを、MATLAB作業フォル...
--このパッケージはC++プログラムも使用しているので、C++の...
---Windowsなら、[[Borland C++Compiler:http://www.codegear...
--インストールしたC++のコンパイラをMATLABで使えるようにし...
mex -setup
---メッセージが表示されますので、[Y]>[(C++Compilerの番号)...
-実行
--デモプログラムを実行してみます。「svm_v0.55」フォルダ直...
addpath 'svm_v0.55'; %フォルダの実行パスをMATLABサーチ...
compilemex; %@smosvctutorフォルダ内のC++(cpp...
demo %demo.mを実行
--結果は以下のようになります。デモの結果をそのまま転載し...
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/svm...
--demo.m の中身を編集して、SVM TOOLBOXのアルゴリズムを勉...
**教師なし学習 [#i40dcfc8]
-教師なし学習の詳細は、'''[[勉強会資料 - 教師なし学習(限...
***主成分分析 [#le1ef0a9]
-同等の機能を持った複数の関数が提供されているようです。
--[[pcacov:http://infoshako.sk.tsukuba.ac.jp/ShakoDoc/MAT...
--[[princomp:http://infoshako.sk.tsukuba.ac.jp/ShakoDoc/M...
--[[prepca:http://dl.cybernet.co.jp/matlab/support/manual...
---prepcaは古い関数です。最新版では、同様の機能を持った[[...
---エラーが出たとき、[[ここ:http://www.mathworks.com/supp...
-processpca による方法
--ここでは、Neural Network Toolboxが提供している主成分分...
#geshi(matlab){{
%データをロード
load choles_all
% データ choles_all の内訳
% p : 264人の患者の血液サンプルのスペクトルの測定結果(...
% t : 血漿分離に基づくhdl, ldl, vldlコレステロールレベ...
size(p) %変換前のデータサイズをチェック(21次元...
%主成分分析を実行
pn = prestd(p); %平均が0で標準偏差が1に...
ptrans = processpca(pn, 0.001); %データセット内の99.9%...
size(ptrans) %変換されたデータサイズをチェック(4次...
}}
--ベクトル p が 21 次元から 4 次元に縮んでいます。主成分...
--ここで使用した[[prestd:http://dl.cybernet.co.jp/matlab/...
---prestdをそのままmapstdに置き換えるとエラーが出るため、...
-princomp による方法
--Statistics toolbox による主成分分析([[参考:http://winn...
#geshi(matlab){{
function [ tokuten ] = PCA( inputdata, newinputdata )
%主成分分析の前に,平均が0,分散が1になるように正規化
N = size(inputdata, 1);
m = mean(inputdata);
s = std(inputdata);
inputdata2 = (inputdata - repmat(m, N, 1)) ./ repmat(s, N...
%主成分分析
[w, Z, s2, t2] = princomp(inputdata2)
%第2主成分までを表示する
Z(:, 1 : 2)
%寄与率を第2主成分まで表示する
ruiseki = s2 / sum(s2);
ruiseki(1 : 2)
tokuten = [];
%追加データの主成分得点を出力するとき
if nargin == 2
tokuten = newinputdata * w;
end
}}
-参考
--[[主成分分析:http://gucchi24.hp.infoseek.co.jp/SHUSEI.h...
---[[EXCELによる主成分分析例題:http://gucchi24.hp.infosee...
--[[主成分得点散布図:http://www.skr.mlit.go.jp/yongi/r_ka...
--[[多変量データ解析ツールボックス:http://www-pse.cheme.k...
--[[スペアリブの香辛料添加の違いによる感性評価実験:http:/...
--[[徹底討論「主成分分析 versus 因子分析」:http://koko15....
--[[Rで主成分分析:http://ryu920072.ti-da.net/]]
***階層型クラスタリング [#b4d744f2]
-Statistics Toolbox が提供している機能です。
-[[参考(関数):http://www.mathworks.com/access/helpdesk/he...
-パラメータの詳細は 関数 PDIST LINKAGE DENDROGRAM MANOVAC...
-例えば、次のような動物の特徴データを階層構造で分類したい...
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/ani...
-まずは入力値と、入力値のラベル(それぞれのデータ名)を宣...
#geshi(matlab){{
X = [
1 0 0 1 0 0 0 0 1 0 0 1 0
1 0 0 1 0 0 0 0 1 0 0 0 0
1 0 0 1 0 0 0 0 1 0 0 1 1
1 0 0 1 0 0 0 0 1 0 0 1 1
1 0 0 1 0 0 0 0 1 1 0 1 0
1 0 0 1 0 0 0 0 1 1 0 1 0
0 1 0 1 0 0 0 0 1 1 0 0 0
0 1 0 0 1 1 0 0 0 0 1 0 0
0 1 0 0 1 1 0 0 0 0 1 0 0
0 1 0 0 1 1 0 1 0 1 1 0 0
1 0 0 0 1 1 0 0 0 1 0 0 0
0 0 1 0 1 1 0 0 0 1 1 0 0
0 0 1 0 1 1 0 1 0 1 1 0 0
0 0 1 0 1 1 1 1 0 0 1 0 0
0 0 1 0 1 1 1 1 0 0 1 0 0
0 0 1 0 1 1 1 0 0 0 0 0 0
]
Xlabel = strvcat('ハト','メンドリ','アヒル','ガチョウ','...
'タカ','ワシ','キツネ','イヌ','オオカミ','ネコ','トラ...
'ウマ','シマウマ','ウシ') %STRVCAT ...
}}
-階層型クラスタリングは、以下のようにします(上のコードに...
#geshi(matlab){{
Y= pdist(X,'cityblock'); %PDIST 観測間の距離
Z= linkage(Y,'average'); %LINKAGE 重みのない平均距離...
[H,T] = dendrogram(Z,'colorthreshold','default','LABELS'...
}}
-結果は以下のようになります。~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/den...
-クラスタリングの結果は、変数Zに格納されています。
Z %変数Zの中身を表示
Z =
14.0000 15.0000 0
8.0000 9.0000 0
5.0000 6.0000 0
3.0000 4.0000 0
12.0000 13.0000 1.0000
1.0000 2.0000 1.0000
20.0000 22.0000 1.5000
19.0000 23.0000 1.7500
16.0000 17.0000 2.0000
10.0000 18.0000 2.0000
21.0000 25.0000 2.8333
26.0000 27.0000 3.8000
7.0000 24.0000 3.8333
11.0000 28.0000 4.3750
29.0000 30.0000 8.7619
-データの意味は以下の通りです。
--Z の 1 行目 = 「データ番号14(ウマ) と 15(シマウマ)...
---データ番号 14+15 の親ノードの番号を、16 + 1 の 17 番...
--Z の 2 行目 = 「データ番号8(キツネ) と 9(イヌ)の距...
---データ番号 8+9 の親ノードの番号を、16 + 2 の 18 番と...
--Z の 9 行目 = 「データ番号16(ウシ) と 17(ウマ+シマ...
-Z の 1 列目 = リーフの左側、 2 列目 = リーフの右側ですか...
--MATLAB の関数で、すでにこれを実現しているものがあるかも...
-「>>help linkage」で詳細な解説を読めます。
***k-means法 [#p24f410b]
-Statistics Toolbox が提供している機能です。
-K-平均法、c-平均法とも呼ばれます。 → ウィキペディア「[[K...
-[[参考:http://www.mathworks.com/access/helpdesk/help/too...
-教師なし、非階層的なクラスタリングアルゴリズムの一種です...
-「>>help kmeans」を実行すると、日本語のヘルプを確認でき...
-例えば、以下のような分布をとる入力値を4クラスタに分類し...
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/kme...
-上図の入力値は以下のようにして作成しました(平均の異なる...
#geshi(matlab){{
%正規分布の平均値(分布の中心、最も出やすい値)を決める
X1nd = [zeros(500,1)+2 zeros(500,1)+2]; %正規分布1の平...
X2nd = [zeros(500,1)+4 zeros(500,1)+0]; %正規分布2の平...
X3nd = [zeros(500,1)-2 zeros(500,1)+2]; %正規分布3の平...
X4nd = [zeros(500,1)+2 zeros(500,1)+4]; %正規分布4の平...
%データ行列Xを生成(1行1入力、2000行2列のデータ)
X = [randn(500,2) + X1nd ;... %500行2列の正...
randn(500,2) + X2nd ;...
randn(500,2) + X3nd ;...
randn(500,2) + X4nd ];
%プロット
plot(X(:,1),X(:,2),'.k');
}}
-k-means法によるクラスタリングは、以下のようにします(上...
#geshi(matlab){{
clusterNum = 4; %クラスタの総...
%クラスタリングを実行する
[cidx, ctrs] = kmeans(X, clusterNum); %k-means法で入...
%cidx : 分類後の各入力値のクラスタ番号(2000行1列)
%ctrs : クラスタの中心の座標(4行2列)
%結果をプロット
hold on;
plot(X(cidx==1,1),X(cidx==1,2),'.',... %(cidx=1の各行...
X(cidx==2,1),X(cidx==2,2),'.',...
X(cidx==3,1),X(cidx==3,2),'.',...
X(cidx==4,1),X(cidx==4,2),'.');
%上のグラフにクラスタ中心点を追記(ダイヤ、黒枠、緑で塗...
plot(ctrs(:,1),ctrs(:,2),'d','MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',8);
hold off;
}}
-結果は以下のようになります。各クラスタの中心点(緑のダイ...
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/kme...
-クラスタの数を5にするには、以下のようにします。
#geshi(matlab){{
clusterNum = 5;
[cidx, ctrs] = kmeans(X, clusterNum);
hold on;
plot(X(cidx==1,1),X(cidx==1,2),'.',...
X(cidx==2,1),X(cidx==2,2),'.',...
X(cidx==3,1),X(cidx==3,2),'.',...
X(cidx==4,1),X(cidx==4,2),'.',...
X(cidx==5,1),X(cidx==5,2),'.');
plot(ctrs(:,1),ctrs(:,2),'d','MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',8);
hold off;
}}
-結果は以下のようになります。~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/kme...
-関数kmeansの引数を指定して、クラスタリングのパラメータを...
-【注意】 kmeans法の結果は、実行するたびに変わります。
-適正なクラスタ数を情報量基準に基づいて自動的に推定する '...
***自己組織化マップ [#mf2bb83c]
-&pgid(,MATLAB Note/Neural Network Toolbox/SOM(自己組織...
***ガウス混合分布モデル [#d3ca1328]
-'''[[準備中:http://shower.human.waseda.ac.jp/~m-kouki/pu...
--[[MATLAB Statistics toolbox ガウス混合モデル:http://www...
--[[R Note/統計/確率分布/ベータ混合分布モデル/どのような...
**線形モデル [#t9cd1d58]
***確率分布 [#t42a8712]
-[[MATLAB Note/統計/確率分布:http://shower.human.waseda.a...
***正規分布の検定 [#s5cc1d5a]
-[[MATLAB Note/統計/確率分布/分布形状の検定:http://shower...
***回帰分析 [#w2fe7cf9]
-目的変数(従属変数)と説明変数(独立変数)の間の関係を表...
--説明変数が1つ(回帰分析)
---目的変数をy、説明変数をxとしたとき、誤差が最小になるよ...
--- a(傾き)を、[[回帰係数:http://sayatori.sakura.ne.jp/...
--説明変数が複数(重回帰分析)
-サンプルデータとして、[[統計解析ソフト R:http://shower.h...
--[[cars_R.csv:http://shower.human.waseda.ac.jp/~m-kouki/...
--データプロット
#geshi(matlab){{
data = csvread( 'cars_R.csv' );
plot( data(:,1), data(:,2), '*' );
title('cars'); xlabel('車の速度'); ylabel('ブレーキをかけ...
}}
#ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/reg...
-「ブレーキをかけた後停止するまでの距離」を目的変数、「車...
#geshi(matlab){{
y = data(:,2);
one = ones( length(data), 1 );
x = [one data(:,1)];
coefficient = regress(y, x)
}}
--説明変数のベクトルには、単位行列を追加して 2×(データ数)...
--結果
coefficient =
-17.5791
3.9324
--この結果から求まった回帰式(回帰モデル)は以下の通り。
#mimetex( dist = -17.58 + 3.93 \times speed )
-回帰直線を引いてみます。
#geshi(matlab){{
hold on;
xdata = 0 : 0.01 : 25;
ydata = coefficient(1) + coefficient(2) * xdata;
plot(xdata, ydata);
hold off;
}}
#ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/reg...
***一般化線形モデル [#l5c34ed8]
-Statistics Toolbox では、glmdemo, glmfit, glmval 関数が...
--[[Statistics Toolbox - Fitting Data with Generalized Li...
-[[glmlab - Generalized Linear Models in MATLAB:http://ww...
**その他の統計モデル [#w340b3cd]
***隠れマルコフモデル [#n45751b2]
-Statistics Toolbox が提供している機能です。
※[[公式:http://www.mathworks.com/products/statistics/func...
-hmmdecode -系列の後方の状態確率を計算
-hmmestimate -HMM に与えられた状態情報に対するパラメータ...
-hmmgenerate -隠れマルコフモデルに対する系列の生成
-hmmtrain -HMM に対するモデルパラメータの最尤推定量
-hmmviterbi -系列に対して最も起こりうる状態パスを計算
***ベイジアンネットワーク [#j0761a64]
-[[準備中:http://shower.human.waseda.ac.jp/~m-kouki/pukiw...
終了行:
#access
#analog
-目次
#contents
**教師あり学習 [#zb868433]
-各手法の詳細やパラメータの変更に関しては、[[Statistics T...
***決定木 [#k532ac4f]
-Statistics Toolbox が提供している機能です。
-[[参考(関数):http://www.mathworks.com/access/helpdesk/he...
-ウィキペディア「[[決定木:http://ja.wikipedia.org/wiki/%E...
-まずは入力値データ(独立変数)と、結果データ(従属変数)...
#geshi(matlab){{
%独立変数(天気、気温、湿度、風の強さ)
meas = [
1 29 85 1
1 27 90 2
2 28 78 1
3 21 96 1
3 20 80 1
3 18 70 2
2 18 65 2
1 22 95 1
1 21 70 1
3 24 80 1
1 24 70 2
2 22 90 2
2 27 75 1
3 22 80 2
]
%従属変数(ゴルフをするか、しないか)
species = [
'×'
'×'
'○'
'○'
'○'
'×'
'○'
'×'
'○'
'○'
'○'
'○'
'○'
'×'
]
}}
-決定木の表示は、以下のようにします(上のコードに続けて実...
#geshi(matlab){{
t = classregtree(meas, species,'names',{'天気' '気温' '湿...
view(t);
}}
-結果は以下のようになります。~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/ket...
-上記の結果は入力値の数が足りないため、十分な結果とはいえ...
#geshi(matlab){{
meas2 = [meas ; meas]; %measの値を2度...
species2 = [species ; species]; %speciesの値を...
t2 = classregtree(meas2, species2,'names',{'天気' '気温' ...
view(t2);
}}
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/ket...
#geshi(matlab){{
meas3 = [meas ; meas ; meas]; %measの値を3度...
species3 = [species ; species ; species]; %speciesの値を...
t3 = classregtree(meas3, species3,'names',{'天気' '気温' ...
view(t3);
}}
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/ket...
#geshi(matlab){{
meas5 = [meas ; meas ; meas ; meas ; meas];
species5 = [species ; species ; species ; species ; speci...
t5 = classregtree(meas5, species5,'names',{'天気' '気温' ...
view(t5);
}}
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/ket...
-入力値を3回以上繰り返し与えると、決定木が収束しました。
-「湿度が高い晴れの日」と「風が強い雨の日」はゴルフをしな...
-決定木の評価は 関数 TEST EVAL ISBRANCH CUTPOINT CUTVAR C...
***サポートベクターマシン - Support Vector Machine Toolbo...
-ここでは、[[SVM - Support Vector Machines Software:http:...
--これが比較的多機能で、理解しやすいためです。
-&color(red){【注意】};
--いまのところ、32ビット Windows環境でしか動きません。[[q...
-導入
--リンク先のZIPファイルをダウンロードして、解凍してできた...
--フォルダのパスを指定します。「svm」フォルダの一階層上の...
%フォルダの実行パスをMATLABサーチパスに加える
addpath 'svm';
---「svm」フォルダを右クリック → パスに追加 → 選択フォル...
---README には MATLAB のサーチパスに加えるように、とあり...
-実行
--以下は全て、「svm」フォルダの一階層上のフォルダで実行し...
--学習データと教師データを指定
---ここでは、とりあえず、[[SVM TOOLBOX v0.55:http://theov...
% 学習データを指定
data = load('iris_inputdata.txt'); %データセットを読...
x = data(:, 1:2) %学習データ(入力...
y = data(:, 3) %正解データ(ター...
% データを表示
disp([x y])
---左から2列が入力ベクトル、3列目がターゲットベクトル(...
--カーネルを指定
---カーネルはSVMの分類学習のルールのようなものです。このT...
help svkernel
で確認できます。なお、存在しない名前を指定した場合、「lin...
---ここでは、スプラインカーネルを指定しておきます。
kernel = 'spline';
--境界を推定
---続いて、境界の推定学習を行ないます。
[nsv, alpha, b0] = svc(x, y, kernel) % x : 入力ベ...
% 詳細は >> ...
[h] = svcplot(x, y, kernel, alpha, b0) %結果をプロット
---以下のようにプロットされます。~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/svm...
---赤丸と青丸がターゲットベクトルの種類、縦軸と横軸が入力...
---SVM TOOLBOX v0.55 の結果とは少し境界が異なりますが、う...
--とりあえず、以下のカーネルが動きました(他は謎のエラー...
--- erfb カーネルと anova カーネル~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/svm...
--- liner カーネル~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/svm...
---どちらも、おそらく飛び地になっている赤が原因で、うまく...
-評価
--新しい入力を SVM の境界と照らし合わせて、どちらのターゲ...
--ここでは、簡単な学習データと教師データを与えて境界を推...
%フォルダの実行パスをMATLABサーチパスに加える
addpath 'svm';
% 学習データを指定
x = [1 1 ; 2 2 ; 3 3 ; 4 4];
% 教師データを指定
y = [1 ; 1 ;-1 ;-1 ];
disp([x y]);
% カーネルを指定
kernel = 'spline';
% 境界を推定
[nsv, alpha, b0] = svc(x, y, kernel);
% 結果をプロット
[h] = svcplot(x, y, kernel, alpha, b0);
% テストデータを与えて評価
tstX = [1 0 ; 4 3];
tstOUTPUT = svcoutput(x, y, tstX, kernel, alpha, b0);
disp([tstX tstOUTPUT]);
---結果は以下のようになります。~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/svm...
---左上の数字が学習データと教師データ、左下の数字がテスト...
---[1 0] がターゲット 1 (青丸)、[4 3] がターゲット -1 ...
-&color(red){注意事項};
--README によれば、上記のプログラムは MATLAB で書かれてい...
---MATLAB のソースは勉強用で、実際のクラスタリングを行な...
---C 版については、こちらでは動かしていないので、よく分か...
--入力ベクトルが3次元以上になっても、(svcplot は使えな...
--これがソフトマージン法(多少のエラーを許容して境界を引...
***サポートベクターマシン - MATLAB SVM TOOLBOX v0.55 [#h4...
-[[SVM TOOLBOX v0.55:http://theoval.sys.uea.ac.uk/~gcc/sv...
--【注】&color(red){これはデモプログラムがあり、機能が分...
-導入
--解凍してできた「svm_v0.55」フォルダを、MATLAB作業フォル...
--このパッケージはC++プログラムも使用しているので、C++の...
---Windowsなら、[[Borland C++Compiler:http://www.codegear...
--インストールしたC++のコンパイラをMATLABで使えるようにし...
mex -setup
---メッセージが表示されますので、[Y]>[(C++Compilerの番号)...
-実行
--デモプログラムを実行してみます。「svm_v0.55」フォルダ直...
addpath 'svm_v0.55'; %フォルダの実行パスをMATLABサーチ...
compilemex; %@smosvctutorフォルダ内のC++(cpp...
demo %demo.mを実行
--結果は以下のようになります。デモの結果をそのまま転載し...
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/svm...
--demo.m の中身を編集して、SVM TOOLBOXのアルゴリズムを勉...
**教師なし学習 [#i40dcfc8]
-教師なし学習の詳細は、'''[[勉強会資料 - 教師なし学習(限...
***主成分分析 [#le1ef0a9]
-同等の機能を持った複数の関数が提供されているようです。
--[[pcacov:http://infoshako.sk.tsukuba.ac.jp/ShakoDoc/MAT...
--[[princomp:http://infoshako.sk.tsukuba.ac.jp/ShakoDoc/M...
--[[prepca:http://dl.cybernet.co.jp/matlab/support/manual...
---prepcaは古い関数です。最新版では、同様の機能を持った[[...
---エラーが出たとき、[[ここ:http://www.mathworks.com/supp...
-processpca による方法
--ここでは、Neural Network Toolboxが提供している主成分分...
#geshi(matlab){{
%データをロード
load choles_all
% データ choles_all の内訳
% p : 264人の患者の血液サンプルのスペクトルの測定結果(...
% t : 血漿分離に基づくhdl, ldl, vldlコレステロールレベ...
size(p) %変換前のデータサイズをチェック(21次元...
%主成分分析を実行
pn = prestd(p); %平均が0で標準偏差が1に...
ptrans = processpca(pn, 0.001); %データセット内の99.9%...
size(ptrans) %変換されたデータサイズをチェック(4次...
}}
--ベクトル p が 21 次元から 4 次元に縮んでいます。主成分...
--ここで使用した[[prestd:http://dl.cybernet.co.jp/matlab/...
---prestdをそのままmapstdに置き換えるとエラーが出るため、...
-princomp による方法
--Statistics toolbox による主成分分析([[参考:http://winn...
#geshi(matlab){{
function [ tokuten ] = PCA( inputdata, newinputdata )
%主成分分析の前に,平均が0,分散が1になるように正規化
N = size(inputdata, 1);
m = mean(inputdata);
s = std(inputdata);
inputdata2 = (inputdata - repmat(m, N, 1)) ./ repmat(s, N...
%主成分分析
[w, Z, s2, t2] = princomp(inputdata2)
%第2主成分までを表示する
Z(:, 1 : 2)
%寄与率を第2主成分まで表示する
ruiseki = s2 / sum(s2);
ruiseki(1 : 2)
tokuten = [];
%追加データの主成分得点を出力するとき
if nargin == 2
tokuten = newinputdata * w;
end
}}
-参考
--[[主成分分析:http://gucchi24.hp.infoseek.co.jp/SHUSEI.h...
---[[EXCELによる主成分分析例題:http://gucchi24.hp.infosee...
--[[主成分得点散布図:http://www.skr.mlit.go.jp/yongi/r_ka...
--[[多変量データ解析ツールボックス:http://www-pse.cheme.k...
--[[スペアリブの香辛料添加の違いによる感性評価実験:http:/...
--[[徹底討論「主成分分析 versus 因子分析」:http://koko15....
--[[Rで主成分分析:http://ryu920072.ti-da.net/]]
***階層型クラスタリング [#b4d744f2]
-Statistics Toolbox が提供している機能です。
-[[参考(関数):http://www.mathworks.com/access/helpdesk/he...
-パラメータの詳細は 関数 PDIST LINKAGE DENDROGRAM MANOVAC...
-例えば、次のような動物の特徴データを階層構造で分類したい...
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/ani...
-まずは入力値と、入力値のラベル(それぞれのデータ名)を宣...
#geshi(matlab){{
X = [
1 0 0 1 0 0 0 0 1 0 0 1 0
1 0 0 1 0 0 0 0 1 0 0 0 0
1 0 0 1 0 0 0 0 1 0 0 1 1
1 0 0 1 0 0 0 0 1 0 0 1 1
1 0 0 1 0 0 0 0 1 1 0 1 0
1 0 0 1 0 0 0 0 1 1 0 1 0
0 1 0 1 0 0 0 0 1 1 0 0 0
0 1 0 0 1 1 0 0 0 0 1 0 0
0 1 0 0 1 1 0 0 0 0 1 0 0
0 1 0 0 1 1 0 1 0 1 1 0 0
1 0 0 0 1 1 0 0 0 1 0 0 0
0 0 1 0 1 1 0 0 0 1 1 0 0
0 0 1 0 1 1 0 1 0 1 1 0 0
0 0 1 0 1 1 1 1 0 0 1 0 0
0 0 1 0 1 1 1 1 0 0 1 0 0
0 0 1 0 1 1 1 0 0 0 0 0 0
]
Xlabel = strvcat('ハト','メンドリ','アヒル','ガチョウ','...
'タカ','ワシ','キツネ','イヌ','オオカミ','ネコ','トラ...
'ウマ','シマウマ','ウシ') %STRVCAT ...
}}
-階層型クラスタリングは、以下のようにします(上のコードに...
#geshi(matlab){{
Y= pdist(X,'cityblock'); %PDIST 観測間の距離
Z= linkage(Y,'average'); %LINKAGE 重みのない平均距離...
[H,T] = dendrogram(Z,'colorthreshold','default','LABELS'...
}}
-結果は以下のようになります。~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/den...
-クラスタリングの結果は、変数Zに格納されています。
Z %変数Zの中身を表示
Z =
14.0000 15.0000 0
8.0000 9.0000 0
5.0000 6.0000 0
3.0000 4.0000 0
12.0000 13.0000 1.0000
1.0000 2.0000 1.0000
20.0000 22.0000 1.5000
19.0000 23.0000 1.7500
16.0000 17.0000 2.0000
10.0000 18.0000 2.0000
21.0000 25.0000 2.8333
26.0000 27.0000 3.8000
7.0000 24.0000 3.8333
11.0000 28.0000 4.3750
29.0000 30.0000 8.7619
-データの意味は以下の通りです。
--Z の 1 行目 = 「データ番号14(ウマ) と 15(シマウマ)...
---データ番号 14+15 の親ノードの番号を、16 + 1 の 17 番...
--Z の 2 行目 = 「データ番号8(キツネ) と 9(イヌ)の距...
---データ番号 8+9 の親ノードの番号を、16 + 2 の 18 番と...
--Z の 9 行目 = 「データ番号16(ウシ) と 17(ウマ+シマ...
-Z の 1 列目 = リーフの左側、 2 列目 = リーフの右側ですか...
--MATLAB の関数で、すでにこれを実現しているものがあるかも...
-「>>help linkage」で詳細な解説を読めます。
***k-means法 [#p24f410b]
-Statistics Toolbox が提供している機能です。
-K-平均法、c-平均法とも呼ばれます。 → ウィキペディア「[[K...
-[[参考:http://www.mathworks.com/access/helpdesk/help/too...
-教師なし、非階層的なクラスタリングアルゴリズムの一種です...
-「>>help kmeans」を実行すると、日本語のヘルプを確認でき...
-例えば、以下のような分布をとる入力値を4クラスタに分類し...
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/kme...
-上図の入力値は以下のようにして作成しました(平均の異なる...
#geshi(matlab){{
%正規分布の平均値(分布の中心、最も出やすい値)を決める
X1nd = [zeros(500,1)+2 zeros(500,1)+2]; %正規分布1の平...
X2nd = [zeros(500,1)+4 zeros(500,1)+0]; %正規分布2の平...
X3nd = [zeros(500,1)-2 zeros(500,1)+2]; %正規分布3の平...
X4nd = [zeros(500,1)+2 zeros(500,1)+4]; %正規分布4の平...
%データ行列Xを生成(1行1入力、2000行2列のデータ)
X = [randn(500,2) + X1nd ;... %500行2列の正...
randn(500,2) + X2nd ;...
randn(500,2) + X3nd ;...
randn(500,2) + X4nd ];
%プロット
plot(X(:,1),X(:,2),'.k');
}}
-k-means法によるクラスタリングは、以下のようにします(上...
#geshi(matlab){{
clusterNum = 4; %クラスタの総...
%クラスタリングを実行する
[cidx, ctrs] = kmeans(X, clusterNum); %k-means法で入...
%cidx : 分類後の各入力値のクラスタ番号(2000行1列)
%ctrs : クラスタの中心の座標(4行2列)
%結果をプロット
hold on;
plot(X(cidx==1,1),X(cidx==1,2),'.',... %(cidx=1の各行...
X(cidx==2,1),X(cidx==2,2),'.',...
X(cidx==3,1),X(cidx==3,2),'.',...
X(cidx==4,1),X(cidx==4,2),'.');
%上のグラフにクラスタ中心点を追記(ダイヤ、黒枠、緑で塗...
plot(ctrs(:,1),ctrs(:,2),'d','MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',8);
hold off;
}}
-結果は以下のようになります。各クラスタの中心点(緑のダイ...
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/kme...
-クラスタの数を5にするには、以下のようにします。
#geshi(matlab){{
clusterNum = 5;
[cidx, ctrs] = kmeans(X, clusterNum);
hold on;
plot(X(cidx==1,1),X(cidx==1,2),'.',...
X(cidx==2,1),X(cidx==2,2),'.',...
X(cidx==3,1),X(cidx==3,2),'.',...
X(cidx==4,1),X(cidx==4,2),'.',...
X(cidx==5,1),X(cidx==5,2),'.');
plot(ctrs(:,1),ctrs(:,2),'d','MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',8);
hold off;
}}
-結果は以下のようになります。~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/kme...
-関数kmeansの引数を指定して、クラスタリングのパラメータを...
-【注意】 kmeans法の結果は、実行するたびに変わります。
-適正なクラスタ数を情報量基準に基づいて自動的に推定する '...
***自己組織化マップ [#mf2bb83c]
-&pgid(,MATLAB Note/Neural Network Toolbox/SOM(自己組織...
***ガウス混合分布モデル [#d3ca1328]
-'''[[準備中:http://shower.human.waseda.ac.jp/~m-kouki/pu...
--[[MATLAB Statistics toolbox ガウス混合モデル:http://www...
--[[R Note/統計/確率分布/ベータ混合分布モデル/どのような...
**線形モデル [#t9cd1d58]
***確率分布 [#t42a8712]
-[[MATLAB Note/統計/確率分布:http://shower.human.waseda.a...
***正規分布の検定 [#s5cc1d5a]
-[[MATLAB Note/統計/確率分布/分布形状の検定:http://shower...
***回帰分析 [#w2fe7cf9]
-目的変数(従属変数)と説明変数(独立変数)の間の関係を表...
--説明変数が1つ(回帰分析)
---目的変数をy、説明変数をxとしたとき、誤差が最小になるよ...
--- a(傾き)を、[[回帰係数:http://sayatori.sakura.ne.jp/...
--説明変数が複数(重回帰分析)
-サンプルデータとして、[[統計解析ソフト R:http://shower.h...
--[[cars_R.csv:http://shower.human.waseda.ac.jp/~m-kouki/...
--データプロット
#geshi(matlab){{
data = csvread( 'cars_R.csv' );
plot( data(:,1), data(:,2), '*' );
title('cars'); xlabel('車の速度'); ylabel('ブレーキをかけ...
}}
#ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/reg...
-「ブレーキをかけた後停止するまでの距離」を目的変数、「車...
#geshi(matlab){{
y = data(:,2);
one = ones( length(data), 1 );
x = [one data(:,1)];
coefficient = regress(y, x)
}}
--説明変数のベクトルには、単位行列を追加して 2×(データ数)...
--結果
coefficient =
-17.5791
3.9324
--この結果から求まった回帰式(回帰モデル)は以下の通り。
#mimetex( dist = -17.58 + 3.93 \times speed )
-回帰直線を引いてみます。
#geshi(matlab){{
hold on;
xdata = 0 : 0.01 : 25;
ydata = coefficient(1) + coefficient(2) * xdata;
plot(xdata, ydata);
hold off;
}}
#ref(http://shower.human.waseda.ac.jp/~m-kouki/matlab/reg...
***一般化線形モデル [#l5c34ed8]
-Statistics Toolbox では、glmdemo, glmfit, glmval 関数が...
--[[Statistics Toolbox - Fitting Data with Generalized Li...
-[[glmlab - Generalized Linear Models in MATLAB:http://ww...
**その他の統計モデル [#w340b3cd]
***隠れマルコフモデル [#n45751b2]
-Statistics Toolbox が提供している機能です。
※[[公式:http://www.mathworks.com/products/statistics/func...
-hmmdecode -系列の後方の状態確率を計算
-hmmestimate -HMM に与えられた状態情報に対するパラメータ...
-hmmgenerate -隠れマルコフモデルに対する系列の生成
-hmmtrain -HMM に対するモデルパラメータの最尤推定量
-hmmviterbi -系列に対して最も起こりうる状態パスを計算
***ベイジアンネットワーク [#j0761a64]
-[[準備中:http://shower.human.waseda.ac.jp/~m-kouki/pukiw...
ページ名:
既存のページ名で編集する