推荐系统:ValueError at /无法将字符串转换为float:
问题描述:
我正在尝试使用python和django构建电影推荐程序web应用程序。我试图使用一个命令来拍摄电影的描述,并创建一个信息检索系统,以允许用户找到输入相关单词的电影。然后将此tf-idf模型与初始推荐系统模型(基于CF项目和对数似然比)一起保存在Django缓存中。推荐系统:ValueError at /无法将字符串转换为float:
负载数据的命令是
python manage.py load_data --input=plots.csv --nmaxwords=30000 --umatrixfile=umatrix.csv
终端错误
File "/home/anthra/server_movierecsys/books_recsys_app/management/commands/load_data.py", line 80, in handle
matr[0]=newrow
ValueError: could not convert string to float: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
plot.csv截图
的代码如下:
个matr = np.empty([1,ndims])
titles = []
cnt=0
for m in xrange(nmovies):
moviedata = MovieData()
moviedata.title=tot_titles[m]
moviedata.description=tot_textplots[m]
moviedata.ndim= ndims
moviedata.array=json.dumps(vec_tfidf[m].toarray()[0].tolist())
moviedata.save()
newrow = moviedata.array
if cnt==0:
matr[0]=newrow
else:
matr = np.vstack([matr, newrow])
titles.append(moviedata.title)
cnt+=1
答
微小的变化给了很棒的结果。改变
moviedata.array=json.dumps(vec_tfidf[m].toarray()[0].tolist())"
到
moviedata.array=vec_tfidf[m].toarray()[0]
答
json.dumps产生一个字符串NEWROW变量。然后你试图将你序列化的变量写入一个numpy数组。
据我所知,numpy数组被限制在一个声明的类型(隐式,如果你没有明确提供),所以当你使用浮点数初始化数组时,代码尝试类型化你的字符串var newrow浮动值 - 这会失败,因为你没有传递一个代表数字的字符串,而是一个可迭代的数字。
感谢。任何想法如何解决问题 – Sumi
我不太确定为什么你要序列化那里的数据。你可以在该行执行其他调用,将结果保存为newrow,然后只有json.dumps该变量。 – jkm