我正在尝试使用sklearn kneighborsclassifier对葡萄酒质量数据进行训练。这是我的代码:
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:找到的数组具有暗4。估计器预期<= 2。”
我相当确定它与数组的形状有关,并且我尝试过重塑它,但是没有运气。我该怎么办?
答案 0 :(得分:0)
请考虑以下(可重复的)示例设置:
>>> 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, :])
当您将向量传递给预测函数时,重整向量的方式是创建一个数组,该数组具有超过预期的2个暗角(即多维数组)。这是您要传递给预测函数的重塑输出:
>>> [[testvals.reshape((-1, 1))]]
[[array([[ 0.25174728],
[ 0.24603664],
[ 0.01781963],
[ 0.49317648]])]]
我们可以证明这会产生一个4-d数组:
>>> np.asarray([[testvals.reshape((-1, 1))]]).ndim
4
Sklearn需要一个二维数组。解决方法如下:如果要预测整个矩阵,请运行:
knn.predict(test)
如果您只想预测一个样本,则可以执行以下操作:
knn.predict([test.loc[110].tolist()])
顺便说一句,值得一提的是,您还没有从test
弹出目标,因此功能数量在您这样做之前是不匹配的:
y_test = test.pop('quality')
另请参阅this question