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

1 回表示 (過去 30 日間)
ssk
ssk 2019 年 2 月 11 日
コメント済み: ssk 2019 年 2 月 14 日
プログラミング初心者です。
以下のディレクトリ構造に基づき、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');

採用された回答

ryota suzuki
ryota suzuki 2019 年 2 月 13 日
編集済み: ryota suzuki 2019 年 2 月 13 日
[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 件のコメント
ryota suzuki
ryota suzuki 2019 年 2 月 14 日
Statistics and Machine Learning Toolboxについては私は触ったことがないので結合の仕方はわからないです.自分の環境下で試せないので確かなことは言えないです.申し訳ありません.
ただ,cvpartitionのドキュメンテーションページにはK-foldの計算例が記載されているようです.
ssk
ssk 2019 年 2 月 14 日
何度もご質問してしまいご迷惑おかけしました。ここから先は自身で解決します。ご示唆を頂きまして本当にありがとうございました。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeサポート ベクター マシン回帰 についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!