使用多维特征(输入维度误差)的 scikit-learn KNN 分类

Classification with scikit-learn KNN using multi-dimensional features (input dimension error)

我正在使用 sklearn 的最近邻居来解决 class化问题。我的特征是形状 (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: Found array with dim 3. Expected <= 2

这是我使用neigh.fit的那一行。目标 class 是一个具有相应 classes 的一维数组。 train_featurestest_features 只是将数据拆分为训练数据和测试数据。

Link同样的错误:check_arrays() limiting array dimensions in scikit-learn?

有解决办法吗?

听起来您想使用本身就是多维的特征。我不确定这是否有效。考虑像 KNN 这样的基于距离的度量会增加复杂性;多维特征需要距离度量,并且会涉及更多。

我首先尝试展平数组,这样每个样本都是一个 n 维向量,而不是数组。因此,如果您当前方法中的 features[0] 为:

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

你可以选择:

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

您还可以考虑创建新的特征来表示多维特征所携带的信息。您可以使用均值、最大值、最小值等。这就是您的领域特定知识发挥作用的地方。

这是不可能的。

但是您可以将特征展平为一维数组,而不是使用自定义距离度量(使用 metric 参数),在计算距离之前重建您的特征。当然,您也必须自己编写距离度量。但我认为这不是问题。