Scikit SVM误差:X.shape[1] = 1应等于2



我试图使用Scikit来训练2个特征,称为:x1和x2。这两个数组的形状都是(490,1)。为了将一个X参数传递给clf.fit(X,y),我使用np.concatenate来生成一个数组形状(490,2)。标签数组由1和0组成,形状为(490,)。代码如下所示:

x1 = int_x # previously defined array shape (490,1)
x2 = int_x2 # previously defined array shape (490,1)
y=np.ravel(close) # where close is composed of 1's and 0's shape (490,1)
X,y = np.concatenate((x1[:-1],x2[:-1]),axis=1), y[:-1] #train on all datapoints except last 
clf = SVC()
clf.fit(X,y)

显示如下错误:

X.shape[1] = 1 should be equal to 2, the number of features at training time

我不明白的是为什么这个消息出现,即使当我检查X的形状时,它确实是2而不是1。我最初只尝试了一个功能,clf.fit(X,y)工作得很好,所以我倾向于认为np.concatenate产生了一些不合适的东西。任何建议都很好。

没有int_xint_x2close的具体数值很难说。事实上,如果我尝试int_x, int_x2close随机构造为

import numpy as np
from sklearn.svm import SVC
int_x = np.random.normal(size=(490,1))
int_x2 = np.random.normal(size=(490,1))
close = np.random.randint(2, size=(490,))

符合你的规范,那么你的代码工作。因此,错误可能在于构造int_x、int_x2和close的方式。

如果您认为问题不存在,您能否分享一个具有int_x, int_x2close具体值的最小可重复示例?

我想我知道我的代码出了什么问题。

首先,我应该创建另一个变量,比如x,它定义了int_xint_x2的连接,它的形状为:(490,2),与close的形状相同。这在后来派上了用场。

其次,clf.fit(X,y)本身并没有错。然而,我没有正确地制定我的预测代码。例如,我说:clf.predict([close[-1]]),希望捕获二进制目标输出(0或1)。传递给该方法的参数是不正确的。它应该是clf.predict([x[-1]]),因为算法预测特征位置的标签,而不是相反。由于变量x现在与close形状相同,那么clf.predict([x[-1]])的结果应该产生close[-1]的预测结果。

相关内容

  • 没有找到相关文章

最新更新