我跟随this tutorial进行ML预测:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn import svm
x = [1, 5, 1.5, 8, 1, 9]
y = [2, 8, 1.8, 8, 0.6, 11]
plt.scatter(x,y)
plt.show()
X = np.array([[1,2],
[5,8],
[1.5,1.8],
[8,8],
[1,0.6],
[9,11]])
y = [0,1,0,1,0,1]
X.reshape(1, -1)
clf = svm.SVC(kernel='linear', C = 1.0)
clf.fit(X,y)
print(clf.predict([0.58,0.76]))
我使用的是Python 3.6,我得到了错误"预期的2D数组,得到了1D数组:" 我认为该脚本适用于旧版本,但我不知道如何将其转换为3.6版本。
已尝试使用:
X.reshape(1, -1)
答案 0 :(得分:82)
您应该为predict
方法提供相同的2D数组,但要使用一个您想要处理的值(或更多)。简而言之,您可以直接替换
[0.58,0.76]
使用
[[0.58,0.76]]
它应该可行
答案 1 :(得分:12)
当您对阵列[0.58,0.76]
运行预测时,会出现问题。在致电predict()
之前重新整理问题来解决问题:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn import svm
x = [1, 5, 1.5, 8, 1, 9]
y = [2, 8, 1.8, 8, 0.6, 11]
plt.scatter(x,y)
plt.show()
X = np.array([[1,2],
[5,8],
[1.5,1.8],
[8,8],
[1,0.6],
[9,11]])
y = [0,1,0,1,0,1]
clf = svm.SVC(kernel='linear', C = 1.0)
clf.fit(X,y)
test = np.array([0.58, 0.76])
print test # Produces: [ 0.58 0.76]
print test.shape # Produces: (2,) meaning 2 rows, 1 col
test = test.reshape(1, -1)
print test # Produces: [[ 0.58 0.76]]
print test.shape # Produces (1, 2) meaning 1 row, 2 cols
print(clf.predict(test)) # Produces [0], as expected
答案 2 :(得分:2)
I faced the same issue except that the data type of the instance I wanted to predict was a panda.Series
object.
Well I just needed to predict one input instance. I took it from a slice of my data.
df = pd.DataFrame(list(BiogasPlant.objects.all()))
test = df.iloc[-1:] # sliced it here
In this case, you'll need to convert it into a 1-D array and then reshape
it.
test2d = test.values.reshape(1,-1)
From the docs, values
will convert Series into a numpy array.
答案 3 :(得分:1)
我遇到了同样的问题。您只需要使其成为一个数组,而且必须放置双方括号使其成为2D数组的单个元素,因为第一个括号将初始化该数组,第二个使其成为该数组的元素。
因此只需将最后一条语句替换为:
print(clf.predict(np.array[[0.58,0.76]]))
答案 4 :(得分:1)
我之前也遇到过同样的问题,但是我已经找到了解决办法,
您可以尝试reg.predict([[3300]])
。
用于允许标量值的API,但是现在您需要提供2D数组。
答案 5 :(得分:0)
具有一个功能,我的数据框列表转换为系列。我不得不将其转换回数据框列表,然后它才能正常工作。
if type(X) is Series:
X = X.to_frame()
答案 6 :(得分:0)
我使用以下方法。
reg = linear_model.LinearRegression()
reg.fit(df[['year']],df.income)
reg.predict([[2136]])
答案 7 :(得分:0)
只需在双括号之间插入参数:
regressor.predict([[values]])
对我有用的
答案 8 :(得分:0)
只需用两个方括号将 numpy 对象括起来,反之亦然。
例如:
如果最初您的 x = [8,9,12,7,5]
将其更改为 x = [ [8,9,12,7,5] ]
。
那应该可以解决尺寸问题
答案 9 :(得分:-1)
独立变量和从属变量的X和Y矩阵分别来自int64类型的DataFrame,以便它从1D数组转换为2D数组。 即X = pd.DataFrame(X)和Y = pd.dataFrame(Y)其中pd是python中的pandas类。因此,特征缩放反过来不会导致任何错误!