使用多维特征(输入尺寸误差)使用scikit-learn KNN进行分类

时间:2015-05-25 03:16:49

标签: python machine-learning scikit-learn

我正在使用sklearn的最近邻居来解决分类问题。我的功能是形状的补丁(3600,2,5)。例如:

a = [[5,5,5,5,5], [5,5,5,5,5]]
b = [[5,5,5,5,5], [5,5,5,5,5]]

features = []

for i in xrange(len(a)):
    features.append([a[i], b[i]]) #I have 3600 of these in reality.

neigh = KNeighborsClassifier()

neigh.fit(train_features, target_class)

predictions = neigh.predict(test_features)

我收到错误:

  

ValueError:找到带有暗淡的数组3.预期< = 2

这是我使用neigh.fit的行。目标类是具有相应类的1维数组。 train_featurestest_features只是分成训练和测试数据的数据。

链接到同一错误:check_arrays() limiting array dimensions in scikit-learn?

这是否有解决方法?

2 个答案:

答案 0 :(得分:2)

听起来你想要使用本身就是多维的功能。我不确定这是否有效。考虑基于距离的度量(如KNN)可能出现的复杂性增加;多维特征需要距离指标,并且会涉及更多。

我首先尝试展平数组,以便每个示例都是n维向量,而不是数组。因此,如果当前方法中的features[0]由:

给出
[[5, 5, 5, 5, 5], [5, 5, 5, 5, 5]]

你可以改为:

[5, 5, 5, 5, 5, 5, 5, 5, 5, 5] 

您还可以考虑创建表示多维要素所承载信息的新要素。您可以使用平均值,最大值,最小值等。这是您的特定领域知识所在的位置。

答案 1 :(得分:0)

它不可能接缝。

但是,与使用自定义距离度量(使用metric参数)相比,您可以将要素展平为一维数组,该度量在计算距离之前会重新构建要素。当然,您也必须自己编写距离度量。但是我不认为这是个问题。