Как переопределить TSNE Склеарна для использования в функции конвейера? - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь создать пользовательскую функцию для TSNE, чтобы ее можно было использовать в функции Sklearn make_pipeline.

Обычно для PCA я делал бы следующее:

make_pipeline(PCA(),
              LinearRegression())

Однако, когда я попробовал это:

make_pipeline(TSNE(),
              LinearRegression())

, я получил бы сообщение о том, что у него нет метода transform (), и он не может использовать метод fit_transform ().Итак, теперь я пытаюсь создать собственный метод transform (), используя это:

class TSNE_wrapper(TSNE):
  def transform(X):
    return TSNE().fit_transform(X)

Но я получаю эту ошибку:

transform() takes 1 positional argument but 2 were given

1 Ответ

0 голосов
/ 19 января 2019

вы правы насчет исправления, однако вам не следует это делать!

PCA

PCA создает встраивание, находя ось, максимизирующую дисперсию: учитывая обучающий набор, вы находите направления (линейная комбинация осей (x, y, z и т. д.)), где данные сильно различаются.Результатом подобранного PCA являются k направлений (k линейная комбинация оси) (это атрибут .components в sklearn).Затем вы можете преобразовать свои тестовые данные, применяя линейную комбинацию к контрольным точкам.

TSNE

TSNE, с другой стороны, создает низкоразмерное вложение, которое пытается соблюдать (на определенном уровне) расстояние между точками в реальных измерениях.TSNE не смотрит на точки, учитывая их положение в пространстве большого измерения, он просто смотрит на расстояние между этой точкой и ее соседями.И постарайтесь соблюдать эти отношения в пространстве с низким уровнем яркости.
Вот почему у Sklearn нет функции преобразования для этого класса, вы не можете преобразовать данные с помощью TSNE: функция преобразования TSNE должна сначала соответствовать данным.

Вернуться к вашему вопросу

Если вы используете свой конвейер с обучением/ test split TSNE-объект будет переобучен во время теста с использованием данных теста!И нет НИКАКИХ причин, по которым вложение выглядело бы так же, как и в случае с данными обучения (опять же, поскольку вложение зависит от точек, заданных во время обучения).Производительность вашей модели ML должна быть плохой!

Если вы действительно хотите использовать TSNE, а затем машинное обучение, вам нужно преобразовать весь набор данных и тестировать: но помните, что ваша функция машинного обучения будет бесполезной, поскольку вы пропустили тестовые данные!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...