首页 > 解决方案 > 1D 数组映射到 2D 图,3D 数组映射到 2D 图

问题描述

我正在将 PCA 和 SVM 应用于load_digitsSci-Kit Learn 的数据集。

这是一段代码:

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)
reduced_data = PCA(n_components=2).fit_transform(data)

clf = SVC(kernel='rbf', C=1e6)
clf.fit(reduced_data, y_digits)

在上面的代码中,reduced_data是一个 2D numpy 数组,而 y_digits 是一个 1D numpy 数组。

但是,当我编写以下代码时,我得到了两条线的 2D 图:

plt.plot(y_digits,'o') 
plt.plot(reduced_data,y_digits,'o')

我们不应该在第一行得到一个错误吗(y_digits一维也是如此,matplotlib 不能绘制一维

图),以及第二行的 3D 图,因为有两个输入变量来自reduced_data和一个

output变量为y_digits? 我对如何使用 matplotlib 和解释结果有点困惑

标签: pythonmatplotlibmultidimensional-arraypca

解决方案


我不是专家,但我相信 y_digits 数组是用 reshape(-1,1) 重塑一维数组的等效形式,因此我相信 matplotlib 将 y 解释为数组中值的位置。这就是为什么当您调用 y_digits.shape 时输出为 (1797,) 的原因,逗号表示值在列中。

如果你想要一个 3D 绘图,你应该特别称呼它:

 #### Code for 3D Graph
 y = y_digits
 x = reduced_data[:,0] ### first column of 2D array
 z = reduced_data[:,1]  ### second column of 2D array

 fig = plt.figure()
 ax = fig.add_subplot(111, projection='3d')
 ax.scatter(x,y,z)
 plt.show()

推荐阅读