как осталось внешнее объединение в sqlalchemy?

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


Фактически вы можете получать прогнозы для новых пользователей с использованием обученной модели (без обновления):

Чтобы получить прогнозы для пользователь в модели, вы используете его скрытое представление (вектор u размера f (количество факторов)), который умножается на матрицу скрытого фактора произведения (матрица, сделанная из скрытых представлений всех продуктов, куча векторов размера f ) и дает вам оценку для каждого продукта. Для новых пользователей проблема заключается в том, что у вас нет доступа к их скрытому представлению (у вас есть только полное представление размера M (количество разных продуктов), но то, что вы можете сделать, это использовать функцию подобия для вычисления аналогичного скрытого представление для этого нового пользователя путем умножения его на транспонирование матрицы продукта.

, т. е. если пользовательская латентная матрица равна u, а ваша скрытая матрица продукта v, для пользователя i в модели, вы получаете оценки по do: u_i * v для нового пользователя, у вас нет скрытого представления, поэтому возьмите полное представление full_u и сделайте: full_u * v ^ t * v Это приблизит скрытые факторы для новых пользователей и даст разумные рекомендации (если модель уже дает разумные рекомендации для существующих пользователей)

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

Примечание: MLLIB дает вам доступ к матрице u и v

1
задан Tavakoli 20 March 2019 в 09:52
поделиться

1 ответ

РЕДАКТИРОВАТЬ: Используйте and_ из sqlalchemy, чтобы объединить join условия

from sqlalchemy import and_

skills = db.session.query(Skill, User_Skill.skill_id).\
            outerjoin(User_Skill, and_(User_Skill.skill_id==Skill.id, 
                                       User_Skill.user_id==4)).\
            order_by(Skill.name).all()
<час>

Старый, неправильный ответ (разные результаты):

[ 118] Используйте .filter, чтобы ограничить ваши результаты. Измените ваш запрос на:

skills = db.session.query(Skill, User_Skill.skill_id).\
            outerjoin(User_Skill, User_Skill.skill_id==Skill.id).\
            filter(User_Skill.user_id==4).\
            order_by(Skill.name).all()
0
ответ дан Adrian Krupa 20 March 2019 в 09:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: