Я читал, что, поскольку LLE-манифольд намного медленнее, чем PCA, целесообразно использовать PCA, а затем применять LLE, чтобы уменьшить больше измерений.
Я хочу уменьшить размеры цифр из набора данных mnist (этоначать с 28X28).Это мой код:
import matplotlib.pyplot as plt
import matplotlib as mpl
def showdigit(digit):
plt.imshow(digit, cmap = mpl.cm.binary, interpolation="nearest")
plt.axis("off")
some_digit = X[10000]
some_digit = some_digit.reshape(28, 28)
showdigit(some_digit)
plt.show()
(Это показывает изображение оригинальной цифры.)
#PCA
from sklearn.decomposition import PCA
pca = PCA(n_components=0.95)
X_reduced = pca.fit_transform(some_digit)
showdigit(X_reduced)
Я получаю (26,8) изображение X_reduced.
Теперь я хочу применить коллектор LLE для вывода PCA:
#Manifold
from sklearn.manifold import LocallyLinearEmbedding
lle = LocallyLinearEmbedding(n_components=20, n_neighbors=10)
X_redu = lle.fit_transform(X_reduced)
showdigit(X_redu)
Я получаю ошибку: "ValueError: выходное измерение должно быть меньше или равно входному измерению" .
И если, например, я изменяю n_components = 0,9, я получаю "ValueError: не удалось создать намерение (кэш | скрыть) | необязательный массив - должны быть определены размеры, но получено (28,0,) "
Подскажите, в чем здесь проблема?
Ps.Это первая ячейка кода (взято из hanson-ml ):
import numpy as np
import os
def sort_by_target(mnist):
reorder_train = np.array(sorted([(target, i) for i, target in enumerate(mnist.target[:60000])]))[:, 1]
reorder_test = np.array(sorted([(target, i) for i, target in enumerate(mnist.target[60000:])]))[:, 1]
mnist.data[:60000] = mnist.data[reorder_train]
mnist.target[:60000] = mnist.target[reorder_train]
mnist.data[60000:] = mnist.data[reorder_test + 60000]
mnist.target[60000:] = mnist.target[reorder_test + 60000]
try:
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1, cache=True)
mnist.target = mnist.target.astype(np.int8) # fetch_openml() returns targets as strings
sort_by_target(mnist) # fetch_openml() returns an unsorted dataset
except ImportError:
from sklearn.datasets import fetch_mldata
mnist = fetch_mldata('MNIST original')
mnist["data"], mnist["target"]
X, y = mnist["data"], mnist["target"]