機械学習といえばPythonを使う人が非常に多いと思いますが、Matlabでも簡単に機械学習モデルを作ることができます。
そこで今回は、Matlabでの機械学習をサンプルコードを交えて解説いたします。
今回はニューラルネットワークについてです。
決定木モデルについては以下の記事をご覧ください!

matlabでの機械学習に必要なもの
Matlabで機械学習を行うのに必要なものは以下になります。
・Matlab
・Statistics and Machine Learning Toolbox
特に,Statistics and Machine Learning Toolboxが必須になります。
これは有料ですが,大学によっては無料ライセンスがある可能性もあります。
ニューラルネットワークの作成
今回は,機械学習の中でも「教師あり学習」に分類されるニューラルネットワークについてご紹介します。
データの準備
今回は,モデルの作り方のチュートリアルなので,データはMatlabに標準搭載されているデータを使用します。
clear;
%% データの読み込み
load ionosphere;ionosphereデータセットは,Xに説明変数が34種類,Yに2値の目的変数が入っているデータセットになります。
Yには「g」か「b」のいずれかが入っています。
つまり,34種類のデータから「g」か「b」を予測するようなモデルを作成します。
学習データとテストデータに分割
データが準備できたので,学習データとテストデータにわけて学習させます。
%% 学習データとテストデータに分割
rng("default")
cvp = cvpartition(Y,"Holdout",0.2);
X_train = X(training(cvp),:);
y_train = Y(training(cvp));
X_test = X(test(cvp),:);
y_test = Y(test(cvp));3行目:cvp = cvpartition(Y,”Holdout”,0.2);
学習データとテストデータは8:2になるように分割させます。
5行目〜8行目
データを以下のように設定しています。
X_train:説明変数の学習データ
y_train:目的変数の学習データ
X_test:説明変数のテストデータ
y_test:目的変数のテストデータ
ニューラルネットワークに学習させる
データが準備できたので,次にモデルを作成します。
%% 学習
layers = [64];
model = fitcnet(X_train, y_train, "LayerSizes", layers);2行目:layers = [64];
layersには,中間層のノード数を入れます。
この場合は,中間層1層でノード数は64になります。
層数を増やす場合には,リスト表記で追加します。
例えば,中間層3層でノード数を64→32→16にする場合には以下のようにします。
layers = [64 32 16];3行目:model = fitcnet(X_train, y_train, “LayerSizes”, layers);
学習データを入れて学習させます。
この1行で学習が完了します。
学習状況の確認
pythonで機械学習を行う時のように,損失関数(loss)の値を見たい場合には以下のようにします。
% 損失関数の保存
iteration = model.TrainingHistory.Iteration;
trainLosses = model.TrainingHistory.TrainingLoss;
plot(iteration,trainLosses)lossが減少していると学習がうまく進んでいることがわかります。
結果の確認
テストデータでモデルの精度を確認しましょう。
%% 予測結果
pred = predict(model,X_test);
accuracy = sum(cell2mat(y_test) == cell2mat(pred)) / length(y_test) * 100;2行目:pred = predict(model,X_test);
predに予測結果を保存しています。
4行目:accuracy =…
結果をaccuracyの値で確認してみます。
今回のモデルでは,87.1 %となりました。
非常に高い精度で予測ができています。
結果の可視化
結果を見やすくするために,混同行列で結果を見てみましょう。
以下のコードで確認できます。
%% 結果の可視化
confusionchart(y_test, pred)
xlabel("Prediction")
ylabel("True")
このように,pythonと同じように混同行列を確認することができます。
まとめ
非常に簡単に機械学習モデルを作ることができました。
精度を上げるには,layersの部分を変えると良いです!
今回のソースコードは以下のようになります。
clear;
%% データの読み込み
load ionosphere;
%% 学習データとテストデータに分割
rng("default")
cvp = cvpartition(Y,"Holdout",0.2);
X_train = X(training(cvp),:);
y_train = Y(training(cvp));
X_test = X(test(cvp),:);
y_test = Y(test(cvp));
%% 学習
layers = [64];
model = fitcnet(X_train, y_train, "LayerSizes", layers);
% 損失関数の保存
iteration = model.TrainingHistory.Iteration;
trainLosses = model.TrainingHistory.TrainingLoss;
% plot(iteration,trainLosses)
%% 予測結果
pred = predict(model,X_test);
accuracy = sum(cell2mat(y_test) == cell2mat(pred)) / length(y_test) * 100;
%% 結果の可視化
confusionchart(y_test, pred)
xlabel("Prediction")
ylabel("True")

コメント