machine-learning - k 最近邻的分类属性的距离度量

标签 machine-learning classification nearest-neighbor knn euclidean-distance

对于我的类项目,我正在研究 Kaggle competition - Don't get kicked

该项目是将测试数据分类为汽车的好买/坏买。有 34 个特征,数据高度倾斜。我做出了以下选择:

  1. 由于数据高度偏差,在 73,000 个实例中,有 64,000 个实例不值得购买,只有 9,000 个实例值得购买。由于构建决策树会过度拟合数据,因此我选择使用 kNN - K 最近邻。
    尝试完 kNN 后,我计划 try out Perceptron and SVM techniques ,如果 kNN 没有产生好的结果。我对过度拟合的理解正确吗?
  2. 由于某些特征是数字的,因此我可以直接使用欧几里得距离作为度量,但还有其他属性是分类的。为了恰本地使用这些功能,我需要提出自己的距离测量方法。我读到Hamming distance ,但我仍然不清楚如何合并 2 个距离度量,以便每个特征获得相同的权重。
  3. 有没有办法找到 k 值的良好近似值?我知道这在很大程度上取决于用例并且每个问题都不同。但是,如果我从每个邻居处进行简单投票,我应该将 k 的值设置为多少?我目前正在尝试各种值,例如 2、3、10 等。

我进行了研究并找到了这些链接,但这些链接并不是特别有用 -
a) Metric for nearest neighbor ,它说找出你自己的距离测量相当于“核化”,但从中没有多大意义。
b) Distance independent approximation of kNN谈论 R 树、M 树等,我认为这些不适用于我的情况。
c) Finding nearest neighbors using Jaccard coeff

如果您需要更多信息,请告诉我。

最佳答案

  1. 由于数据不平衡,您应该对相同数量的好/坏进行采样(丢失大量“坏”记录),或者使用可以解释这一点的算法。我认为 RapidMiner 中有一个 SVM 实现可以做到这一点。

  2. 您应该使用交叉验证来避免过度拟合。您可能使用术语 overfitting但这里不正确。

  3. 您应该标准化距离,使它们具有相同的权重。我所说的归一化是指力在 0 到 1 之间。要归一化某些内容,请减去最小值并除以范围。

  4. 找到最佳 K 值的方法是尝试所有可能的 K 值(同时交叉验证)并选择准确度最高的 K 值。如果 K 值是“好的”,那么您可以使用遗传算法或类似算法来找到它。或者,您可以尝试以 5 或 10 为步长的 K,看看哪个 K 会带来良好的准确度(假设为 55),然后尝试接近该“好值”的 1 步(即 50,51,52...),但这可能不是最佳的。

关于machine-learning - k 最近邻的分类属性的距离度量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27168756/

相关文章:

algorithm - ID3 执行什么样的搜索?

numpy - Spark 随机森林 - 无法将 float 转换为 int 错误

image-processing - OpenCV - 用于不同角度的长物体的 Haar 分类器

python-2.7 - 为什么 scikit-learn 的最近邻似乎没有返回正确的余弦相似距离?

python - 径向基函数库

python - 如何获得训练集和验证集的不同指标?

tensorflow - Tf.Print() 不打印张量的形状?

machine-learning - LogisticRegressionCV 错误地预测标签

algorithm - 使用什么数据结构来进行快速变化的最近邻搜索?

algorithm - 仅使用 knnsearch (MATLAB) 使用 knn 分类的简单方法?