scikits-learn проблема уменьшения размера PCA

У меня проблема с уменьшением размера с использованием scikit-learn и PCA.

У меня есть две матрицы numpy, одна имеет размер (1050 4096), а другая имеет размер (50 4096). Я попытался уменьшить размеры обоих, чтобы получить (1050, 399) и (50 399), но после выполнения pca я получил (1050 399) и (50,50) матрицы. Одна матрица предназначена для обучения knn, а другая — для проверки knn. Что не так с моим кодом ниже?

pca = decomposition.PCA()
pca.fit(train)
pca.n_components = 399
train_reduced = pca.fit_transform(train)
pca.n_components = 399
pca.fit(test)
test_reduced = pca.fit_transform(test)

person mad    schedule 15.03.2013    source источник


Ответы (1)


Позвонить fit_transform() в поезд, transform() на тест:

from sklearn import decomposition

train = np.random.rand(1050, 4096)
test = np.random.rand(50, 4096)

pca = decomposition.PCA()
pca.n_components = 399
train_reduced = pca.fit_transform(train)
test_reduced = pca.transform(test)
person HYRY    schedule 15.03.2013
comment
Спасибо HYRY, это работает! Но если у меня есть третья матрица для уменьшения размерности (забудьте об обучении и тестировании), какую мне следует использовать? transform() или fit_transform()? - person mad; 15.03.2013
comment
Вы должны использовать fit_transform() для независимых данных. В случае набора (поезд, тест) это один и тот же набор данных, поэтому вы подходите к данным поезда и преобразуете как данные поезда, так и тестовые данные. - person HYRY; 15.03.2013
comment
Вместо того, чтобы дважды благодарить @mad, примите ответ! Вы задали хороший вопрос, я проголосовал, вы получили хороший ответ, вы его принимаете! Просто как тот. - person gsamaras; 06.02.2016