【问题标题】:SVM bad input shapeSVM 错误的输入形状
【发布时间】:2021-04-08 06:32:58
【问题描述】:

我创建了一个数据集,然后将数据拆分为训练集和测试集。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.20)

当我尝试使用以下代码实现 SVM 分类器时:

from sklearn.svm import SVC
svc_classifier = SVC(kernel='rbf')
svc_classifier.fit(X_train, y_train)

X_train.shape 和 y_train.shape 都是 (160,2)。 当我运行最后一部分时,我得到 ValueError: bad input shape (160, 2) 错误。我知道我的训练和测试样本的大小必须相同。但我想知道是否有解决这个问题的方法。谢谢!

【问题讨论】:

  • 您正在尝试使用分类器来预测连续目标。这不可能。也许您可能对形状为 (160,1) 或 (160,) 且带有整数的 Y 感兴趣,比如说三个值 0,1,2
  • @GaussianPrior,在这种情况下你有什么建议?
  • 我看到这是您刚刚发布的问题的延续。该 coe 的名称为 XY,但它们显然不代表训练数据和标签,因为它们都是您的训练数据。需要单独创建标签数组Y

标签: python machine-learning svm svc


【解决方案1】:

这是你想要的代码 -

import numpy as np
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split
from sklearn.svm import SVC

std = [[0.5, 0], [0, 0.5]]
X1 = np.vstack((
    np.random.multivariate_normal([2, -2], std, size=200),
    np.random.multivariate_normal([-2, 2], std, size=200)
))
y1 = np.zeros(X1.shape[0])

X2 = np.vstack((
    np.random.multivariate_normal([2, 2], std, size=200),
    np.random.multivariate_normal([-2, -2], std, size=200)
))
y2 = np.ones(X2.shape[0])

X = np.vstack((X1, X2))
y = np.hstack((y1, y2))

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20)
svc_classifier = SVC(kernel='rbf', gamma='auto')
svc_classifier.fit(X_train, y_train)

您用于创建数据的原始代码只是以 Y 作为名称。它不应该代表标签。您需要单独创建标签。

【讨论】:

  • 我只是在尝试您在@Ananda 评论中提供的解决方案,并且效果很好,也感谢您分享代码!
  • 你认为我如何仍然可以绘制数据集以用两种不同的颜色对其进行可视化? @阿南达
  • 您需要分别绘制X1X2。否则您需要根据标签Ys 将它们分开。
猜你喜欢
  • 2020-06-12
  • 1970-01-01
  • 2014-02-17
  • 2015-08-12
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 2018-08-10
  • 2018-07-31
相关资源
最近更新 更多