Skip to content

liuslevis/CFDemo

Repository files navigation

CFDemo

Some collaborative filtering algorithm demo:

  • Item-based CF
  • Matrix Factorization (ALS)
  • word2vec

Setup

brew install pip3
pip3 install numpy
pip3 install gensim

Run

Item-based CF

➜  CFDemo git:(master) python3 cf.py
基于用户的协同过滤推荐

用户:andy
    喜欢:['霍乱时期的爱情']
    相似用户:[(0.3333333333333333, 'ray'), (0.3333333333333333, 'david'), (0.3333333333333333, 'ann')]
    推荐:[('迟到的间隔年', 2), ('从0到1', 1), ('活着', 1), ('百年孤独', 1), ('枪炮、病菌与钢铁:人类社会的命运', 1)]

用户:jim
    喜欢:['迟到的间隔年', '背包十年:我的职业是旅行']
    相似用户:[(0.3333333333333333, 'michale'), (0.25, 'ray'), (0.25, 'ann')]
    推荐:[('霍乱时期的爱情', 2), ('寻路中国:从乡村到工厂的自驾之旅', 1), ('活着', 1), ('枪炮、病菌与钢铁:人类社会的命运', 1)]

用户:joel
    喜欢:['人类简史:从动物到上帝', '中国历代政治得失', '失控', '巨人的陨落:世纪三部曲']
    相似用户:[(0.16666666666666666, 'jack')]
    推荐:[('创业维艰', 1), ('浪潮之巅', 1)]

用户:david
    喜欢:['霍乱时期的爱情', '百年孤独', '从0到1']
    相似用户:[(0.3333333333333333, 'andy'), (0.2, 'ray'), (0.2, 'ann')]
    推荐:[('迟到的间隔年', 2), ('活着', 1), ('枪炮、病菌与钢铁:人类社会的命运', 1)]

用户:ray
    喜欢:['霍乱时期的爱情', '迟到的间隔年', '枪炮、病菌与钢铁:人类社会的命运']
    相似用户:[(0.5, 'ann'), (0.3333333333333333, 'andy'), (0.25, 'jim'), (0.2, 'david')]
    推荐:[('从0到1', 1), ('百年孤独', 1), ('背包十年:我的职业是旅行', 1), ('活着', 1)]

用户:michale
    喜欢:['寻路中国:从乡村到工厂的自驾之旅', '背包十年:我的职业是旅行']
    相似用户:[(0.3333333333333333, 'jim')]
    推荐:[('迟到的间隔年', 1)]

用户:ann
    喜欢:['霍乱时期的爱情', '迟到的间隔年', '活着']
    相似用户:[(0.5, 'ray'), (0.3333333333333333, 'andy'), (0.25, 'jim'), (0.2, 'david')]
    推荐:[('从0到1', 1), ('百年孤独', 1), ('背包十年:我的职业是旅行', 1), ('枪炮、病菌与钢铁:人类社会的命运', 1)]

用户:jack
    喜欢:['创业维艰', '失控', '浪潮之巅']
    相似用户:[(0.16666666666666666, 'joel')]
    推荐:[('人类简史:从动物到上帝', 1), ('巨人的陨落:世纪三部曲', 1), ('中国历代政治得失', 1)]

基于书籍的协同过滤推荐

根据 从0到1 推荐:
    百年孤独 1.000000
    霍乱时期的爱情 0.250000

根据 迟到的间隔年 推荐:
    霍乱时期的爱情 0.400000
    活着 0.333333
    枪炮、病菌与钢铁:人类社会的命运 0.333333
    背包十年:我的职业是旅行 0.250000

根据 霍乱时期的爱情 推荐:
    迟到的间隔年 0.400000
    百年孤独 0.250000
    活着 0.250000
    枪炮、病菌与钢铁:人类社会的命运 0.250000
    从0到1 0.250000

根据 百年孤独 推荐:
    从0到1 1.000000
    霍乱时期的爱情 0.250000

根据 中国历代政治得失 推荐:
    巨人的陨落:世纪三部曲 1.000000
    人类简史:从动物到上帝 1.000000
    失控 0.500000

根据 巨人的陨落:世纪三部曲 推荐:
    人类简史:从动物到上帝 1.000000
    中国历代政治得失 1.000000
    失控 0.500000

根据 寻路中国:从乡村到工厂的自驾之旅 推荐:
    背包十年:我的职业是旅行 0.500000

根据 失控 推荐:
    浪潮之巅 0.500000
    巨人的陨落:世纪三部曲 0.500000
    创业维艰 0.500000
    人类简史:从动物到上帝 0.500000
    中国历代政治得失 0.500000

根据 浪潮之巅 推荐:
    创业维艰 1.000000
    失控 0.500000

根据 活着 推荐:
    迟到的间隔年 0.333333
    霍乱时期的爱情 0.250000

根据 人类简史:从动物到上帝 推荐:
    巨人的陨落:世纪三部曲 1.000000
    中国历代政治得失 1.000000
    失控 0.500000

根据 创业维艰 推荐:
    浪潮之巅 1.000000
    失控 0.500000

根据 背包十年:我的职业是旅行 推荐:
    寻路中国:从乡村到工厂的自驾之旅 0.500000
    迟到的间隔年 0.250000

根据 枪炮、病菌与钢铁:人类社会的命运 推荐:
    迟到的间隔年 0.333333
    霍乱时期的爱情 0.250000

Matrix Factorization

➜  CFDemo git:(master) ✗ python3 matrix_factorization.py
[[ 1.  0.  0.  0.  0.  0.  1.  0.  0.  0.  0.  1.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  1.  0.  1.  0.  0.  1.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  1.  0.  0.  1.  0.]
 [ 0.  0.  0.  0.  0.  1.  1.  0.  0.  1.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  1.  0.  1.  0.  0.  1.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  1.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  1.  0.]
 [ 0.  1.  0.  1.  0.  0.  0.  1.  0.  0.  1.  0.  0.  0.]]
['从0到1', '人类简史:从动物到上帝', '寻路中国:从乡村到工厂的自驾之旅', '中国历代政治得失', '枪炮、病菌与钢铁:人类社会的命运', '活着', '霍乱时期的爱情', '巨人的陨落:世纪三部曲', '浪潮之巅', '迟到的间隔年', '失控', '百年孤独', '背包十年:我的职业是旅行', '创业维艰']
['david', 'jack', 'jim', 'ann', 'ray', 'andy', 'michale', 'joel']

======= 用户矩阵 ========
david [ 0.83821978  0.67504514]
jack [ 0.7301199  0.7786698]
jim [ 0.99092523  0.54686868]
ann [ 0.69017405  0.77860467]
ray [ 0.81875941  0.6949482 ]
andy [ 0.88999345  0.62954112]
michale [ 0.71954616  0.7469942 ]
joel [ 0.71514722  0.84212803]

======= 物品矩阵 ========
从0到1 [ 1.00970553  0.20106905]
人类简史:从动物到上帝 [ 0.66846312  0.53815877]
寻路中国:从乡村到工厂的自驾之旅 [ 0.83653201  0.49769333]
中国历代政治得失 [ 0.342655    0.86138845]
枪炮、病菌与钢铁:人类社会的命运 [ 0.96514058  0.26385684]
活着 [ 1.07895301  0.29015911]
霍乱时期的爱情 [ 0.42207883  0.93594765]
巨人的陨落:世纪三部曲 [ 0.51821512  0.75187852]
浪潮之巅 [ 0.58062918  0.6265629 ]
迟到的间隔年 [ 0.59466993  0.7380648 ]
失控 [ 0.49668886  0.80655972]
百年孤独 [ 0.4941525   0.86616188]
背包十年:我的职业是旅行 [ 0.48849358  0.88923844]
创业维艰 [ 0.84041045  0.53489977]

======= Matrix Factorization 推荐结果 ========
david 活着 1.10027025426
jim 从0到1 1.11050104667
jim 寻路中国:从乡村到工厂的自驾之旅 1.10111356072
jim 枪炮、病菌与钢铁:人类社会的命运 1.10067718672
jim 活着 1.22784068608
jim 创业维艰 1.12530385366
andy 活着 1.14292820666

Word2vec

➜  CFDemo git:(master) python3 word2vec.py
基于书籍的 word2vec 协同过滤推荐

根据 背包十年:我的职业是旅行 推荐:
    迟到的间隔年 0.22
    人类简史:从动物到上帝 0.11
    失控 0.09
    枪炮、病菌与钢铁:人类社会的命运 0.09
    浪潮之巅 0.07
    霍乱时期的爱情 0.07
    中国历代政治得失 0.06
    寻路中国:从乡村到工厂的自驾之旅 0.05
    巨人的陨落:世纪三部曲 0.03
    活着 0.03

根据 枪炮、病菌与钢铁:人类社会的命运 推荐:
    百年孤独 0.20
    迟到的间隔年 0.16
    中国历代政治得失 0.09
    背包十年:我的职业是旅行 0.09
    失控 0.06
    巨人的陨落:世纪三部曲 0.06
    创业维艰 -0.02
    活着 -0.03
    浪潮之巅 -0.03
    从0到1 -0.09

根据 从0到1 推荐:
    百年孤独 0.08
    浪潮之巅 0.06
    中国历代政治得失 0.03
    寻路中国:从乡村到工厂的自驾之旅 0.03
    创业维艰 -0.03
    迟到的间隔年 -0.07
    失控 -0.07
    巨人的陨落:世纪三部曲 -0.07
    霍乱时期的爱情 -0.08
    背包十年:我的职业是旅行 -0.09

根据 寻路中国:从乡村到工厂的自驾之旅 推荐:
    活着 0.14
    背包十年:我的职业是旅行 0.05
    人类简史:从动物到上帝 0.03
    从0到1 0.03
    霍乱时期的爱情 0.03
    创业维艰 -0.03
    中国历代政治得失 -0.03
    百年孤独 -0.07
    浪潮之巅 -0.10
    迟到的间隔年 -0.10

根据 霍乱时期的爱情 推荐:
    人类简史:从动物到上帝 0.20
    巨人的陨落:世纪三部曲 0.17
    中国历代政治得失 0.07
    背包十年:我的职业是旅行 0.07
    寻路中国:从乡村到工厂的自驾之旅 0.03
    活着 0.02
    失控 -0.01
    创业维艰 -0.07
    从0到1 -0.08
    浪潮之巅 -0.10

根据 创业维艰 推荐:
    浪潮之巅 0.14
    活着 0.11
    中国历代政治得失 0.01
    巨人的陨落:世纪三部曲 -0.01
    百年孤独 -0.02
    枪炮、病菌与钢铁:人类社会的命运 -0.02
    迟到的间隔年 -0.03
    从0到1 -0.03
    寻路中国:从乡村到工厂的自驾之旅 -0.03
    失控 -0.05

根据 中国历代政治得失 推荐:
    活着 0.19
    枪炮、病菌与钢铁:人类社会的命运 0.09
    霍乱时期的爱情 0.07
    失控 0.06
    背包十年:我的职业是旅行 0.06
    百年孤独 0.04
    迟到的间隔年 0.04
    从0到1 0.03
    创业维艰 0.01
    巨人的陨落:世纪三部曲 -0.01

根据 巨人的陨落:世纪三部曲 推荐:
    人类简史:从动物到上帝 0.17
    霍乱时期的爱情 0.17
    浪潮之巅 0.13
    迟到的间隔年 0.07
    枪炮、病菌与钢铁:人类社会的命运 0.06
    背包十年:我的职业是旅行 0.03
    失控 0.01
    创业维艰 -0.01
    中国历代政治得失 -0.01
    从0到1 -0.07

根据 失控 推荐:
    背包十年:我的职业是旅行 0.09
    迟到的间隔年 0.07
    中国历代政治得失 0.06
    枪炮、病菌与钢铁:人类社会的命运 0.06
    浪潮之巅 0.03
    人类简史:从动物到上帝 0.02
    巨人的陨落:世纪三部曲 0.01
    霍乱时期的爱情 -0.01
    百年孤独 -0.04
    创业维艰 -0.05

根据 人类简史:从动物到上帝 推荐:
    霍乱时期的爱情 0.20
    巨人的陨落:世纪三部曲 0.17
    背包十年:我的职业是旅行 0.11
    寻路中国:从乡村到工厂的自驾之旅 0.03
    失控 0.02
    浪潮之巅 -0.01
    迟到的间隔年 -0.05
    百年孤独 -0.07
    中国历代政治得失 -0.09
    从0到1 -0.09

根据 活着 推荐:
    中国历代政治得失 0.19
    寻路中国:从乡村到工厂的自驾之旅 0.14
    创业维艰 0.11
    背包十年:我的职业是旅行 0.03
    霍乱时期的爱情 0.02
    浪潮之巅 0.02
    枪炮、病菌与钢铁:人类社会的命运 -0.03
    迟到的间隔年 -0.05
    失控 -0.05
    百年孤独 -0.07

根据 浪潮之巅 推荐:
    创业维艰 0.14
    巨人的陨落:世纪三部曲 0.13
    背包十年:我的职业是旅行 0.07
    从0到1 0.06
    失控 0.03
    活着 0.02
    人类简史:从动物到上帝 -0.01
    枪炮、病菌与钢铁:人类社会的命运 -0.03
    中国历代政治得失 -0.08
    百年孤独 -0.09

根据 迟到的间隔年 推荐:
    背包十年:我的职业是旅行 0.22
    枪炮、病菌与钢铁:人类社会的命运 0.16
    百年孤独 0.10
    失控 0.07
    巨人的陨落:世纪三部曲 0.07
    中国历代政治得失 0.04
    创业维艰 -0.03
    活着 -0.05
    人类简史:从动物到上帝 -0.05
    从0到1 -0.07

根据 百年孤独 推荐:
    枪炮、病菌与钢铁:人类社会的命运 0.20
    迟到的间隔年 0.10
    从0到1 0.08
    中国历代政治得失 0.04
    创业维艰 -0.02
    失控 -0.04
    寻路中国:从乡村到工厂的自驾之旅 -0.07
    活着 -0.07
    人类简史:从动物到上帝 -0.07
    浪潮之巅 -0.09

About

Some collaborative filtering algorithm demo: User/Item-based CF, ALS, word2vec etc.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages