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

时间:2014-11-27 10:48:13

标签: 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,但我仍然不清楚如何合并两个距离测量,以便每个特征得到相同的权重。
  3. 有没有办法找到k值的良好近似值?我知道这很大程度上取决于用例,并且每个问题都有所不同。但是,如果我从每个邻居那里进行简单的投票,我应该设置多少k的值?我目前正在尝试各种值,例如2,3,10等。
  4. 我研究过并找到了这些链接,但这些并没有特别的帮助 -
    a)Metric for nearest neighbor,它表示找出自己的距离测量值相当于“核化”,但从中得不到多少意义。
    b)Distance independent approximation of kNN谈论R树,M树等,我认为这些不适用于我的情况 c)Finding nearest neighbors using Jaccard coeff

    如果您需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:1)

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

  2. 您应该使用交叉验证来避免过度拟合。您可能在此处错误地使用了术语overfitting

  3. 您应该将距离标准化,使它们具有相同的重量。通过标准化,我的意思是力在0和1之间。为了标准化,减去最小值并除以范围。

  4. 找到K的最佳值的方法是尝试所有可能的K值(交叉验证时)并选择具有最高精度的K值。如果K的“好”值很好,那么您可以使用遗传算法或类似物来找到它。或者你可以用5或10的步骤来尝试K,看看哪个K导致良好的准确性(比如它是55),然后在“好的价值”附近尝试1的步骤(即50,51,52 ......)但是这个可能不是最佳的。

答案 1 :(得分:0)

我正在看同样的问题。

关于k的选择,建议使用奇数值以避免获得“平局投票”。

我希望将来能够扩大这个答案。