Matlab

コストをかけずにScilabで済ますつもりでいたのですが、とうとう誘惑に負けてMatlabを購入してしまいました。

しかもまずは基本だけでよいので、Matlab本体で済まそうと思っていたのですが、やはりSimulinkくらいは、、、最適化と制御検討は、、、と思い、結局いくつか追加モジュールも購入。

思ったより高くついてしまったものの、納得のクオリティ。使い勝手が良く、面白くてたまらないです。少しずつ整理していきたいと思います。

Matlabの基本機能

基本コマンド

Matlabはマニュアルが充実しているので、覚えておきたいものだけ記載します。

・コンソール画面への出力

disp()コマンドを使用

disp('Hello')

出力 : Hello

・コメントアウト

%

・2次元配列

全ての要素が1の2行3列の2次元配列を作成する場合、

a=ones(2,3)

※すべての要素0にしたい場合は、zeros、乱数にしたい場合はrand。

・Exceldataの読み込み

data.xlsxのsheet1を読み込み、dataに格納する場合、

[data]=xlsread('data.xlsx','sheet1')

dataに格納したデータの1列目のデータをxdataに格納したい場合、

xdata=data[:,1]

配列の次元の確認方法(data配列の3番目の次元数を確認したい場合)

n=size(data,3)

配列の最大値、最小値を取得する場合、

a=max(data)
b=min(data)
・基本の論理演算子

準備中

・複素数の表現  

複素数、共役複素数、複素数の絶対値の入力例(上記のa,bの入力に続けて以下入力下さい)

 

↓虚数部の表現 : i、 共役複素数 : conj()、 絶対値 : abs()、 指数関数 : exp()

Complexcalc1

Matlabのアプリ

MATLAB Support Package for Apple iOS Sensors

ipad/iphoneを使ったお手軽IOT(データ取得)  

こちらのブログにまとめました。

Matlabの活用

誤差逆伝播法

水の蒸気圧データへのフィッティング  

詳細はゆくゆく整理していきたいと思いますが、まずは計算前提と検証結果です。

 

Perryのエンジニアリングブックから、水の蒸気圧データを抜き打ちで12点ほど抜出し→エクセルにデータを移し、そのデータを読み込んで、以下の条件で学習させてみます。

 

使用したデータは以下になります。

BackProp_VPcalc  

隠れ層:1層、隠れ層ユニット数:200、学習回数:3200、学習率:0.7、荷重減衰パラメーター:0.3、正則化パラメーター:0.03、活性化関数:シグモイド関数、誤差評価関数:最小二乗。

BackProp_VPcalc  

以下のようにcolormapを使い、計算サイクル100,200,400,800,1600,3200毎に結果を出力するようにしていますが、学習回数が増えるに従って、精度が上がっていく様子が確認できます。(色が薄くなるほど学習が進んだ状態です)

b = colormap;
plot(temp(:,1),VP(:,1),'color',b(6*k,:));
 

考察がまだあまりできていないのですが、隠れユニット数が少ないと全く学習が進まないかったのと、正則化パラメーターが結構効きました。

特に低温度域のデータは、正則化パラメーターを調整しないとなかなか教師データに近づけることができませんでした。

低温度域は、そもそも蒸気圧の絶対値自体が小さいため、誤差の絶対値が小さいことと、傾きがかなり寝ている部分なので勾配法で解が収束しづらく、正則化が必須になるのかなと考えています。

 

いずれ検証のまとめも行いたいと思いますが、ひとまず試行過程の結果を以下にまとめておきます。

BackProp_VPcalc  

温度と蒸気圧の関係だけでは機械学習を使う必要性は無いですが、、、。Pirikaの記事に感銘を受けて、まず勉強がてら試してみました。もう少し面白そうなネタを探してみたいと思います。

 

当サイトに不具合、ご意見等ございましたらCEsolutionにお知らせください。

Page Top