我正在研究一个涉及库存(即实体零售库存)的机器学习问题,但是通过清理(异常值删除)过程,一些项目(通过相应的交易)将被删除。因此,我想到了使用 KNN 将相似的项目分组到各自的类别中。
有1245项
每个项目的信息是
- 平均加权价格
- 总销量
- 实现的总收入
- 每笔交易的最低销售量
- 每笔交易的最大销售量
- 最低售价
- 最高售价
- 唯一交易数
我是否认为 KNN 是一个不错的选择 - 如果是这样,我如何决定集群的数量?
我正在研究一个涉及库存(即实体零售库存)的机器学习问题,但是通过清理(异常值删除)过程,一些项目(通过相应的交易)将被删除。因此,我想到了使用 KNN 将相似的项目分组到各自的类别中。
有1245项
每个项目的信息是
我是否认为 KNN 是一个不错的选择 - 如果是这样,我如何决定集群的数量?
因此,您的问题是关于 KNN 根据您上面列出的功能对项目进行分类的有效性。
您可能已经知道,KNN 是一种无监督聚类算法,它创建 K 个聚类,且聚类内变化最小。当您知道需要多少组 K 时,这种方法特别有用。此外,如果您没有所有示例的类别标签,它会特别方便。
同时,此方法不是确定性的,这意味着每次执行后分组确实会有所不同。
从这些信息中,您可能会更好地了解 KNN 是否对这项任务有用。
训练:您可以使用距离度量来计算所有观察值之间的距离,沿着观察到的变量的维度(平均重量、价格、总数量、销售量等)。对于每个观测值或行或样本i,与该观测值距离最小的点是最近邻。距离第二小的点是第二近邻,以此类推。
预测:您可以通过计算新数据到上述训练数据中每个点的距离来找到最近的邻居。然后分配一个预测的标签,通常是通过在测试数据点的k个最近邻居中获取最常见的标签。因此 k-NN 分类:
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(algorithm='auto',
metric='minkowski', # pick a distance metric
metric_params=None,
n_neighbors=5, # take the majority label from the 5-nearest neighbors
p=2, # a hyperparameter required for 'minkowski' distance metric
weights='uniform')
knn.fit(train_data, train_labels)
# Find the predicted class of the test data:
knn.predict(testset_data)