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

【ソースコード】matlabで機械学習をする方法|決定木モデル

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

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

今回は決定木モデルについてです!

ニューラルネットワークについては以下の記事をご覧ください!

あわせて読みたい
【ソースコード】matlabで機械学習をする方法|ニューラルネットワーク 機械学習といえばPythonを使う人が非常に多いと思いますが、Matlabでも簡単に機械学習モデルを作ることができます。 そこで今回は、Matlabでの機械学習をサンプルコード...
目次

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")

このように,混同行列を確認することができます。

まとめ

非常に簡単に機械学習モデルを作ることができました。

精度を上げるには,パラメータチューニングをする方法があります。

今回のソースコードは以下のようになります。

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")
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

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

コメント

コメントする

目次