交差検定(cross​-validatio​n)につきまして

5 views (last 30 days)
ssk
ssk on 28 Feb 2019
Commented: Kenta on 24 Jan 2020
プログラミング初心者です。
以下のディレクトリ構造に基づき、cross-validationのコードを自力で書きたいと思っていますが、
数週間考えてもどのように分割していいか分からず質問いたします。
どうぞよろしくお願いいたします。
main
-- a
-- image
 -- b
  -- image
 -- c
  -- image
-- d
  -- image
%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');
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomize');
下記コード以降に交差検定を導入するコードを導入するかと思うのですが、現状アイディアが思い浮かびません。

Accepted Answer

Kenta
Kenta on 1 Mar 2019
Edited: Kenta on 1 Mar 2019
[imds01,imds02,imds03,imds04,imds05,imds06,imds07,imds08,imds09,imds010]...
= splitEachLabel(imds,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,'randomize');
imdsTrain1 = imageDatastore(cat(1,imds01.Files,imds02.Files,imds03.Files,imds04.Files,imds05.Files,imds06.Files,imds07.Files,imds08.Files,imds09.Files));
imdsTrain1.Labels = cat(1,imds01.Labels,imds02.Labels,imds03.Labels,imds04.Labels,imds05.Labels,imds06.Labels,imds07.Labels,imds08.Labels,imds09.Labels);
交差検証であれば、crossvalの関数で、任意の分割数で交差検証ができます。その際、実行するコードをfunction化して、
入れ子にすればよいです。
ただ、上のように、かなり無理やりではありますが、全画像を10個に分けたほうがわかりやすいかもしれません。添付のファイルを実行してみてください。
imdsとして、全画像を読み込む
spritEachLabelで10個に分ける
imdsTrain〇として、10個分に分ける
以下for文
for i=1:10
imdsTrain〇(〇にはiの値)で訓練データ
imdsValidation〇(〇には10-iの値、はじめにimdsTrain〇には、imds0〇だけ除外するようにしておく)
通常の流れにそって、imdsTrainで訓練し、imdsValidationでテストする
end
この手書き文字の判別を10点交差検証で行っています。時間がかかるので、maxepochsを1にしています。4にすれば、精度があがるはずです。
  10 Comments
ssk
ssk on 16 Apr 2019
itakura様、度々のご連絡大変失礼いたします。
eval関数につきまして、eval(['trainimds' ,'=', stname,';'])となっておりますが、ここでなぜ '='としているのかご教示いただけますでしょうか。 trainimdsをtrainimds1.....trainimds10と出力するのに'='は必ず必要ないと考えましたのですが。。
Kenta
Kenta on 24 Jan 2020
trainimds=stname;
とすることを意図しています。ただ、evalはいらないような気もします。
今回はtrainimdsという名前の変数にtrainimds1, ...を与えるので=が必要です。
b=10という変数があって、a=b;とするのと同様です。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!