python - 如何使用 KNN 进行推荐
问题描述
我正在构建一个简单的图书推荐器,其中我只有某些图书信息(价格、标题、作者、流派、出版日期),根本没有用户信息(没有评级、没有人口统计)只有他们的购买历史。
所以我想只根据这个购买历史进行推荐,例如:用户 A 购买了 book1、book2 和 book3,用户 B 购买了 book1、book3 和 book4,如果我想获得用户 AI 的推荐,可以假设 book4 是不错,因为他们根据购买历史有着相似的兴趣。
我正在尝试用余弦相似度实现 KNN,但我真的不知道如何根据用户给出建议,我的意思是,我已经构建了矩阵并选择了参数,但我不知道如何使用结果给出给用户的推荐书籍列表。
这是我的矩阵的外观(简化):
product 63767 76863 84325 86217 86833 130365 537077 830166 997165 1023897
username
45michael 0.0 1.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0
7762hc 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
adrian12 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
alicia7 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0
angel8 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0
其中 1 表示用户是否购买了这本书,0 表示他/她没有。
这是我到目前为止所做的:
# Matrix with users as rows, products as columns and count as content
df_matrix = pd.pivot_table(order_df, values='count', index='username', columns='product')
# Replace all NaN contents with 0
df_matrix_dummy = df_matrix.fillna(0)
# Convert dataframe of books features to scipy sparse matrix
product_matrix = csr_matrix(df_matrix_dummy.values)
model_knn = NearestNeighbors(metric='cosine', algorithm='brute', n_neighbors=20, n_jobs=-1)
有人可以帮我一把或指点我一个好的教程吗?
解决方案
推荐阅读
- react-native - 如何在本机反应中检测视图外的点击?
- monetdb - MonetDB:来自 sys.rejects 的错误 rowid
- python - Python I2C LCD 驱动程序显示奇怪的字符
- mysql - 如何将条件从变量传递给 NestJS typeorm 存储库查找方法?
- python - 在这种情况下,我应该如何捕获多个类似的异常?
- asp.net - asp.net:为控件类创建句柄子句
- xml - XSD 具有单一名称和不同类型的多个元素
- github - 使用 Github Desktop,现在终端未检测到更改
- laravel - 函数 __construct() 的参数太少,在 La 中传递了 0
- cassandra - 为什么不应该运行 nodetool removenode?