如何使用KNN在MATLAB中对数据进行分类?

佩德罗·阿尔瓦罗·查加斯

我在理解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);

非常感谢您的帮助

哈特穆特·普菲青格

对于第一个问题 “将3个子组划分的最佳比例是多少”,只有经验法则:

  1. 训练数据的数量是最重要的。越多越好。因此,使其尽可能大,并且绝对大于测试或验证数据。

  2. 测试和验证数据具有相似的功能,因此为它们分配相同数量的数据非常方便。但重要的是要有足够的数据以识别过度适应。因此,应该从数据基础上完全随机地选择它们。

因此,50/25/25或60/20/20分区非常普遍。但是,如果您的数据总量相对于所选拓扑的权重总数而言较小(例如,网络中的权重为10,数据中的权重为200),则70/15/15甚至80/10/10可能是更好的选择。

关于您的第二个问题 “进行验证测试有什么意义?”

通常,您在训练数据上训练选定的模型,然后通过将训练后的模型应用于看不见的数据(验证集)来估计“成功”。

如果现在您将完全停止提高准确性的工作,那么您确实不需要数据的三个分区。但是通常,您认为可以通过例如更改权重或隐藏层的数量或...来提高模型的成功率,现在,大循环开始进行许多迭代:

1)更改权重和拓扑,2)训练,3)验证,不满意,转到1)

此循环的长期影响是,您使模型越来越适应验证数据,因此结果会有所改善,这不是因为您如此智能地改善了拓扑结构,而是因为您在不知不觉中学习了验证集的属性以及如何应对他们。

现在,根据真正看不见的数据(测试集)估算出神经网络的最终且唯一有效的准确性。这仅执行一次,并且对于揭示过度适应也很有用。现在不允许您开始第二个甚至更大的循环,以禁止对测试集进行任何修改!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据年份在MATLAB中对数据(单元阵列)进行分类

来自分类Dev

在MATLAB中使用感知器对数据进行分类

来自分类Dev

如何使用分类变量对数据框进行分组以在matplotlib中制作线形图?

来自分类Dev

在新列中对数据进行分类

来自分类Dev

在R中对数据进行分类

来自分类Dev

无法使用R对数据进行分类

来自分类Dev

使用循环对数据进行分组(MATLAB 中的信号处理)

来自分类Dev

如何在Python中对数字进行分类和分类?

来自分类Dev

在数据框中的列中对数据进行分类

来自分类Dev

如何根据python中的时间变化对数据集进行分类或重新分组

来自分类Dev

在Matlab中对数据进行排序

来自分类Dev

使用dplyr对数据框的两列中的对象进行分类

来自分类Dev

如何对数据进行分类并绘制图形

来自分类Dev

按熊猫中的值对数据进行分类

来自分类Dev

opencv kmeans不在某些类中对数据进行分类

来自分类Dev

对数据框中的分类变量进行排序

来自分类Dev

使用 Python 根据整数值对数据进行分类

来自分类Dev

如何根据规则对数组中的值进行分类?

来自分类Dev

如何在R中对数值范围进行分类

来自分类Dev

如何根据规则对数组中的值进行分类?

来自分类Dev

使用 lodash groupBy 函数对数组中的对象进行分类

来自分类Dev

如何使用mongodb对数据进行分组?

来自分类Dev

如何快速对数组对象进行分类

来自分类Dev

如何对数字列进行分类

来自分类Dev

在MATLAB中以亚小时为单位对数据进行平均

来自分类Dev

在python中对数字进行分类

来自分类Dev

循环使用if语句对数字进行分类

来自分类Dev

根据另一个数据框中的信息对数据框进行分类

来自分类Dev

使用分类数据集进行一键编码:如何处理分类数据中的不同值(较少的数字)

Related 相关文章

  1. 1

    根据年份在MATLAB中对数据(单元阵列)进行分类

  2. 2

    在MATLAB中使用感知器对数据进行分类

  3. 3

    如何使用分类变量对数据框进行分组以在matplotlib中制作线形图?

  4. 4

    在新列中对数据进行分类

  5. 5

    在R中对数据进行分类

  6. 6

    无法使用R对数据进行分类

  7. 7

    使用循环对数据进行分组(MATLAB 中的信号处理)

  8. 8

    如何在Python中对数字进行分类和分类?

  9. 9

    在数据框中的列中对数据进行分类

  10. 10

    如何根据python中的时间变化对数据集进行分类或重新分组

  11. 11

    在Matlab中对数据进行排序

  12. 12

    使用dplyr对数据框的两列中的对象进行分类

  13. 13

    如何对数据进行分类并绘制图形

  14. 14

    按熊猫中的值对数据进行分类

  15. 15

    opencv kmeans不在某些类中对数据进行分类

  16. 16

    对数据框中的分类变量进行排序

  17. 17

    使用 Python 根据整数值对数据进行分类

  18. 18

    如何根据规则对数组中的值进行分类?

  19. 19

    如何在R中对数值范围进行分类

  20. 20

    如何根据规则对数组中的值进行分类?

  21. 21

    使用 lodash groupBy 函数对数组中的对象进行分类

  22. 22

    如何使用mongodb对数据进行分组?

  23. 23

    如何快速对数组对象进行分类

  24. 24

    如何对数字列进行分类

  25. 25

    在MATLAB中以亚小时为单位对数据进行平均

  26. 26

    在python中对数字进行分类

  27. 27

    循环使用if语句对数字进行分类

  28. 28

    根据另一个数据框中的信息对数据框进行分类

  29. 29

    使用分类数据集进行一键编码:如何处理分类数据中的不同值(较少的数字)

热门标签

归档