Closed gqqnbig closed 4 years ago
用亲和性分析方法推荐电影(A Priori) https://www.jianshu.com/p/5b9b1486e163
你可以运行一下它的代码,并把代码推送到github。然后再修改它看看能不能应用于我们的数据集。
推送的时候要不你推送到branch 6-other-algorithms
?
我把for k in range(2, 20):改成了 for k in range(2, 5):
运行到最后抛出异常 TypeError: Object of type frozenset is not JSON serializable
你再改一下,不要运行出错
昨天的代码是最初版没有改完,今天上传了可运行的版本。
21:43 $ ./apriori.py
support itemsets
0 0.241226 (0)
1 0.108607 (5)
2 0.105405 (16)
3 0.218012 (31)
4 0.130496 (33)
.. ... ...
215 0.125424 (352, 315, 293)
216 0.121417 (587, 315, 293)
217 0.101413 (523, 587, 315)
218 0.111201 (1176, 1163, 1165)
219 0.101862 (1176, 257, 1163, 1165)
[220 rows x 2 columns]
我用了mlxtend模块里的apriori算法,support=0.1,跑出来是这样的。你试试。
你pull这个branch就可以获取我的代码。
我把这个也跑通了,但是准确率还是不行,没有决策树高。那个方法和mlxtend预测准确率都只有0.5左右........感觉单从电影来判断不太行,几千个里面才能找到一个有pattern的来预测,预测出来的准确率也不行QAQ
def flatNestList(a):
return [item for sublist in a for item in sublist]
np.unique(flatNestList(sorted_confidence[:,1]))
发现规则只包含70部电影。我们总共有13万部电影。
select * from ValidationRatings
where movieId in ( 0, 5, 16, 31, 33, 35, 46, 49, 108, 109, 148,
159, 163, 220, 257, 290, 293, 315, 352, 353, 360, 373,
376, 453, 476, 523, 537, 582, 583, 584, 587, 602, 734,
762, 839, 882, 890, 897, 902, 1011, 1061, 1069, 1106, 1161,
1163, 1164, 1165, 1167, 1172, 1174, 1176, 1179, 1180, 1187, 1188,
1204, 1222, 1229, 1234, 1255, 1471, 1518, 1554, 1635, 1930, 2225,
2466, 2654, 2750, 2847)
用这句SQL可以看到,validation set的3999236行里,有18597行包含这70部电影。
假设涉及这70部电影的行我们全部分类正确,正确率只有0.46%,其余的行只能按50%比例瞎猜。
如果降低支持度,我们可以收集到更多的电影,但应该需要用一些比例去计算用户是不是喜欢某一部电影。
比如电影A属于电影集合{A,B,C,D},一个用户只看了{B,C},他大概有百分之六七十概率喜欢A。你原来的链接和https://blog.csdn.net/jj88888/article/details/78035540 有提到这个算法。
另一个思路是用电影名称里的单词。可能用户对某些词特别喜欢??
这个issue你可以close了。你可以新建一个issue或者在 #18 继续做。
https://juejin.im/post/5afbfe316fb9a07aa5427d73