ぷそさんのプログラミング研究所

【ソースコード】matlabで機械学習をする方法|ニューラルネットワーク

機械学習といえばPythonを使う人が非常に多いと思いますが、Matlabでも簡単に機械学習モデルを作ることができます。

そこで今回は、Matlabでの機械学習をサンプルコードを交えて解説いたします。

今回はニューラルネットワークについてです。

決定木モデルについては以下の記事をご覧ください!

あわせて読みたい
【ソースコード】matlabで機械学習をする方法|決定木モデル 機械学習といえば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")
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

このブログでは,PythonやLaTeXの使い方などを紹介しています!
仕事でも趣味でもプログラミングをしています。
ブログは2022年8月にスタートしました。
【経歴】東京大学大学院修了→大手IT企業勤務

コメント

コメントする

目次