我很难解决this question中描述的警告问题,不幸的是,按照建议的解决方法,我没有解决问题。
显然我正在向SVM提供一维数据.SVC预测并且我收到了弃用警告。我只是无法弄清楚我做错了什么,我希望有人可以帮我修复我的代码。我确定这是一个我错过的小修正。
我正在使用Python 2.7
我从数据帧data_df开始(为了清晰起见,这里的尺寸减少了但代码和结构都很准确):
Price/Sales Price/Book Profit Margin Operating Margin
0 2.80 6.01 29.56 11.97
1 2.43 4.98 25.56 6.20
2 1.61 3.24 4.86 5.38
3 1.52 3.04 4.86 5.38
4 3.31 4.26 6.38 3.58
我将数据帧更改为numpy数组:
X = data_df.values
给了我:
[[ 2.8, 6.01, 29.56, 11.97],
[ 2.43, 4.98, 25.56, 6.2 ],
[ 1.61, 3.24, 4.86, 5.38],
[ 1.52, 3.04, 4.86, 5.38],
[ 3.31, 4.26, 6.38, 3.58]]
然后我将数据居中并规范化:
X = preprocessing.scale(X)
给我:
[[ 0.67746872 1.5428404 1.39746257 1.90843628]
[ 0.13956437 0.61025495 1.03249454 -0.10540376]
[-1.05254797 -0.96518067 -0.85621499 -0.3915994 ]
[-1.18338957 -1.14626523 -0.85621499 -0.3915994 ]
[ 1.41890444 -0.04164945 -0.71752714 -1.01983373]]
我的系列是0和1:
[0, 0, 1, 0, 1]
实际数据集约为10,000次观测。我使用以下代码选择用于训练,测试和检查准确性的子集:
test_size = 500
clf = svm.SVC(kernel = "linear", C=1.0)
clf.fit(X[:-test_size],y[:-test_size])
correct_count = 0
for x in range(1, test_size+1):
if clf.predict(X[-x])[0] == y[-x]:
correct_count += 1
print("Accuracy: ", correct_count / test_size * 100.00)
我输入clf.predict
(X [-x],x = 1到test_size +1)的一系列因子会引发以下警告:
C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\sklearn\ut
ils\validation.py:386: DeprecationWarning: Passing 1d arrays as data is deprecat
ed in 0.17 and willraise ValueError in 0.19. Reshape your data either using X.re
shape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contain
s a single sample.
DeprecationWarning)
代码有效,我确实得到了预测,并且能够计算准确度,但我仍然在发出警告。
据我所知,从搜索和上面引用的其他问题我的数据是正确的形式。我错过了什么?
提前感谢您的帮助。
答案 0 :(得分:2)
您只需要执行警告消息所示的操作。您的变量X[-x]
是1D,但需要是2D。它是具有多个功能的单个示例,因此只需向其添加.reshape(1,-1)
并清除警告:
for x in range(1, test_size+1):
if clf.predict(X[-x].reshape(1,-1))[0] == y[-x]:
correct_count += 1
clf.predict
函数能够使用多个要素预测多个值。如果您传入一维数组,则不清楚您的意图是具有多个要素的单个值,还是具有单个要素的多个值。警告消息要求您自己形成2D数组以使区分明确。