sklearn KNeighborsClassifier "ValueError: Found array with dim 4. Estimator expected <= 2."
sklearn KNeighborsClassifier "ValueError: Found array with dim 4. Estimator expected <= 2."
我正在尝试使用 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: Found array with dim 4. Estimator expected <= 2."
我相当确定它与我的阵列形状有关,我试图重塑它,但没有成功。我该怎么办?
考虑以下(可重现的)示例设置:
>>> 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 个 dims 的数组(即多维数组)。这是您传递给预测函数的重塑输出:
>>> [[testvals.reshape((-1, 1))]]
[[array([[ 0.25174728],
[ 0.24603664],
[ 0.01781963],
[ 0.49317648]])]]
我们可以证明这会产生一个 4 维数组:
>>> np.asarray([[testvals.reshape((-1, 1))]]).ndim
4
Sklearn 需要一个二维数组。这是修复它的方法......如果你想预测整个矩阵,只需 运行:
knn.predict(test)
如果您只想预测一个样本,您可以这样做:
knn.predict([test.loc[110].tolist()])
顺便说一句,值得一提的是,您还没有从 test
中弹出目标,因此在您这样做之前,特征的数量不会匹配:
y_test = test.pop('quality')
另见
我正在尝试使用 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: Found array with dim 4. Estimator expected <= 2."
我相当确定它与我的阵列形状有关,我试图重塑它,但没有成功。我该怎么办?
考虑以下(可重现的)示例设置:
>>> 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 个 dims 的数组(即多维数组)。这是您传递给预测函数的重塑输出:
>>> [[testvals.reshape((-1, 1))]]
[[array([[ 0.25174728],
[ 0.24603664],
[ 0.01781963],
[ 0.49317648]])]]
我们可以证明这会产生一个 4 维数组:
>>> np.asarray([[testvals.reshape((-1, 1))]]).ndim
4
Sklearn 需要一个二维数组。这是修复它的方法......如果你想预测整个矩阵,只需 运行:
knn.predict(test)
如果您只想预测一个样本,您可以这样做:
knn.predict([test.loc[110].tolist()])
顺便说一句,值得一提的是,您还没有从 test
中弹出目标,因此在您这样做之前,特征的数量不会匹配:
y_test = test.pop('quality')
另见