sklearn KNeighborsClassifier“值错误:找到维数为4的数组。估计值应<=2。”

2024-06-18 20:32:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用sklearn-kneighborssegorier训练一个关于葡萄酒质量数据的简单模型。这是我的代码:

from sklearn.neighbors import KNeighborsClassifier
import pandas as pd
import numpy as np

dataframe = pd.read_csv("winequality-white.csv")
dataframe = dataframe.drop(["fixed acidity", "pH", "sulphates"], axis=1)

test = dataframe[110:128]
train = dataframe[15:40]

Y = train["quality"]
X = train.drop(["quality"], axis=1)


#print(X)
#print(Y)

knn = KNeighborsClassifier()
knn.fit(X, Y)
testvals = np.array(test.loc[110, :])
testvals = testvals.reshape(1, -1)
print(knn.predict([[testvals]]))

我得到错误“ValueError:Found array with dim 4。估计值应为<;=2。”

我很确定这和我的阵型有关,我试着重塑它,但是没有成功。我该怎么办?在


Tags: csvtestimportdataframeasnptrainsklearn
1条回答
网友
1楼 · 发布于 2024-06-18 20:32:23

考虑以下(可复制)示例设置:

>>> import pandas as pd
>>> import numpy as np
>>> test = pd.DataFrame.from_records(data=np.random.rand(120, 4))
>>> testvals = np.array(test.loc[110, :])

将向量传递给predict函数时,重塑向量的方法是创建一个比预期的2维多的数组(即多维数组)。以下是要传递给predict函数的整形输出:

^{pr2}$

我们可以证明这会产生一个4-d阵列:

^{3}$

Sklearn需要一个二维数组。以下是如何修复它。。。如果要预测整个矩阵,只需运行:

knn.predict(test)

如果您只想预测一个样本,您可以:

knn.predict([test.loc[110].tolist()])

顺便说一句,值得一提的是,您还没有从test中弹出目标,因此功能的数量将不匹配,直到您这样做:

y_test = test.pop('quality')

另请参见this question

相关问题 更多 >