X和Y形状不兼容

2 投票
1 回答
8089 浏览
提问于 2025-04-18 14:32

我在尝试用一个一维特征向量来训练一个分类器,这个特征向量有1997个训练样本,还有一个同样大小的样本包含我的y值:

clf = svm.SVC()

j = 0

a = 0

listX = []

listY = []

while a <= 1996:
    ath_X = "".join(linesplit[a])
    listX = listX + [int(ath_X)]
    a+=1

while j <= 1996:
    jth_Y = "".join(linesplit1[j])
    listY = listY + [((int(jth_Y))-1)]
    j+=1

X = np.array(listX)

y = np.array(listY)

print("%s %s %s %s" % ('Dimension of X: ', len(X), 'Dimension of y: ', len(y)))

print("%s %s" % (X.shape[0], y.shape[0]))

print(X[1996])

print(y[1996])

clf.fit(X, y)

ficheiro1.close()

ficheiro.close()

print("We're done")

---> 这是打印出来的内容:

X的维度:1997 y的维度:1997

1997 1997

987654321

0

错误追踪(最近的调用在最后):

文件 "C:/Python27/qqer.py",第52行,

clf.fit(X, y)

文件 "C:\Python27\lib\site-packages\sklearn\svm\base.py",第166行,

(X.shape[0], y.shape[0]))

值错误:X和y的形状不兼容。

X有1个样本,但y有1997个。

---> 如果我打印出来的X和y的形状是一样的,为什么还会出现这样的错误呢?大家有什么想法吗?

1 个回答

4

在使用 SVC.fit 这个函数时,X 的形状必须是 (n_samples, n_features)。这里的 n_samples 是样本的数量,n_features 是每个样本的特征数量。如果你用的是一维数组,它会被当作一个单独的样本来处理,这样在对单个样本进行预测时会比较方便。所以,你需要把你的 X 改成 (n_samples, 1) 的形状。

撰写回答