几个用R实现Data Mining的例子

线性回归:

x<-1:10
y<-x+rnorm(10,0,1)
fit<-lm(y~x)
summary(fit)

 

关联挖掘:

library(arules)
data<-paste("item 1, item 2", "item2, item3", sep="\n")#一个简单的transaction数据的例子

write(data, file = "demo_basket')
tr<-read.transactions("demo_basket",format="basket",sep=",")
data("Adult")#用到了arules中的Adult数据
rules<-apriori("Adult, parameter=list(supp=0.5,conf=0.9,target="rules"))#学习规则

 

聚类分析:

x<-rbind(matrix(rnorm(100,sd=0.3), ncol=2), matrix(rnorm(100, mean=1, sd=0.3), ncol=2)) #构造了两组正态分布的数据(均值分别是0和1),并将他们组合起来
cl<-kmeans(x,2)#聚类分析的结果
plot(x, col=cl$cluster)#聚类结果的可视化
points(cl$centers, col=1:2, pch=8, cex=2)

 

分类

library(e1071)#要安装e1071这个包
data(iris)#用著名的iris数据
x<-subset(iris, select=-Species)#除掉标签的数据
y<-iris$Species#标签数据
model<-svm(x,y)#训练模型
summary(model)#查看模型参数
pred<-predict(model,x)#进行预测
table(pred,y)#看预测结果

 

R实现的item-based CF推荐算法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 读入数据,原数据是user-subject的收藏二元组
data = read.table('data.dat', sep=',', header=TRUE)
# 标识user与subject的索引
user = unique(data$user_id)
subject = unique(data$subject_id)
uidx = match(data$user_id, user)
iidx = match(data$subject_id, subject)
# 从二元组构造收藏矩阵
M = matrix(0, length(user), length(subject))
i = cbind(uidx, iidx)
M[i] = 1
# 对列向量(subject向量)进行标准化,%*%为矩阵乘法
mod = colSums(M^2)^0.5  # 各列的模
MM = M %*% diag(1/mod)  # M乘以由1/mod组成的对角阵,实质是各列除以该列的模
#crossprod实现MM的转置乘以MM,这里用于计算列向量的内积,S为subject的相似度矩阵
S = crossprod(MM)
# user-subject推荐的分值
R = M %*% S
R = apply(R, 1, FUN=sort, decreasing=TRUE, index.return=TRUE)
k = 5
# 取出前5个分值最大的subject
res = lapply(R, FUN=function(r)return(subject[r$ix[1:k]]))
# 输出数据
write.table(paste(user, res, sep=':'), file='result.dat', quote=FALSE, row.name=FALSE, col.name=FALSE)

除去注释,有效代码只有16行。其中大量运用了向量化的函数与处理方式,所以没有任何的显式循环结构,关于向量化更详细的叙述可看这里

注:该代码实现的只是最基本算法,仅作参考,不承诺在大规模与复杂数据环境下的实用性。

源数据文件data.dat的内容如下所列:

user_id,subject_id
1,1
1,3
1,7
1,13
2,2
2,5
2,6
2,7
2,9
2,10
2,11
3,1
3,2
3,3
3,4
3,7
3,9
3,10
5,13
6,1
6,3
6,4
6,5
6,8
6,10
8,1
8,2
8,3
8,5
8,6
8,7
8,8
9,13
10,12
11,2
11,3
11,4
11,6
11,8
11,9
11,13
12,12
13,3
13,6
13,7
15,4
15,12
15,13
16,2
16,3
16,4
16,7
16,8
17,2
17,3
17,4
17,5
17,6
17,7
17,8
17,9
17,10
17,11
18,2
18,3
19,2
19,3
19,5
19,6
19,9
19,10
19,11
19,12
20,1
20,3
20,4
20,7
20,13
21,1
21,6
21,8
21,9
21,11
21,12
21,13
22,6
23,2
23,4
23,9
23,12
24,1
24,5
24,9
25,2
25,6
25,10
25,11
26,2
26,3
26,8
27,3
27,6
27,12
27,13
28,1
28,2
28,3
28,5
28,7
28,9
28,10
28,11
28,12
28,13
29,1
29,2
29,3
29,4
29,5
29,6
29,7
29,8
29,9
29,10
30,6
30,7
30,9
30,13
31,6
31,11
32,1
32,5
33,2
33,13
34,3
34,7
34,8
34,9
34,10
34,13
35,3
35,4
35,5
35,6
35,7
36,2
36,3
36,4
36,6
36,7
36,8
36,9
36,11
36,12
36,13
38,5
41,1
41,3
41,4
41,5
41,6
41,7
41,11
42,2
42,3
42,7
42,8
42,9
42,10
42,11
43,2
43,6
43,10
43,11
43,12

 

 

### Forward Stepwise Regression in R
out0 = lm(y ~ 1) ### fit the initial model (intercept only)
out  = step(out0,direction="forward",trace=TRUE,scope= y ~ x1 + x2 + x3 + x4 + x5)
summary(out)



### lasso
library(lars)
out = lars(x,y) ### x is a matrix of covariates
summary(out)
plot(out)
 
 
### Gamma Ray Data

kernreg = function(y,x,h,newx){
     ### kernel regression
     n = nrow(x)
     d = ncol(x)
     m = nrow(newx)
     f = rep(0,m)
     for(i in 1:m){
           tmp = sqrt(apply((matrix(newx[i,],n,d,byrow=TRUE) - x)^2,1,sum))
           w   = exp(-tmp^2/(2*h^2))
           f[i] = sum(w*y)/sum(w)
           }
     return(f)
     }


Cv = function(y,x,H){
     ### cross validation
     huge = mean(y^2)*10
     n  = nrow(x)
     d  = ncol(x)
     m  = length(H)
     cv = rep(0,m)
     for(j in 1:m){
           h = H[j] 
           for(i in 1:n){
             tmp = sqrt(apply((matrix(x[i,],n,d,byrow=TRUE) - x)^2,1,sum))
             w   = exp(-tmp^2/(2*h^2))
             w   = w/sum(w)
             f   = sum(w*y)
             if(w[i] == 1)cv[j] = cv[j] + huge
             if(w[i] <  1)cv[j] = cv[j] + ((y[i] - f)/(1-w[i]))^2
             }
          }
     cv = cv/n
     return(cv)
     }
 
 
 
 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值