MATLAB Answers

Medical Image Classifica​tionにおけるcr​oss-valida​tionの使い方につ​きまして

2 views (last 30 days)
ssk
ssk on 11 Feb 2019
Commented: ssk on 14 Feb 2019
プログラミング初心者です。
以下のディレクトリ構造に基づき、cross-validationのコードを書きたいと思っていますが、
helpを見てもつまづいてしまいましてご質問いたします。
cross-validationは10-foldを希望しております。
どうぞよろしくお願いいたします。
main
-- a
-- image.dcm(10 dicom file)
 -- b
  -- image.dcm(10 dicom file)
 -- c
  -- image.dcm(10 dicom file)
-- d
  -- image.dcm(10 dicom file)
%path = current directory
currentdirectory = pwd;
categories = {'a', 'b', 'c','d'};
%Create an ImageDatastore to help you manage the data.
imds = imageDatastore(fullfile(currentdirectory, categories),'IncludeSubfolders',true,'FileExtensions','.dcm','LabelSource', 'foldernames','ReadFcn',@dicomread);
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.5,'randomize');
おそらく下記コードをcross-validationに変更するかと思うのですが、うまくできません。。
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.5,'randomize');

  0 Comments

Sign in to comment.

Accepted Answer

ryota suzuki
ryota suzuki on 13 Feb 2019
Edited: ryota suzuki on 13 Feb 2019
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.5,'randomize');
では変数imdsに集約されたデータのうち,50% をimdsTrainに,残りの50% をimdsValidationにランダムに分割させています.
変数名から考えるに,imdsTrainは学習用,imdsValidationは検証用のデータではないでしょうか.
機械学習において,交差検証(Cross-validation)とは,学習前に検証用のデータ(Validation Data)を抜きとり,
学習とは独立させることで過学習を防ぐ取り組みです.
学習用データ(Training Data)を使って変数の最適化計算を行い,その結果を用いて検証用データで何度もテストを行います.
現状のスクリプトは,データを読み取り,学習用と検証用に分けたところまでであり,
交差検証には進んでいません.
このあとに学習させるコマンドを追加させる必要があります.
10-foldという単語を見るに,K-fold Cross Validationを検討中でしょうか.
Statistics and Machine Learning Toolboxを導入すれば,一発でできそうな分割コマンドがありましたが(データの交差検証分割を作成),splitEachLabelでも可能かと思います.
[imds01,imds02,imds03,imds04,imds05,imds06,imds07,imds08,imds09,imds10]...
= splitEachLabel(imds,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,'randomize');
でデータを10分割し,適宜,
imdsTrain = imageDatastore(cat(1,imds01.Files,imds02.Files, ... ,imds09.Files))
imdsValidation = imds10
という具合に結合させて学習にまわす動作を,組み合わせを変えながら10回繰り返すことでできるかと思います.

  6 Comments

Show 3 older comments
ssk
ssk on 13 Feb 2019
五月雨式のコメント失礼いたします。cvpartitionコマンドを使って、10個のデータを10-foldで分割した場合、式は以下の通りとなると思いますが
c = cvpartition(10,'KFold',10);
こちらを結合させる場合、どのような処理となるかご教示頂けますでしょうか?
ryota suzuki
ryota suzuki on 14 Feb 2019
Statistics and Machine Learning Toolboxについては私は触ったことがないので結合の仕方はわからないです.自分の環境下で試せないので確かなことは言えないです.申し訳ありません.
ただ,cvpartitionのドキュメンテーションページにはK-foldの計算例が記載されているようです.
ssk
ssk on 14 Feb 2019
何度もご質問してしまいご迷惑おかけしました。ここから先は自身で解決します。ご示唆を頂きまして本当にありがとうございました。

Sign in to comment.

More Answers (0)