【问题标题】:Expected 2D Array,got 1D array instead.Where's the mistake?预期 2D 数组,得到 1D 数组。错在哪里?
【发布时间】:2020-11-02 02:21:15
【问题描述】:

我开始学习 SVM 和 PCA。我尝试在 Sci-Kit Learn 'load_digits' 数据集上应用 SVM。

当我将 .fit 方法应用于 SVC 时,出现错误:

"预期的二维数组,得到一维数组: 数组=[ 1.9142151 0.58897807 1.30203491 ... 1.02259477 1.07605691 -1.25769703]。 如果您的数据具有单一特征,请使用 array.reshape(-1, 1) 重塑您的数据

如果包含单个样本,则为 array.reshape(1, -1)。"

这是我写的代码:**

from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.preprocessing import scale
X_digits, y_digits = load_digits(return_X_y=True)
data = scale(X_digits)
pca=PCA(n_components=10).fit_transform(data)
reduced_data = PCA(n_components=2).fit_transform(data)
from sklearn.svm import SVC
clf = SVC(kernel='rbf', C=1E6)
X=[reduced_data[:,0]
y=reduced_data[:,1]
clf.fit(X, y)

有人可以帮我吗?提前谢谢你。

【问题讨论】:

    标签: python scikit-learn svm pca


    【解决方案1】:

    您的错误是由于 clf.fit() 要求数组 X 为 2 维(当前为 1 维),并且通过使用 X.reshape(-1, 1)X 变为 (N,1) (2D -如我们所愿)数组,而不是(N,) (1D),其中 N 是数据集中的样本数。但是,我也认为您对reduced_data 的解释可能不正确(根据我对sklearn 的有限经验):

    • 您拥有的reduced_data 数组包含两个主要组件(数据集中两个最重要的特征,n_components=2),您应该将其用作新的“数据”(@ 987654331@).

    • 相反,您将reduced_data 的第一列作为样本X,将第二列作为目标值y。据我了解,更好的方法是制作X = reduced_data,因为样本数据应该包含两个PCA 特征,而制作y = y_digits,因为PCA 没有改变标签(目标)。

    (我还注意到您定义了pca = PCA(n_components=10).fit_transform(data),但没有继续使用它,因此我已将其从答案中的代码中删除)。

    结果,你会得到这样的结果:

    from sklearn.datasets import load_digits
    from sklearn.decomposition import PCA
    from sklearn.preprocessing import scale
    from sklearn.svm import SVC
    
    X_digits, y_digits = load_digits(return_X_y=True)
    data = scale(X_digits)
    # pca=PCA(n_components=10).fit_transform(data)
    reduced_data = PCA(n_components=2).fit_transform(data)
    
    clf = SVC(kernel='rbf', C=1e6)
    clf.fit(reduced_data, y_digits)
    

    我希望这会有所帮助!

    【讨论】:

    • 非常感谢!我坚持了好几个小时。
    猜你喜欢
    • 2018-09-16
    • 2020-12-18
    • 2021-05-14
    • 2021-12-28
    • 2018-12-11
    • 1970-01-01
    • 2019-06-06
    • 2021-12-29
    相关资源
    最近更新 更多