K-NN 分類が MATLAB でどのように機能するかを理解するのに問題があります。問題は次のとおりです。大規模なデータセット (1500 を超える被験者に対して 65 の特徴) と、それぞれのクラスのラベル (0 または 1) があります。私に説明されたことによると、データをトレーニング、テスト、および検証のサブセットに分割して、データに対して教師付きトレーニングを実行し、K-NN を介して分類する必要があります。まず、3 つのサブグループを分割する最適な比率はどれくらいですか (それぞれのデータセットのサイズの 1/3 ですか?)。
ClassificationKNN/fitcknn 関数と crossval 関数 (理想的にはデータを分割するため) を調べましたが、それらの使用方法が本当にわかりません。
要約すると、私が望んでいた-データを3つのグループに分割-トレーニングサブセットを使用してKNNを「トレーニング」(トレーニングを必要とする方法ではなく、トレーニングと同等であることはわかっています)-テストサブセットを分類し、分類エラーを取得します/パフォーマンス - 検証テストを実施する意味は何ですか?
よろしくお願いします。
編集:私はそれを行うことができたと思いますが、それがあまり求めていなければ、私が何かを見逃していないか見てもらえますか? これはランダムな場合の私のコードです:
nfeats=60;ninds=1000;
trainRatio=0.8;valRatio=.1;testRatio=.1;
kmax=100; %for instance...
data=randi(100,nfeats,ninds);
class=randi(2,1,ninds);
[trainInd,valInd,testInd] = dividerand(1000,trainRatio,valRatio,testRatio);
train=data(:,trainInd);
test=data(:,testInd);
val=data(:,valInd);
train_class=class(:,trainInd);
test_class=class(:,testInd);
val_class=class(:,valInd);
precisionmax=0;
koptimal=0;
for know=1:kmax
%is it the same thing use knnclassify or fitcknn+predict??
predicted_class = knnclassify(val', train', train_class',know);
mdl = fitcknn(train',train_class','NumNeighbors',know) ;
label = predict(mdl,val');
consistency=sum(label==val_class')/length(val_class);
if consistency>precisionmax
precisionmax=consistency;
koptimal=know;
end
end
mdl_final = fitcknn(train',train_class','NumNeighbors',know) ;
label_final = predict(mdl,test');
consistency_final=sum(label==test_class')/length(test_class);
たくさんのご協力ありがとうございました