algorithm - k 最近邻分类器训练每个类的样本大小

标签 algorithm machine-learning data-mining classification knn

谁能告诉我每个类(class)的训练样本大小是否需要相等?

我可以接受这个场景吗?

          class1   class2  class3
samples    400      500     300

还是所有类别都应具有相同的样本量?

最佳答案

KNN 结果基本上取决于 3 个因素(N 的值除外):

  • 训练数据的密度:每个类别的样本数量应该大致相同。不需要很精确,但我会说不超过 10% 的差异。否则界限会很模糊。
  • 整个训练集的大小:您需要在训练集中有足够多的示例,这样您的模型才能泛化到未知样本。
  • 噪声:KNN 本质上对噪声非常敏感,因此您要尽可能避免训练集中出现噪声。

请考虑以下示例,您正在尝试在 2D 空间中学习类似 donut 的形状。

通过在你的训练数据中使用不同的密度(假设你在 donut 内部的训练样本比外面多),你的决策边界将像下面这样有偏差:

donut-bad

另一方面,如果您的类相对平衡,您将获得更精细的决策边界,接近 donut 的实际形状:

enter image description here

所以基本上,我会建议尝试平衡您的数据集(只是以某种方式对其进行标准化),并考虑我上面提到的其他 2 个项目,您应该没问题。

如果您必须处理不平衡的训练数据,您还可以考虑使用 WKNN 算法(只是 KNN 的优化)为元素较少的类分配更强的权重。

关于algorithm - k 最近邻分类器训练每个类的样本大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10008966/

相关文章:

algorithm - 如何有效地找到集合的所有存储子集? (关联规则查找)

pattern-matching - 交易预测 : Which algorithm?

python - 硬币找零问题 : difference between these two methods

algorithm - 从 Scala 数组中提取区域

python - 错误: Cannot uninstall 'ruamel-yaml' while creating docker image for azure ML ACI deployment

machine-learning - 训练 Yolo 使用已裁剪的图像检测我的自定义对象

c# - 文本分类 NaiveBayes

matlab - 比较 k 均值聚类

string - 带符号数字的字符串算术表达式分段算法

java - 重新排列数组使得 arr[i] = i