Тренируй данные и получай вес для каждой функции - PullRequest
0 голосов
/ 06 июня 2018

Мы разрабатываем систему рекомендаций, и я понимаю, что проблема атрибутов может заключаться в самих векторах.

Таким образом, на данный момент у компании уже есть функция составления списка рекомендаций для пользователей, новес каждой функции, которую они использовали, определяется вручную.Поэтому мы решили обучить данные, а затем набрать вес с помощью подхода машинного обучения.А затем получите отзывы от пользователей, которые будут меткой, которая сделает следующий прогноз рекомендации.

  1. Есть ли какой-нибудь идеал, чтобы получить наилучший вес для каждой функции?такие как grid_search, Gradient descent?

  2. Я думаю, что мы не можем выровнять (sklearn: одна горячая кодировка или pandas: get_dummies) функцию, значение которой является вектором.потому что я хочу получить вес функции вместо subfeature_1, subfeaturevalue_2.Итак, flatten здесь не работает, я должен попытаться изменить расстояние, чтобы сделать это?но как объединить (изменить функцию расстояния и использовать grid_search) их вместе?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

https://github.com/Grasin98/recommender_live для основ системы рекомендаций. Надеюсь, вы найдете это уместным.

Вы можете посетить это.Да, существуют алгоритмы, такие как поиск по сетке, которые могут быть полезны для поиска матрицы наилучшего веса.

Поиск по сетке означает, что у вас есть набор моделей (которые отличаются друг от друга значениями своих параметров, которые лежат на сетке),Что вы делаете, так это то, что вы обучаете каждую модель и оцениваете ее с помощью перекрестной проверки.Затем вы выбираете тот, который работал лучше всего.

Чтобы привести конкретный пример, если вы используете машину опорных векторов, вы можете использовать разные значения для гаммы и C. Так, например, вы можете иметь сеткусо следующими значениями для (гамма, C): (1, 1), (0,1, 1), (1, 10), (0,1, 10).Это сетка, потому что она похожа на произведение [1, 0,1] для гаммы и [1, 10] для C. Сетка-поиск будет в основном обучать SVM для каждой из этих четырех пар значений (гамма, C), а затем оценивать егоиспользуя перекрестную проверку и выберите тот, который лучше всего.

Для градиентного спуска: первый шаг процедуры требует, чтобы порядок набора обучающих данных был рандомизирован.Это делается для того, чтобы смешать порядок обновления коэффициентов.Поскольку коэффициенты обновляются после каждого экземпляра обучения, обновления будут шумно перескакивать повсюду, как и соответствующая функция стоимости.Смешивая порядок обновления коэффициентов, он использует эту случайную прогулку и предотвращает ее отвлечение или застревание.Обучение может быть намного быстрее со стохастическим градиентным спуском для очень больших обучающих наборов данных, и часто вам требуется только небольшое количество проходов через набор данных, чтобы достичь хорошего или достаточно хорошего набора коэффициентов, например, от 1 до 10 проходов через набор данных.

Итак, по моему мнению, существует совершенный метод.Это в основном зависит от ряда вещей.Как вы, возможно, знаете, это то же самое для приложения алгоритма SVM, дерева решений, случайного леса, все дают вариации в зависимости от ситуации.

Что касается второго вопроса, я не уверен, что он пытаетсяпередавать.Надеюсь, это поможет.

0 голосов
/ 06 июня 2018

Получение весов функций может быть выполнено с использованием нейронных сетей (обратное распространение).Вы можете использовать один персептрон, если хотите избежать использования NN. Здесь (объяснение - здесь ) - это пример алгоритма с одним персептроном, применяемым для классификации текста, вам нужно будет адаптировать его под свои функции.

...