对于我的类项目,我正在研究 Kaggle competition - Don't get kicked
该项目是将测试数据分类为汽车的好买/坏买。有 34 个特征,数据高度倾斜。我做出了以下选择:
- 由于数据高度偏差,在 73,000 个实例中,有 64,000 个实例不值得购买,只有 9,000 个实例值得购买。由于构建决策树会过度拟合数据,因此我选择使用 kNN - K 最近邻。
尝试完 kNN 后,我计划 try out Perceptron and SVM techniques ,如果 kNN 没有产生好的结果。我对过度拟合的理解正确吗? - 由于某些特征是数字的,因此我可以直接使用欧几里得距离作为度量,但还有其他属性是分类的。为了恰本地使用这些功能,我需要提出自己的距离测量方法。我读到Hamming distance ,但我仍然不清楚如何合并 2 个距离度量,以便每个特征获得相同的权重。
- 有没有办法找到 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
如果您需要更多信息,请告诉我。
最佳答案
由于数据不平衡,您应该对相同数量的好/坏进行采样(丢失大量“坏”记录),或者使用可以解释这一点的算法。我认为 RapidMiner 中有一个 SVM 实现可以做到这一点。
您应该使用交叉验证来避免过度拟合。您可能使用术语 overfitting但这里不正确。
您应该标准化距离,使它们具有相同的权重。我所说的归一化是指力在 0 到 1 之间。要归一化某些内容,请减去最小值并除以范围。
找到最佳 K 值的方法是尝试所有可能的 K 值(同时交叉验证)并选择准确度最高的 K 值。如果 K 值是“好的”,那么您可以使用遗传算法或类似算法来找到它。或者,您可以尝试以 5 或 10 为步长的 K,看看哪个 K 会带来良好的准确度(假设为 55),然后尝试接近该“好值”的 1 步(即 50,51,52...),但这可能不是最佳的。
关于machine-learning - k 最近邻的分类属性的距离度量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27168756/