聚类算法(1):K-Means算法
? ? ? ? 聚類分析,簡單的說,就是對數據分群,它以相似性為基礎,相同類中的樣本比不同類中的本更具相似性。在商業應用中,聚類通常用來劃分用戶群,然后分別加以研究。另外,它還可以挖掘數據中潛在的模式,基于此改進業務流程或設計新產品等。常見的聚類算法有k- Means算法、系統聚類算法,下面將依次介紹。
目錄
?1. K-Means算法
(1)用于衡量好的標準
(2)K- Means實現的基本步驟
?2. 代碼實現
(1)R語言
(2)Python實現
?1. K-Means算法
? ? ? ? K- Means算法是一種基于劃分的經典聚類算法,對于給定的含有N條記錄的數據集,算法將把數據集分成k組(k<N),使得每一分組至少包含一條數據記錄,每條記錄屬于且僅屬于一個分組。算法首先會給出一個隨機初始的分組,再通過反復迭代改變分組,使每一次改進的分組比上一次好。
(1)用于衡量好的標準
? ? ? ?同一分組中的記錄越近越好,而不同分組中的記錄越遠越好,通常使用歐氏距離作為相異性度量。
(2)K- Means實現的基本步驟
- ① 從數據中隨機抽取K個點作為初始聚類的K個中心,分別代表K個聚類
- ② 計算數據中所有的點到這K個中心點的距離,通常是歐氏距離
- ③ 將每個點歸屬到離其最近的聚類里,生成K個聚類
- ④ 重新計算每類的中心點,即計算每類中所有點的幾何中心(即平均值)
- ⑤ 如果滿足終止條件,算法將結束;否則,進入第②步。
? ? 終止條件通常有如下三種:
- ① 聚類的中心點不再移動
- ② 聚類的中心點移動的大小在給定的閥值范圍內
- ③ 迭次次數達到上限
?2. 代碼實現
(1)R語言
? ? ? ? R語言中,使用kmeans()函數來實現聚類,其定義及參數定義如下:
? ? ? ? ??
? ? ? ? ???
? ? ?使用K-Means算法對AirPassagers的年度標準曲線進行聚類,旨在發現乘客數據的年度變化模式,代碼如下:?
#重構數據 ap.data<-t(mapply(function(i){AirPassengers[(12*(i-1)+1):(i*12)]},1:12)) # t()轉置 # mapply、apply之后原始數據的行列會互換,因此需要將其t轉置回來#標準化曲線 ap.data.std<-t(apply(ap.data,1,function(x){(x-min(x))/(max(x)-min(x))})) #使用kmeans函數進行聚類,假定分成兩類 kOut<-kmeans(ap.data.std,centers=2,nstart=20,iter.max=200) #聚類統計情況如下 table(kOut$cluster) # 1 2 分類1有8個,分類2有4個 # 8 4 # kOut$cluster 2 2 2 1 2 1 1 1 1 1 1 1#設置類標簽 ap.data.std<-cbind(ap.data.std,kOut$cluster) #畫出曲線圖 plot(1:12,1:12,col='white',ylim=c(0,1),xlab="年份",ylab="標準化值") for(i in 1:nrow(ap.data.std)) {lines(1:12,ap.data.std[i,1:12],col=ap.data.std[i,13]+2) } legend(1,1,c("類1","類2"),lty=1,col=c("blue","green "))AirPassengers 1949-1960 12年數據
? ? ? ? ?Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1949 112 118 132 129 121 135 148 148 136 119 104 118
1950 115 126 141 135 125 149 170 170 158 133 114 140
1951 145 150 178 163 172 178 199 199 184 162 146 166
1952 171 180 193 181 183 218 230 242 209 191 172 194
1953 196 196 236 235 229 243 264 272 237 211 180 201
1954 204 188 235 227 234 264 302 293 259 229 203 229
1955 242 233 267 269 270 315 364 347 312 274 237 278
1956 284 277 317 313 318 374 413 405 355 306 271 306
1957 315 301 356 348 355 422 465 467 404 347 305 336
1958 340 318 362 348 363 435 491 505 404 359 310 337
1959 360 342 406 396 420 472 548 559 463 407 362 405
1960 417 391 419 461 472 535 622 606 508 461 390 432
? ? ? ? 效果如圖所示,12條年度曲線被分成了兩類,藍色線表示類1,綠色線表示類2,可以到,各類里面曲線彼此接近,而類間的差異較大。細致觀察,可以看出,乘客數量在6、7、8及10月份比較穩定,這或許與季節比較相關,具體如何還需進一步考察。
?? ? ? ? ? ? ? ? ? ?
(2)Python實現
總結
以上是生活随笔為你收集整理的聚类算法(1):K-Means算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R语言:plot()函数参数合集
- 下一篇: 特征工程(1):特征提取、特征构建、特征