1D-массив отображается на 2D-график, а 3D-массив - на 2D-график - PullRequest
0 голосов
/ 13 июля 2020

Я применяю PCA и SVM к load_digits набору данных Sci-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 - это 1D, а matplotlib не может рисовать 1D

графики) и трехмерный график для второй строки, поскольку есть две входные переменные из reduced_data и одна переменная

output для y_digits? Я немного запутался в том, как использовать matplotlib и интерпретировать результаты

1 Ответ

0 голосов
/ 03 августа 2020

Я не эксперт, но я считаю, что массив y_digits находится в эквивалентной форме преобразования 1D-массива с reshape (-1,1), поэтому я считаю, что matplotlib интерпретирует ay вне положения значения в массив. Вот почему, когда вы вызываете 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...