我在理解MATLAB中K-NN分类的工作方式时遇到问题。´
这是问题所在,我有一个大型数据集(超过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);
非常感谢您的帮助
最佳答案
对于第一个问题“将3个子组划分的最佳比例是多少”,只有经验法则:
训练数据的数量是最重要的。越多越好。
因此,使其尽可能大,并且绝对大于测试或验证数据。
测试和验证数据具有类似的功能,因此可以方便地将它们分配相同的数量
数据的。但是,重要的是要有足够的数据以识别过度适应。所以他们
应该完全随机地从数据基础中选取。
因此,50/25/25或60/20/20分区非常普遍。但是,如果您的数据总量相对于所选拓扑的权重总数而言较小(例如,网络中的权重为10,数据中的权重为200),则70/15/15甚至80/10/10可能是更好的选择。
关于您的第二个问题“进行验证测试有什么意义?”:
通常,您在训练数据上训练选定的模型,然后通过将训练后的模型应用于看不见的数据(验证集)来估计“成功”。
如果现在您将完全停止提高准确性的工作,则确实不需要数据的三个分区。但通常情况下,您认为您可以通过以下方法提高模型的成功率:更改权重或隐藏层的数量或...,现在大循环开始进行许多迭代:
1)更改权重和拓扑,2)训练,3)验证,不满意,转到1)
此循环的长期影响是,您使模型越来越适应验证数据,因此结果会有所改善,这不是因为您如此智能地改进了拓扑结构,而是因为您在不知不觉中学习了验证集的属性以及如何应对他们。
现在,根据真正看不见的数据(测试集)估算出神经网络的最终且唯一有效的准确性。这仅执行一次,并且对于揭示过度适应也很有用。现在不允许您开始第二个甚至更大的循环,以禁止对测试集进行任何修改!
关于matlab - 如何使用KNN在MATLAB中对数据进行分类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24681540/