【发布时间】:2016-10-14 08:41:33
【问题描述】:
我正在尝试使用 SKLearn 来运行 SVM 模型。我现在只是用一些示例数据尝试一下。这是数据和代码:
import numpy as np
from sklearn import svm
import random as random
A = np.array([[random.randint(0, 20) for i in range(2)] for i in range(10)])
lab = [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
clf = svm.SVC(kernel='linear', C=1.0)
clf.fit(A, lab)
仅供参考,当我跑步时
import sklearn
sklearn.__version__
它输出 0.17。
现在,当我运行 print(clf.predict([1, 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)
它确实给了我一个预测,这很棒。但是,出于几个原因,我觉得这很奇怪。
我没有一维数组。如果你打印 A,你会得到
array([[ 9, 12],
[ 2, 16],
[14, 14],
[ 4, 2],
[ 8, 4],
[12, 3],
[ 0, 0],
[ 3, 13],
[15, 17],
[15, 16]])
在我看来是二维的。但是好吧,让我们说我所拥有的实际上是一个一维数组。按照错误提示,让我们尝试使用reshape 更改它。
与上面相同的代码,但现在我们有了
A = np.array([[random.randint(0, 20) for i in range(2)] for i in range(10)]).reshape(-1,1)
但是这会输出一个长度为 20 的数组,这没有任何意义,也不是我想要的。我也用reshape(1, -1) 尝试过,但这给了我一个包含 20 个项目的单个观察/列表。
如何在 numpy 数组中重塑我的数据,以免收到此警告?
我查看了关于 SO 的两个答案,但都没有为我工作。 Question 1 和 Question 2。似乎 Q1 实际上是一维数据,并使用 reshape 解决,我尝试过但失败了。 Q2 有一个关于如何跟踪警告和错误的答案,这不是我想要的。另一个答案是一维数组的实例。
【问题讨论】:
标签: python scikit-learn svm