機械学習といえばPythonを使う人が非常に多いと思いますが、Matlabでも簡単に機械学習モデルを作ることができます。
そこで今回は、Matlabでの機械学習をサンプルコードを交えて解説いたします。
今回は決定木モデルについてです!
ニューラルネットワークについては以下の記事をご覧ください!
![](https://icochan1.net/wp-content/uploads/2023/02/40dcbe9d88c96297b642179a653642d8-2-300x169.png)
matlabでの機械学習に必要なもの
Matlabで機械学習を行うのに必要なものは以下になります。
・Matlab
・Statistics and Machine Learning Toolbox
特に,Statistics and Machine Learning Toolboxが必須になります。
これは有料ですが,大学によっては無料ライセンスがある可能性もあります。
決定木モデルの作成
今回は,機械学習の中でも「教師あり学習」に分類される決定木モデルについてご紹介します。
決定木には,ランダムフォレストやlightgbmなどが含まれます。
データの準備
今回は,モデルの作り方のチュートリアルなので,データは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:目的変数のテストデータ
決定木モデルに学習させる
データが準備できたので,次にモデルを作成します。
%% 学習
model = fitctree(X_train, y_train);
2行目:model = fitctree(X_train, y_train);
決定木モデルについては,1行で学習が完了します。
パラメータチューニングについては,別の記事で紹介します!
結果の確認
テストデータでモデルの精度を確認しましょう。
%% 予測結果
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の値で確認してみます。
今回のモデルでは,81.4 %となりました。
ニューラルネットワークに比べると精度は低いですが,十分な数値になりました。
結果の可視化
結果を見やすくするために,混同行列で結果を見てみましょう。
以下のコードで確認できます。
%% 結果の可視化
confusionchart(y_test, pred)
xlabel("Prediction")
ylabel("True")
![](https://icochan1.net/wp-content/uploads/2023/02/tree.png)
このように,混同行列を確認することができます。
まとめ
非常に簡単に機械学習モデルを作ることができました。
精度を上げるには,パラメータチューニングをする方法があります。
今回のソースコードは以下のようになります。
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));
%% 学習
model = fitctree(X_train, y_train);
%% 予測結果
pred = predict(model,X_test);
accuracy = sum(cell2mat(y_test) == cell2mat(pred)) / length(y_test) * 100;
%% 結果の可視化
confusionchart(y_test, pred)
xlabel("Prediction")
ylabel("True")
コメント