Python 应为2D数组,但改为1D数组。其中';错在哪里?

Python 应为2D数组,但改为1D数组。其中';错在哪里?,python,scikit-learn,svm,pca,Python,Scikit Learn,Svm,Pca,我开始学习SVM和PCA。我尝试在Sci工具包学习“加载数字”数据集上应用SVM。 当我将.fit方法应用于SVC时,我得到一个错误: “应为2D数组,改为1D数组: 数组=[1.9142151 0.58897807 1.30203491…1.02259477 1.07605691 -1.25769703]. 使用数组重塑数据。如果数据只有一个特征,则重塑(-1,1) 或数组。如果包含单个样本,则重塑(1,-1)。” 以下是我编写的代码:** from sklearn.datasets impo

我开始学习SVM和PCA。我尝试在Sci工具包学习“加载数字”数据集上应用SVM。

当我将.fit方法应用于SVC时,我得到一个错误:

“应为2D数组,改为1D数组: 数组=[1.9142151 0.58897807 1.30203491…1.02259477 1.07605691 -1.25769703]. 使用数组重塑数据。如果数据只有一个特征,则重塑(-1,1)

或数组。如果包含单个样本,则重塑(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)

有人能帮我吗?提前谢谢。

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

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

  • 相反,您将
    reduced_data
    的第一列作为样本
    X
    ,第二列作为目标值
    y
    。据我所知,更好的方法是制作
    X=reduced_数据
    ,因为样本数据应该包含两个PCA特征,并且制作
    y=y_数字
    ,因为PCA不会改变标签(目标)

(我还注意到您定义了
pca=pca(n\u components=10)。fit\u 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)
我希望这有帮助

非常感谢你!我被这件事困扰了好几个小时。