我在理解K-NN分類是如何在MATLAB中工作時遇到問題。' 這裏有個問題,我有一個大型數據集(超過1500個主題的65個特徵)及其相應類的標籤(0或1)。 根據我已經解釋的內容,我必須將數據分成訓練,測試和驗證子集,以對數據執行監督式訓練,並通過K-NN進行分類。 首先,劃分3個小組的最佳比例是多少(每個數據集大小的1/3)?如何使用KNN對MATLAB中的數據進行分類?
我已經看過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);
非常感謝您的所有幫助
我不知道太多關於K-NN在MATLAB方面,但我認爲在這個環節第一個答案解釋了爲什麼你有三個子集:http://stats.stackexchange.com/questions/9357/why - 只 - 三分區培訓驗證測試。 總結(如果你不想讀它),測試是最初適合模型,驗證,調整,然後從中挑選最適合的,並且測試是獲得真實世界的性能規格。 – Zhouster
我認爲我能夠做到這一點,但如果有人可以檢查我的代碼,那就太棒了。我不知道是否有更好的方法比較真正的test_label和預測的標籤。 –
您的編輯看起來不錯,但我沒有使用您的matlab版本,而且我的版本非常不同,所以我無法可靠地確認。抱歉。您應該使用一些具有明顯特徵類關係的實際數據來測試您的程序,而不是隨機數據和類。 –