You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

电影推荐系统转换pivot表为csr_matrix时出现dtype('O')类型错误如何解决

报错根因

csr_matrix仅支持数值类型的数组输入,你当前movies_user中存储的是genres字段的原始字符串值(如Action|Adventure),仅对空值填充0无法改变非空位置的字符串属性,整个DataFrame的数据类型为object,因此无法完成稀疏矩阵转换。

修正方案

你需要先对多标签类型的genres字段做独热编码,将字符串特征转换为0/1数值特征后,再生成稀疏矩阵。
修正后的可运行代码如下:

!pip install requests fuzzywuzzy pandas pyjstat numpy plotly matplotlib seaborn geopy google folium pandas googlemaps

import pandas as pd
import numpy as np
from scipy.sparse import csr_matrix
from sklearn.neighbors import NearestNeighbors
from fuzzywuzzy import process

df_movies = pd.read_csv('/content/movies.csv')
# 注意原代码这里的笔误:第二行读取的应该是ratings.csv,否则df_ratings和df_movies完全重复
df_ratings = pd.read_csv('/content/ratings.csv')

# 1. 处理genres字段,拆分多标签生成独热编码
df_movies['genres_list'] = df_movies['genres'].str.split('|')
genres_dummies = df_movies['genres'].str.get_dummies(sep='|')
# 合并电影基础信息和类型特征
df_movie_features = pd.concat([df_movies[['movieId', 'title']], genres_dummies], axis=1)

# 2. 生成稀疏矩阵
feature_cols = genres_dummies.columns.tolist()
mat_movies_genres = csr_matrix(df_movie_features[feature_cols].values)

# 3. 训练KNN模型
model_knn = NearestNeighbors(metric ='cosine',algorithm ='brute', n_neighbors=20)
model_knn.fit(mat_movies_genres)

如果你的业务逻辑确实需要按movieId做列转换,可以在生成独热编码后再调整pivot逻辑,确保参与矩阵转换的所有值都是数值类型即可。

内容的提问来源于stack exchange,提问作者tanvi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 14:15:04