Как реализовать t-SNE в модели? - PullRequest
0 голосов
/ 17 октября 2018

Я разделил свои данные на тренировку / тестирование.Когда я использую PCA, это прямо вперед.

from sklearn.decomposition import PCA
pca = PCA()
X_train_pca = pca.fit_transform(X_train)
X_test_pca = pca.transform(X_test)

Здесь я могу использовать X_train_pca и X_test_pca на следующем шаге и так далее.

Но когда я использую t-SNE

from sklearn.manifold import TSNE
X_train_tsne = TSNE(n_components=2, random_state=0).fit_transform(X_train)

Я не могу преобразовать набор тестов, чтобы я мог использовать данные t-SNE для следующего шага, например SVM.

Любая помощь?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Согласно документации TSNE является инструментом для визуализации данных большого размера.Чуть ниже в описании мы можем найти: Настоятельно рекомендуется использовать другой метод уменьшения размерности (например, PCA для плотных данных или TruncatedSVD для разреженных данных), чтобы уменьшить количество измерений .

Мое предложение будет использовать TSNE для визуализации и PCA или TruncatedSVD как часть модели машинного обучения.

0 голосов
/ 17 октября 2018

Я считаю, что то, что вы пытаетесь сделать, невозможно.

t-SNE создает проекцию, которая пытается сохранить попарные расстояния между образцами, которые вы подходите.Таким образом, вы не можете использовать модель t-SNE для прогнозирования проекции новых данных без повторной установки.

С другой стороны, я бы не дал вывод t-SNE в качестве входных данных для классификатора.Главным образом потому, что t-SNE очень нелинейный и несколько случайный, и вы можете получить очень разные выходы в зависимости от разных прогонов и разных значений недоумения.

См. это объяснение t-SNE.

Однако, если вы действительно собираетесь использовать t-SNE для этой цели, вам нужно будет подогнать модель t-SNE по всем данным, и после ее установки вы проведете поезд и проведете тестовый сплит.

from sklearn.manifold import TSNE

size_train = X_train.shape[0]
X = np.vstack((X_train,X_test))

X_tsne = TSNE(n_components=2, random_state=0).fit_transform( X ) 
X_train_tsne = X_tsne[0:size_train,:]
X_test_tsne  = X_tsne[size_train:,:]
...