楼主: daishen
3612 1

[R] KNN推荐算法可视化的R实现 [推广有奖]

  • 0关注
  • 10粉丝

已卖:127份资源

博士生

6%

还不是VIP/贵宾

-

威望
0
论坛币
3155 个
通用积分
51.3742
学术水平
67 点
热心指数
68 点
信用等级
42 点
经验
3733 点
帖子
111
精华
0
在线时间
324 小时
注册时间
2014-9-14
最后登录
2016-3-10

楼主
daishen 发表于 2015-3-5 22:58:12 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

本程序在推荐算法(向量化的语言,没有for之类的东东)的基础上增加了图示,标明由谁负责完成推荐任务。


案 例



# 7个人评价6部电影的得分矩阵,最好5分,最差1分,没有看过记为NA,表示不评价。

  1. scores = c(2.5,3.5,3,3.5,2.5,3,3,3.5,1.5,5,3.5,3,2.5,3,NA,3.5,NA,4,NA,
  2.            3.5,3,4,2.5,4.5,3,4,2,3,2,3,3,4,NA,5,3.5,3,NA,4.5,NA,4,1,NA)  
  3. data = matrix(scores,byrow=T,ncol=6)
  4. colnames(data) = c('张三丰','少林寺','让子弹飞','神雕侠侣','白蛇传','龙门客栈')
  5. rownames(data) = c('赵一','钱二','孙三','李四','刘五','郑六','王七')
复制代码


# 缺失值用均值替代并作降维处理

  1. view = apply(data,2,function(x){
  2.                        x[is.na(x)] = mean(x,na.rm=T)
  3.                        return(x)
  4.                       })
  5. res = svd(view)
复制代码


# 测量品味接近程度

  1. mute = function(x,dim=3){
  2.                          u = data.frame(res$u[,1:dim])
  3.                          rownames(u) = rownames(data)
  4.                          library(proxy)
  5.                          similar = as.matrix(simil(u,method='cosine'))
  6.                          p = similar[x,]
  7.                          res = p[order(p,decreasing=T)]
  8.                          return(res)
  9.                          }
复制代码


#找出关系网

  1. m = lapply(rownames(data),mute)  
  2. relation = data.frame(客户群 = rownames(data),
  3.                       推荐人 = sapply(1:nrow(data),function(i) names(m[[i]][1])),
  4.                       密切程度 = round(as.vector(sapply(1:nrow(data),function(i) m[[i]][1])),2))
复制代码


# 推荐电影

  1. recommend = function(x){
  2.                         part = colnames(data)[is.na(data[x,])]
  3.                         if (length(part)==0) return(NA)
  4.                         m = mute(x)
  5.                         md = data[names(m),part,drop = F]
  6.                         movie = colSums(md*m,na.rm = T)/apply(!is.na(md),2,function(x) sum(m[x]))
  7.                         names(movie) = part
  8.                         res = movie[order(movie,decreasing=T)]
  9.                         return(res)
  10.                        }
复制代码


# 策略可视化

  1. library(ggplot2)
  2. u = data.frame(res$u[,2:3])
  3. v = data.frame(res$v[,2:3])

  4. p = ggplot() +
  5.      geom_point(data=u,aes(X1,X2),size = 3,colour = 'blue') +
  6.      geom_point(data=v,aes(X1,X2),size=4,colour='red4') +
  7.      geom_text(data=u,aes(X1,X2),label=rownames(data),vjust=2) +
  8.      geom_text(data=v,aes(X1,X2),label=colnames(data),vjust=-1) +
  9.      geom_segment(aes(x = u[4,1], y = u[4,2], xend = u[3,1], yend = u[3,2]),size = 1) +
  10.      geom_segment(aes(x = u[4,1], y = u[4,2], xend = v[1,1], yend = v[1,2]),size = 1) +
  11.      geom_segment(aes(x = u[3,1], y = u[3,2], xend = v[3,1], yend = v[3,2]),size = 1) +
  12.      geom_segment(aes(x = u[7,1], y = u[7,2], xend = u[5,1], yend = u[5,2]),colour = 'red',size = 1) +
  13.      geom_segment(aes(x = u[7,1], y = u[7,2], xend = v[1,1], yend = v[1,2]),colour = 'red',size = 1) +
  14.      geom_segment(aes(x = u[6,1], y = u[6,2], xend = u[2,1], yend = u[2,2]),colour = 'blue',size = 1) +
  15.      geom_segment(aes(x = u[6,1], y = u[6,2], xend = v[3,1], yend = v[3,2]),colour = 'blue',size = 1) +
  16.      coord_cartesian(ylim=c(-0.7,0.7))
  17. print(p)
复制代码


其他见:[实际应用] KNN推荐算法可视化




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:KNN推荐算法 推荐算法 R实现 knn 可视化 KNN推荐算法 推荐算法 可视化

已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
niuniuyiwan + 60 + 60 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 60  论坛币 + 60  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

本帖被以下文库推荐

沙发
jerker 发表于 2015-3-5 23:18:23

QQ截图20150305231700.png (11.86 KB)

QQ截图20150305231700.png

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-31 08:47