在網(wǎng)上(http://www.rdatamining.com/ )找到了一個(gè)用R語言進(jìn)行聚類分析的例子, 在整個(gè)例子中做了一些中文解釋說明. 數(shù)據(jù)集用的是iris
第一步:對(duì)數(shù)據(jù)集進(jìn)行初步統(tǒng)計(jì)分析
檢查數(shù)據(jù)的維度
> dim(iris)
[1] 150 5
顯示數(shù)據(jù)集中的列名
> names(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
顯示數(shù)據(jù)集的內(nèi)部結(jié)構(gòu)
> str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
顯示數(shù)據(jù)集的屬性
> attributes(iris)
$names --就是數(shù)據(jù)集的列名
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
$row.names --個(gè)人理解就是每行數(shù)據(jù)的標(biāo)號(hào)
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
[21] 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
[41] 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
[61] 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
[81] 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
[101] 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
[121] 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
[141] 141 142 143 144 145 146 147 148 149 150
$class --表示類別
[1] "data.frame"
查看數(shù)據(jù)集的前五項(xiàng)數(shù)據(jù)情況
> iris[1:5,]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
查看數(shù)據(jù)集中屬性Sepal.Length前10行數(shù)據(jù)
> iris[1:10, "Sepal.Length"]
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9
同上
> iris$Sepal.Length[1:10]
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9
顯示數(shù)據(jù)集中每個(gè)變量的分布情況
> summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
顯示iris數(shù)據(jù)集列Species中各個(gè)值出現(xiàn)頻次
> table(iris$Species)
setosa versicolor virginica
50 50 50
根據(jù)列Species畫出餅圖
> pie(table(iris$Species))
算出列Sepal.Length的所有值的方差
> var(iris$Sepal.Length)
[1] 0.6856935
算出列iris$Sepal.Length和iris$Petal.Length的協(xié)方差
> cov(iris$Sepal.Length, iris$Petal.Length)
[1] 1.274315
算出列iris$Sepal.Length和iris$Petal.Length的相關(guān)系數(shù), 從結(jié)果看這兩個(gè)值是強(qiáng)相關(guān)。
> cor(iris$Sepal.Length, iris$Petal.Length)
[1] 0.8717538
畫出列iris$Sepal.Length分布柱狀圖
> hist(iris$Sepal.Length)
畫出列iris$Sepal.Length的密度函數(shù)圖
> plot(density(iris$Sepal.Length))
畫出列iris$Sepal.Length和iris$Sepal.Width的散點(diǎn)圖
> plot(iris$Sepal.Length, iris$Sepal.Width)
繪出矩陣各列的散布圖
> plot(iris)
or
> pairs(iris)
第二步:使用knn包進(jìn)行Kmean聚類分析
將數(shù)據(jù)集進(jìn)行備份,將列newiris$Species置為空,將此數(shù)據(jù)集作為測(cè)試數(shù)據(jù)集
> newiris <- iris
> newiris$Species <- NULL
在數(shù)據(jù)集newiris上運(yùn)行Kmean聚類分析, 將聚類結(jié)果保存在kc中。在kmean函數(shù)中,將需要生成聚類數(shù)設(shè)置為3
> (kc <- kmeans(newiris, 3))
K-means clustering with 3 clusters of sizes 38, 50, 62: K-means算法產(chǎn)生了3個(gè)聚類,大小分別為38,50,62.
Cluster means: 每個(gè)聚類中各個(gè)列值生成的最終平均值
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.006000 3.428000 1.462000 0.246000
2 5.901613 2.748387 4.393548 1.433871
3 6.850000 3.073684 5.742105 2.071053
Clustering vector: 每行記錄所屬的聚類(2代表屬于第二個(gè)聚類,1代表屬于第一個(gè)聚類,3代表屬于第三個(gè)聚類)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[37] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[73] 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 3
[109] 3 3 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3 3 2 2 3 3 3 3 3 2 3 3 3 3 2 3 3 3 2 3
[145] 3 3 2 3 3 2
Within cluster sum of squares by cluster: 每個(gè)聚類內(nèi)部的距離平方和
[1] 15.15100 39.82097 23.87947
(between_SS / total_SS = 88.4 %) 組間的距離平方和占了整體距離平方和的的88.4%,也就是說各個(gè)聚類間的距離做到了最大
Available components: 運(yùn)行kmeans函數(shù)返回的對(duì)象所包含的各個(gè)組成部分
[1] "cluster" "centers" "totss" "withinss"
[5] "tot.withinss" "betweenss" "size"
("cluster"是一個(gè)整數(shù)向量,用于表示記錄所屬的聚類
"centers"是一個(gè)矩陣,表示每聚類中各個(gè)變量的中心點(diǎn)
"totss"表示所生成聚類的總體距離平方和
"withinss"表示各個(gè)聚類組內(nèi)的距離平方和
"tot.withinss"表示聚類組內(nèi)的距離平方和總量
"betweenss"表示聚類組間的聚類平方和總量
"size"表示每個(gè)聚類組中成員的數(shù)量)
創(chuàng)建一個(gè)連續(xù)表,在三個(gè)聚類中分別統(tǒng)計(jì)各種花出現(xiàn)的次數(shù)
> table(iris$Species, kc$cluster)
1 2 3
setosa 0 50 0
versicolor 2 0 48
virginica 36 0 14
根據(jù)最后的聚類結(jié)果畫出散點(diǎn)圖,數(shù)據(jù)為結(jié)果集中的列"Sepal.Length"和"Sepal.Width",顏色為用1,2,3表示的缺省顏色
> plot(newiris[c("Sepal.Length", "Sepal.Width")], col = kc$cluster)
在圖上標(biāo)出每個(gè)聚類的中心點(diǎn)
〉points(kc$centers[,c("Sepal.Length", "Sepal.Width")], col = 1:3, pch = 8, cex=2)
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。