预期的二维数组,得到的是一维数组 instead.Where 的错误?
Expected 2D Array,got 1D array instead.Where's the mistake?
我开始学习 SVM,PCA.I 尝试在 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)
有人可以帮我吗?先谢谢了。
您的错误是由于 clf.fit()
要求数组 X
是 2 维的(目前它是 1 维的),并且通过使用 X.reshape(-1, 1)
、X
变成了 (N,1)
(2D - 正如我们所希望的那样)数组,而不是 (N,)
(1D),其中 N 是数据集中的样本数。但是,我也认为您对 reduced_data
的解释可能不正确(根据我对 sklearn
的有限经验):
您拥有的reduced_data
数组包含两个主成分(数据集中两个最重要的特征,n_components=2
) ,您应该将其用作新的“数据”(X
)。
相反,您将 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)
希望对您有所帮助!
我开始学习 SVM,PCA.I 尝试在 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)
有人可以帮我吗?先谢谢了。
您的错误是由于 clf.fit()
要求数组 X
是 2 维的(目前它是 1 维的),并且通过使用 X.reshape(-1, 1)
、X
变成了 (N,1)
(2D - 正如我们所希望的那样)数组,而不是 (N,)
(1D),其中 N 是数据集中的样本数。但是,我也认为您对 reduced_data
的解释可能不正确(根据我对 sklearn
的有限经验):
您拥有的
reduced_data
数组包含两个主成分(数据集中两个最重要的特征,n_components=2
) ,您应该将其用作新的“数据”(X
)。相反,您将
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)
希望对您有所帮助!