svm-and

AND演算(AND operation)でSVM(Support Vector Machine)で解いてみる

サンプルコード:

echo on
% AND演算でSVM(サポートベクターマシン)で解いてみる
X=[0 0; 0 1; 1 0; 1 1; ];
G=[0; 0; 0; 1;];
% クロスバリデーションインデックスの生成
[train, test] = crossvalind('holdOut',G);
cp = classperf(G);
% サポートベクトルマシーンクラスタリングの学習
svmStruct = svmtrain(X(train,:),G(train),'Kernel_Function','polynomial', 'showplot',true,'Method','LS');
%svmStruct = svmtrain(X(train,:), G(train), 'showplot', true, 'Kernel_Function', 'polynomial', 'Polyorder', 3);
%r=svmtrain(train_set,%train_response,'Kernel_Function','rbf','showplot','true');
%svmStruct = svmtrain(X(train,:), G(train), 'showplot', true, 'Kernel_Function', 'quadratic');

% サポートベクトルマシーンを利用したクラスタリング
classes = svmclassify(svmStruct,X(test,:),'showplot',true);
grid on
% クラスタリングのパフォーマンスを計算
classperf(cp,classes,test);
% 正答率を表示する
cp.CorrectRate

実行結果:

% AND演算でSVM(サポートベクターマシン)で解いてみる
X=[0 0; 0 1; 1 0; 1 1; ];
G=[0; 0; 0; 1;];
% クロスバリデーションインデックスの生成
[train, test] = crossvalind('holdOut',G);
cp = classperf(G);
% サポートベクトルマシーンクラスタリングの学習
svmStruct = svmtrain(X(train,:),G(train),'Kernel_Function','polynomial', 'showplot',true,'Method','LS');
%svmStruct = svmtrain(X(train,:), G(train), 'showplot', true, 'Kernel_Function', 'polynomial', 'Polyorder', 3);
%r=svmtrain(train_set,%train_response,'Kernel_Function','rbf','showplot','true');
%svmStruct = svmtrain(X(train,:), G(train), 'showplot', true, 'Kernel_Function', 'quadratic');
% サポートベクトルマシーンを利用したクラスタリング
classes = svmclassify(svmStruct,X(test,:),'showplot',true);
grid on
% クラスタリングのパフォーマンスを計算
classperf(cp,classes,test);
% 正答率を表示する
cp.CorrectRate

ans =

     1

fminbnd

FMINBND 1 変数の範囲の制約付きの非線形関数の最小化

サンプルコード:

echo on
f = 'x^2 - 2*x + 5'
xmin=fminbnd(f,-5,5)
fx = inline(f) % INLINEオブジェクトの作成
fx(xmin)

実行結果:

echo on
f = 'x^2 - 2*x + 5'

f =

x^2 - 2*x + 5

xmin=fminbnd(f,-5,5)

xmin =

     1

fx = inline(f) % INLINEオブジェクトの作成

fx =

     インライン関数:
     fx(x) = x^2 - 2*x + 5

fx(xmin) 

ans =

     4

taylor

TAYLOR  テイラー級数展開

サンプルコード:

echo on
syms x
n = 4
taylor(exp(x),n)
taylor(sin(x),n)
taylor(cos(x),n)
taylor(tan(x),n)
taylor(exp(i*x),n)
taylor(1/(1-x))
taylor(sqrt(1+x))

実行結果:

echo on
syms x
n = 4

n =

     4

taylor(exp(x),n)
 
ans =
 
x^3/6 + x^2/2 + x + 1
 
taylor(sin(x),n)
 
ans =
 
x - x^3/6
 
taylor(cos(x),n)
 
ans =
 
1 - x^2/2
 
taylor(tan(x),n)
 
ans =
 
x^3/3 + x
 
taylor(exp(i*x),n)
 
ans =
 
i*x - x^2/2 - (i*x^3)/6 + 1
 
taylor(1/(1-x))
 
ans =
 
x^5 + x^4 + x^3 + x^2 + x + 1
 
taylor(sqrt(1+x))
 
ans =
 
(7*x^5)/256 - (5*x^4)/128 + x^3/16 - x^2/8 + x/2 + 1

SQLite 3

MATLABからSQLite 3にアクセス方法

ODBCドライバの利用法

1. SQLite 3 ODBC Driver(http://www.ch-werner.de/sqliteodbc/)のページからEXEファイルをダウ ンロードし,インストールする。

2. Windows XPコントロールパネルから、「管理ツール」->「データ ソース (ODBC)」を起動する。

  • 「システムDSN」タブを選択して「追加」をクリックする。
  • 「SQLite3 ODBC Driver」を選択して「完了」をクリックする。
  • データソース名(Data Source Name)とデータベース名(Database Name)を入力する。
  • 「次へ」をクリックし、「完了」をクリックする。

3. MatlabからSQLite3にアクセスしてみる。

サンプルコード:

connect = database('データソース名','','')
sql = 'select * from table_name';
curs = exec(connect,sql);
setdbprefs('DataReturnFormat','structure');
data = fetch(curs);
close(curs);

主成分分析

MATLABで主成分分析

サンプルコード:

%米国各都市の犯罪比率調査(R言語のViolent Crime Rates by US State)
%1973年アメリカの10万人あたりの、殺人件数、暴行件数、都市部の人口割合、強姦件数のデータ
%Murder :殺人犯罪の比率(10万人あたり)
%Assault :暴行犯罪の比率(10万人あたり)
%UrbanPop :各都市の総人口に占める都心部在住者の割合
%Rape :レイプ犯罪の比率(10万人あたり)
USArrests = [
%Murder Assault UrbanPop Rape
13.20 236.00 58.00 21.20 % Alabama
10.00 263.00 48.00 44.50 % Alaska
8.10 294.00 80.00 31.00 % Arizona
8.80 190.00 50.00 19.50 % Arkansas
9.00 276.00 91.00 40.60 % California
7.90 204.00 78.00 38.70 % Colorado
3.30 110.00 77.00 11.10 % Connecticut
5.90 238.00 72.00 15.80 % Delaware
15.40 335.00 80.00 31.90 % Florida
17.40 211.00 60.00 25.80 % Georgia
5.30 46.00 83.00 20.20 % Hawaii
2.60 120.00 54.00 14.20 % Idaho
10.40 249.00 83.00 24.00 % Illinois
7.20 113.00 65.00 21.00 % Indiana
2.20 56.00 57.00 11.30 % Iowa
6.00 115.00 66.00 18.00 % Kansas
9.70 109.00 52.00 16.30 % Kentucky
15.40 249.00 66.00 22.20 % Louisiana
2.10 83.00 51.00 7.80 % Maine
11.30 300.00 67.00 27.80 % Maryland
4.40 149.00 85.00 16.30 % Massachusetts
12.10 255.00 74.00 35.10 % Michigan
2.70 72.00 66.00 14.90 % Minnesota
16.10 259.00 44.00 17.10 % Mississippi
9.00 178.00 70.00 28.20 % Missouri
6.00 109.00 53.00 16.40 % Montana
4.30 102.00 62.00 16.50 % Nebraska
12.20 252.00 81.00 46.00 % Nevada
2.10 57.00 56.00 9.50 % New Hampshire
7.40 159.00 89.00 18.80 % New Jersey
11.40 285.00 70.00 32.10 % New Mexico
11.10 254.00 86.00 26.10 % New York
13.00 337.00 45.00 16.10 % North Carolina
0.80 45.00 44.00 7.30 % North Dakota
7.30 120.00 75.00 21.40 % Ohio
6.60 151.00 68.00 20.00 % Oklahoma
4.90 159.00 67.00 29.30 % Oregon
6.30 106.00 72.00 14.90 % Pennsylvania
3.40 174.00 87.00 8.30 % Rhode Island
14.40 279.00 48.00 22.50 % South Carolina
3.80 86.00 45.00 12.80 % South Dakota
13.20 188.00 59.00 26.90 % Tennessee
12.70 201.00 80.00 25.50 % Texas
3.20 120.00 80.00 22.90 % Utah
2.20 48.00 32.00 11.20 % Vermont
8.50 156.00 63.00 20.70 % Virginia
4.00 145.00 73.00 26.20 % Washington
5.70 81.00 39.00 9.30 % West Virginia
2.60 53.00 66.00 10.80 % Wisconsin
6.80 161.00 60.00 15.60 % Wyoming
];

[N M] = size(USArrests); % 行列のサイズ
m = mean(USArrests); % 配列の平均値
s = std(USArrests); % 標準偏差
label = { 'Murder'; 'Assault'; 'UrbanPop'; 'Rape' };

%主成分分析の前に,平均が0,分散が1になるように正規化する。
USArrests2 = (USArrests - repmat(m, N, 1)) ./ repmat(s, N, 1);
% 主成分分析を行う。
[pc, score, latent, tsquare] = princomp(USArrests2);
%bar(score(:, 1 : 2));
%パレート図
per = latent / sum(latent);
pareto(per,label);

plabel = { '第1主成分','第2主成分','第3主成分','第4主成分' };
str = sprintf('%14s ',' ');
for i=1:4
    str = sprintf('%s %10s',str,plabel{i});
end
disp(str);

for i=1:4
    str = sprintf('%14s : ',label{i});
    for j=1:4
        str = sprintf('%s %10.2f',str,pc(i,j));
    end
    disp(str);
end

str = sprintf('%14s : ','寄与率(%)');
for i=1:4
    str = sprintf('%s %10.2f',str,per(i)*100);
end
disp(str);

str = sprintf('%14s : ','累積寄与率(%)');
sum = 0;
for i=1:4
sum = sum + per(i);
str = sprintf('%s %10.2f',str,sum*100);
end
disp(str);

実行結果:

                     第1主成分      第2主成分      第3主成分      第4主成分
        Murder :       -0.54       0.42      -0.34       0.65
       Assault :       -0.58       0.19      -0.27      -0.74
      UrbanPop :       -0.28      -0.87      -0.38       0.13
          Rape :       -0.54      -0.17       0.82       0.09
        寄与率(%) :       62.01      24.74       8.91       4.34
      累積寄与率(%) :       62.01      86.75      95.66     100.00

eig

EIG は、固有値と固有ベクトルを計算します。

サンプルコード:

echo on
A = 1/8*[20 6 -4; 4 18 4; -6 -3 10]
[v,d] = eig(A)

実行結果:

echo on
A = 1/8*[20 6 -4; 4 18 4; -6 -3 10]

A =

    2.5000    0.7500   -0.5000
    0.5000    2.2500    0.5000
   -0.7500   -0.3750    1.2500

[v,d] = eig(A)

v =

    0.8571    0.4851   -0.6667
    0.2857   -0.4851    0.6667
   -0.4286    0.7276    0.3333


d =

    3.0000         0         0
         0    1.0000         0
         0         0    2.0000

limit

LIMIT シンボリック式の極限値

サンプルコード:

echo on
syms x n h
limit((1+1/x)^x,x,inf)
limit((1+n/x)^x,x,inf)
limit(sin(x)/x)
limit((sin(x + h) - sin(x))/h, h, 0)
limit(1/x, x, 0, 'right')
limit(1/x, x, 0, 'left')

実行結果:

echo on
syms x n h
limit((1+1/x)^x,x,inf)
 
ans =
 
exp(1)
 
limit((1+n/x)^x,x,inf)
 
ans =
 
exp(n)
 
limit(sin(x)/x)
 
ans =
 
1
 
limit((sin(x + h) - sin(x))/h, h, 0)
 
ans =
 
cos(x)
 
limit(1/x, x, 0, 'right')
 
ans =
 
Inf
 
limit(1/x, x, 0, 'left')
 
ans =
 
-Inf

シンボリック

よく利用される MATLABのシンボリック

SYM シンボリックな数値、変数、オブジェクトの作成

サンプルコード:

例: sym('x') sym(1/3,'r')
SYMS シンボリックオブジェクト作成のショートカット
例: syms x y z
VPA 可変精度の演算
例:vpa(pi,128)
DOUBLE 倍精度に変換
例: double(x)
CHAR キャラクタ配列(文字列)の作成
例: char(x)
FINDSYM シンボリック式、または、行列内の変数の検出
例: syms x y z, z=x^2+y^2, findsym(z) は、x,yを出力する
FINVERSE 逆関数
finverse(f)
SYMSUM シンボリックな総和
SYMSUM(S, v) は、v について無限大の総和を求めます。
SYMSUM(S, a, b) と SYMSUM(S, v, a, b)は、a から b までのシンボリック式
の総和を求めます。
SOLVE 代数方程式のシンボリックな解
例: solve('x^2-1=0')
CLASS オブジェクトの作成、または、オブジェクトのクラスの出力
例: class(obj)
SUBEXPR 共通する部分式による式の書き換え
SIMPLE シンボリック式、または、行列の最も短い表現の検索
PRETTY シンボリック式のプリティプリント
LATEX シンボリック式の LaTeX 表現
PRIMES 素数のリストの作成
EXPAND シンボリックな展開
COLLECT 係数をまとめます。
NUMDEN シンボリック式の分子と分母
SUBS シンボリックな代入
COMPOSE 関数の合成,COMPOSE(f,g)は、f(g(y))を出力します
DIFF 微分
DIFF(S) は、FINDSYMで決定されるような自由変数に関して、シンボリック式 S
を微分します。
INT 積分
INT(S) は、FINDSYM で定義されるようなシンボリック変数について、S の
不定積分を出力します。
DSOLVE 常微分方程式のシンボリックな解
例: x = dsolve('Dx = -a*x','x(0) = 1','s') は、つぎの結果を出力します。
x = exp(-a*s)
TAYLOR Taylor 級数展開
TAYLOR(f) は、f に対して5次の Maclaurin 多項式近似を出力します。
3つのパラメータを任意の順序で与えることができます。
例: taylor(sin(x),pi/2,6) は、1-1/2*(x-1/2*pi)^2+1/24*(x-1/2*pi)^4 を
出力します。
DET シンボリックな行列式
DET(A)は、シンボリック行列Aの行列式です。
DIRAC Delta関数
HEAVISIDE Step関数
FOURIER フーリエ積分変換
IFOURIER 逆フーリエ積分変換
LAPLACE ラプラス変換
ILAPLACE 逆ラプラス変換

int

INT 積分

INT(S) は、FINDSYM で定義されるようなシンボリック変数について、S の  不定積分を出力します。S は、シンボリックオブジェクト(行列またはスカラ)です。  S が定数ならば、積分は、'x' について計算されます。

サンプルコード:

echo on
syms a x n
int(x^n)
int(exp(a*x))
int(log(x))
int(cos(x))
int(sin(x))
int(sinh(x))
int(cosh(x))

実行結果:

echo on
syms a x n
int(x^n)
 
ans =
 
piecewise([n = -1, log(x)], [n <> -1, x^(n + 1)/(n + 1)])
 
int(exp(a*x))
 
ans =
 
exp(a*x)/a
 
int(log(x))
 
ans =
 
x*(log(x) - 1)
 
int(cos(x))
 
ans =
 
sin(x)
 
int(sin(x))
 
ans =
 
-cos(x)
 
int(sinh(x))
 
ans =
 
cosh(x)
 
int(cosh(x))
 
ans =
 
sinh(x)

diff

 DIFF 微分

DIFF(S) は、FINDSYM で決定されるような自由変数に関して、シンボリック式Sを微分します。

サンプルコード:

echo on
syms a x n
diff(x^n)
diff(exp(a*x))
diff(log(x))
diff(cos(x))
diff(sin(x))
diff(sinh(x))
diff(cosh(x))

実行結果:

echo on
syms a x n
diff(x^n)
 
ans =
 
n*x^(n - 1)
 
diff(exp(a*x))
 
ans =
 
a*exp(a*x)
 
diff(log(x))
 
ans =
 
1/x
 
diff(cos(x))
 
ans =
 
-sin(x)
 
diff(sin(x))
 
ans =
 
cos(x)
 
diff(sinh(x))
 
ans =
 
cosh(x)
 
diff(cosh(x))
 
ans =
 
sinh(x)

等しくない

=~ 等しくない

サンプルコード:

array = [ 1 3 5 7 11 ];
result = array ~= 5

実行結果:

result =

     1     1     0     1     1

等しい

== 等しい

サンプルコード:

array = [ 1 3 5 7 11 ];
result = array == 5

実行結果:

result =

     0     0     1     0     0

配列

配列

サンプルコード:

array1 = [ 1 3 5 7 11 ]
array2 = [ 1; 3; 5; 7; 11; ]

実行結果:

array1 =

     1     3     5     7    11


array2 =

     1
     3
     5
     7
    11

より大きいか等しい

>= より大きいか等しい

サンプルコード:

array = [ 1 3 5 7 11 ];
result = array >= 5

実行結果:

result =

     0     0     1     1     1

より小さいか等しい

<= より小さいか等しい

サンプルコード:

array = [ 1 3 5 7 11 ];
result = array <= 5

実行結果:

result =

     1     1     1     0     0

より大きい

> より大きい

サンプルコード:

array = [ 1 3 5 7 11 ];
result = array > 5

実行結果:

result =

     0     0     0     1     1

より小さい

< より小さい

サンプルコード:

array = [ 1 3 5 7 11 ];
result = array < 5

実行結果:

result =

     1     1     0     0     0

for

FORループ 指定回数の繰り返しステートメント

サンプルコード:

array = [ 1 3 5 7 11 ];
for i = 1:length(array)
    disp( array(i));
end

実行結果:

     1

     3

     5

     7

    11

if

IF 条件実行ステートメント

サンプルコード:

array = [ 1 3 5 7 11 ];
for i = 1:length(array)
    if array(i) > 5
        disp( array(i));
    end
end

実行結果:

     7

    11

matlab

MATLABは、MathWorks社が開発している数値解析ソフトウェアでありその中で使うプログラミング言語の名称でもある。
MATLABは、MATrix LABoratoryを略したものであり、行列計算、ベクトル演算、グラフ化や3次元表示などの豊富なライブラリを持った、インタプリタ形式の高性能なテクニカルコンピューティング言語、環境としての機能を持つ。標準で数多くのライブラリを有しているが、それ以上のデータ解析や統計、アプリケーション展開などが必要な場合にはToolboxと呼ばれる拡張パッケージをインストールすることで、MATLABの機能拡張を図ることができる。
MATLABを用いると、C言語やFORTRANといった従来のプログラミング言語よりも短時間で簡単に科学技術計算を行うことができる。類似フリーウェアにScilab、GNU Octave、FreeMatなどがある。


ブックマーク このエントリをはてなブックマークに追加 Yahoo!ブックマークに登録 このエントリをtwitterに登録 Googleブックマークに登録 このエントリをdel.icio.usに登録 このエントリをlivedoorクリップに登録
©2008 質問箱 http://www.askbox.net Powered by Google App Engine