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

来源:互联网 发布:淘宝绽放茉莉恶心 编辑:程序博客网 时间:2024/05/21 02:21

一、一些聚类,分类算法
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) 
原创粉丝点击