cf based recommendation system library written in golang
tasty是一个帮助你构建推荐系统的工具包,目前特性,测试都不完善,不能用于生产环境。但可以用于推荐系统入门学习
tasty采用了对商业友好的Apache License v2发布
tasty目前实现了最基本的协同过滤推荐算法,目前包括:
相似度算法目前仅实现了皮尔逊相关系数,后续会不断完善,如:
tasty参考了Mahout的接口设计,使用方法和Mahout比较相似。
下面是一个基于项目协同过滤的例子
package main
import (
"fmt"
"github.com/lilee/tasty/cf/model"
"github.com/lilee/tasty/cf/recomender"
"github.com/lilee/tasty/cf/similarity"
)
func main() {
m := model.NewGenericDataModel()
add := func(userId, itemId uint64, value float64) {
p := model.NewGenericPreference(userId, itemId, value)
m.AddPreference(p)
}
// A用户喜欢物品a,c
// B用户喜欢物品a,b,c
// C用户喜欢物品a
// 物品a,c同时被用户喜欢,说明物品a,c的相似度很高
// C用户喜欢a物品,则可以将c物品推荐给用户C
add(1, 1, 5.0)
add(1, 3, 4.0)
add(2, 1, 4.0)
add(2, 2, 5.0)
add(2, 3, 5.0)
add(3, 1, 5.0)
// 使用皮尔逊相关系数相似度算法
s := similarity.NewPearsonCorrelationSimilarity(m)
// 基于项目的协同过滤
r := recommender.NewGenericItemBasedRecommender(m, s)
items, err := r.Recommend(3, 1)
if err != nil {
panic(err)
}
for _, item := range(items) {
fmt.Println("item:", item)
}
//Output:
// item: (3, 5.000000)
}
程序运行输出是:
item: (3, 5.000000)
表示将推荐物品c,并且系统预测用户C对物品c的可能评分是5分
未来一个月内的计划