R 文本挖掘 Part2--几个聚类分类算法以及应用

一、一些聚类,分类算法
1.k-means
http://blog.sina.com.cn/s/blog_4ac9f56e0101h8xp.html
2.系统 层次
http://blog.sina.com.cn/s/blog_615770bd01018dnj.html
3.文本分类 knn
http://blog.csdn.net/cl1143015961/article/details/44413631

二、例子:k-means, 系统,k-中心,knn,svm,kernel聚类
其中knn方法可以替代一中的3方法
1.层次聚类

    library(tm)
    reut21<-system.file('texts','crude',package = 'tm')
    reuts<-Corpus(DirSource(reut21),readerControl = list(reader = readReut21578XML) )

    data(crude)
    data(acq)
    #词条文档
    crudeTDM<-TermDocumentMatrix(crude,control = list(stopwords = TRUE))
    inspect(crudeTDM)
    ##dissimilarity(crudeTDM,method ='cosine') 新版没有了
    #crudeDTM <- removeSparseTerms(crudeDTM, 0.8) #可以选择去除权重较小的项
    crudeTDM.matrix <- as.matrix(crudeTDM)
    ##距离矩阵  
    dist(crudeTDM.matrix,method = 'euclidean')


    inspect(acq)
    m<-c(acq,crude)  ##组合
    dtm<-DocumentTermMatrix(m)
    dtm<-removeSparseTerms(dtm,0.8)
    inspect(dtm)
    ditm<-dist(dtm,method = 'euclidean')

    hc<-hclust(ditm,"average")  
    plot(hc,xlab = 'xzhou') 
    re<-rect.hclust(hc,k=2,border="red") 

2.K-means聚类
kmeans R中不用提供距离矩阵

    k<-kmeans(dtm,2)
    summary(k)

    mode(k) #kmeansRes的内容 
    names(k)
    k$cluster #聚类结果
    k$size #每个类别下有多少条数据
#sort(kmeansRes$cluster) #对分类情况进行排序
'''
"cluster"是一个整数向量,用于表示记录所属的聚类  
"centers"是一个矩阵,表示每聚类中各个变量的中心点
"totss"表示所生成聚类的总体距离平方和
"withinss"表示各个聚类组内的距离平方和
"tot.withinss"表示聚类组内的距离平方和总量
"betweenss"表示聚类组间的聚类平方和总量
"size"表示每个聚类组中成员的数量
'''

3.k中心聚类

注意这个x可以是数据矩阵或者距离矩阵

    library(cluster)
    pa<-pam(ditm,2)  #分两类
    summary(pa) 

4.knn算法 最近邻算法 做分类

    library('class')  #knn所在包
    library('kernlab')
    install.packages('kernlab')
    data(spam)
    View(spam)

    ##训练集,垃圾邮件和非垃圾邮件
    train <- rbind(spam[1:1360, ], spam[1814:3905, ])
    trainCl <- train[,"type"]   ##分类,就是给加了一个分类的列
    View(train)

    test <- rbind(spam[1361:1813, ], spam[3906:4601, ])
    trueCl <- test[,"type"]

    ##去除原来有分类的列
    knnCl <- knn(train[,-58], test[,-58], trainCl)

    ##table("1-NN" = knnCl, "Reuters" = trueCl)对角线
    (nnTable <- table("1-NN" = knnCl, "Reuters" = trueCl))
    sum(diag(nnTable))/nrow(test)   #查看分类正确率

    #提取对角线或者构造对角线矩阵
    diag

5.支持向量机svm
##type ~ .表示,用type来分类

ksvmTrain <- ksvm(type ~ ., data = train)
    svmCl <- predict(ksvmTrain, test[,-58])
    (svmTable <- table("SVM" = svmCl, "Reuters" = trueCl))
    sum(diag(svmTable))/nrow(test)

5.软件包kernlab中的specc()方法可以实现kernel聚类算法。用这个聚类可能效果不是很理想
例子:

    a=c(3,3,3,5,5,6,6,3,5,3,7,9,5,7)
    data<-matrix(data=a,ncol=2,byrow=FALSE)

    library(kernlab)
    stringkern <-stringdot(type="string")  
    kernelRes <-specc(data,centers=2,kernel=stringkern)  
    mode(kernelRes) 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值