
R語(yǔ)言的三種聚類方法
摘要: 層次聚類 kmeans dbscan筆記
一、距離和相似系數(shù)
r語(yǔ)言中使用dist(x, method = “euclidean”,diag = FALSE, upper = FALSE, p = 2) 來(lái)計(jì)算距離。其中x是樣本矩陣或者數(shù)據(jù)框。method表示計(jì)算哪種距離。method的取值有:
euclidean 歐幾里德距離,就是平方再開方。
maximum 切比雪夫距離
manhattan 絕對(duì)值距離
canberra Lance 距離
minkowski 明科夫斯基距離,使用時(shí)要指定p值
binary 定性變量距離.
定性變量距離: 記m個(gè)項(xiàng)目里面的 0:0配對(duì)數(shù)為m0 ,1:1配對(duì)數(shù)為m1,不能配對(duì)數(shù)為m2,距離=m1/(m1+m2);
diag 為TRUE的時(shí)候給出對(duì)角線上的距離。upper為TURE的時(shí)候給出上三角矩陣上的值。
r語(yǔ)言中使用scale(x, center = TRUE, scale = TRUE) 對(duì)數(shù)據(jù)矩陣做中心化和標(biāo)準(zhǔn)化變換。
如只中心化 scale(x,scale=F) ,
r語(yǔ)言中使用sweep(x, MARGIN, STATS, FUN=”-“, …)
對(duì)矩陣進(jìn)行運(yùn)算。MARGIN為1,表示行的方向上進(jìn)行運(yùn)算,為2表示列的方向上運(yùn)算。STATS是運(yùn)算的參數(shù)。FUN為運(yùn)算函數(shù),默認(rèn)是減法。下面利用sweep對(duì)矩陣x進(jìn)行極差標(biāo)準(zhǔn)化變換
>center <- sweep(x, 2, apply(x, 2, mean)) #在列的方向上減去均值。
>R <- apply(x, 2, max) - apply(x,2,min) #算出極差,即列上的最大值-最小值
>x_star <- sweep(center, 2, R, "/") #把減去均值后的矩陣在列的方向上除以極差向量
center <- sweep(x, 2, apply(x, 2, min)) #極差正規(guī)化變換
R <- apply(x, 2, max) - apply(x,2,min)
x_star <- sweep(center, 2, R, "/")
有時(shí)候我們不是對(duì)樣本進(jìn)行分類,而是對(duì)變量進(jìn)行分類。這時(shí)候,我們不計(jì)算距離,而是計(jì)算變量間的相似系數(shù)。常用的有夾角和相關(guān)系數(shù)。
r語(yǔ)言計(jì)算兩向量的夾角余弦:
y <- scale(x, center = F, scale = T)/sqrt(nrow(x)-1)
C <- t(y) %*% y
相關(guān)系數(shù)用cor函數(shù)
二、層次聚類法
層次聚類法。先計(jì)算樣本之間的距離。每次將距離最近的點(diǎn)合并到同一個(gè)類。然后,再計(jì)算類與類之間的距離,將距離最近的類合并為一個(gè)大類。不停的合并,直到合成了一個(gè)類。其中類與類的距離的計(jì)算方法有:最短距離法,最長(zhǎng)距離法,中間距離法,類平均法等。比如最短距離法,將類與類的距離定義為類與類之間樣本的最段距離。。。
r語(yǔ)言中使用hclust(d, method = “complete”, members=NULL) 來(lái)進(jìn)行層次聚類。
其中d為距離矩陣。
method表示類的合并方法,有:
single 最短距離法
complete 最長(zhǎng)距離法
median 中間距離法
mcquitty 相似法
average 類平均法
centroid 重心法
ward 離差平方和法
> x <- c(1,2,6,8,11) #試用一下
> dim(x) <- c(5,1)
> d <- dist(x)
> hc1 <- hclust(d,"single")
> plot(hc1)
> plot(hc1,hang=-1,type="tirangle") #hang小于0時(shí),樹將從底部畫起。
#type = c("rectangle", "triangle"),默認(rèn)樹形圖是方形的。另一個(gè)是三角形。
#horiz TRUE 表示豎著放,F(xiàn)ALSE表示橫著放。
> z <- scan()
1: 1.000 0.846 0.805 0.859 0.473 0.398 0.301 0.382
9: 0.846 1.000 0.881 0.826 0.376 0.326 0.277 0.277
17: 0.805 0.881 1.000 0.801 0.380 0.319 0.237 0.345
25: 0.859 0.826 0.801 1.000 0.436 0.329 0.327 0.365
33: 0.473 0.376 0.380 0.436 1.000 0.762 0.730 0.629
41: 0.398 0.326 0.319 0.329 0.762 1.000 0.583 0.577
49: 0.301 0.277 0.237 0.327 0.730 0.583 1.000 0.539
57: 0.382 0.415 0.345 0.365 0.629 0.577 0.539 1.000
65:
Read 64 items
> names
[1] "shengao" "shoubi" "shangzhi" "xiazhi" "tizhong"
[6] "jingwei" "xiongwei" "xiongkuang"
> r <- matrix(z,nrow=8,dimnames=list(names,names))
> d <- as.dist(1-r)
> hc <- hclust(d)
> plot(hc)
然后可以用rect.hclust(tree, k = NULL, which = NULL, x = NULL, h =
NULL,border = 2, cluster = NULL)來(lái)確定類的個(gè)數(shù)。
tree就是求出來(lái)的對(duì)象。k為分類的個(gè)數(shù),h為類間距離的閾值。border是畫出來(lái)的顏色,用來(lái)分類的。
> plot(hc)
> rect.hclust(hc,k=2)
> rect.hclust(hc,h=0.5)
result=cutree(model,k=3) 該函數(shù)可以用來(lái)提取每個(gè)樣本的所屬類別
三、動(dòng)態(tài)聚類 kmeans
層次聚類,在類形成之后就不再改變。而且數(shù)據(jù)比較大的時(shí)候更占內(nèi)存。
動(dòng)態(tài)聚類,先抽幾個(gè)點(diǎn),把周圍的點(diǎn)聚集起來(lái)。然后算每個(gè)類的重心或平均值什么的,以算出來(lái)的結(jié)果為分類點(diǎn),不斷的重復(fù)。直到分類的結(jié)果收斂為止。r語(yǔ)言中主要使用kmeans(x,
centers, iter.max = 10, nstart = 1,algorithm =c(“Hartigan-Wong”,
“Lloyd”,”Forgy”,
“MacQueen”))來(lái)進(jìn)行聚類。centers是初始類的個(gè)數(shù)或者初始類的中心。iter.max是最大迭代次數(shù)。nstart是當(dāng)centers是數(shù)字的時(shí)候,隨機(jī)集合的個(gè)數(shù)。algorithm是算法,默認(rèn)是第一個(gè)。
> newiris <- iris
> model <- kmeans(scale(newiris[1:4]),3)
> model
K-means clustering with 3 clusters of sizes 50, 47, 53
Cluster means:
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 -1.01119138 0.85041372 -1.3006301 -1.2507035
2 1.13217737 0.08812645 0.9928284 1.0141287
3 -0.05005221 -0.88042696 0.3465767 0.2805873
Clustering vector:
[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 1
[38] 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 2 3 3 3 3 3 3 3 3 2 3 3 3 3 2 3 3 3
[75] 3 2 2 2 3 3 3 3 3 3 3 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 2 3 2 2 2 2 3 2 2 2 2
[112] 2 2 3 3 2 2 2 2 3 2 3 2 3 2 2 3 2 2 2 2 2 2 3 3 2 2 2 3 2 2 2 3 2 2 2 3 2
[149] 2 3
Within cluster sum of squares by cluster:
[1] 47.35062 47.45019 44.08754
(between_SS / total_SS = 76.7 %)
Available components:
[1] "cluster" "centers" "totss" "withinss" "tot.withinss"
[6] "betweenss" "size" "iter" "ifault"
> table(iris$Species,kc$cluster)
Error in table(iris$Species, kc$cluster) : object 'kc' not found
> table(iris$Species,model$cluster) #比較一下
1 2 3
setosa 50 0 0
versicolor 0 11 39
virginica 0 36 14
> plot(newiris[c("Sepal.Length","Sepal.Width")],col=model$cluster) #畫出聚類圖
四、DBSCAN
動(dòng)態(tài)聚類往往聚出來(lái)的類有點(diǎn)圓形或者橢圓形?;诿芏葤呙璧乃惴軌蚪鉀Q這個(gè)問(wèn)題。思路就是定一個(gè)距離半徑,定最少有多少個(gè)點(diǎn),然后把可以到達(dá)的點(diǎn)都連起來(lái),判定為同類。在r中的實(shí)現(xiàn)
dbscan(data, eps, MinPts, scale, method, seeds, showplot, countmode)
其中eps是距離的半徑,minpts是最少多少個(gè)點(diǎn)。 scale是否標(biāo)準(zhǔn)化(我猜) ,method
有三個(gè)值raw,dist,hybird,分別表示,數(shù)據(jù)是原始數(shù)據(jù)避免計(jì)算距離矩陣,數(shù)據(jù)就是距離矩陣,數(shù)據(jù)是原始數(shù)據(jù)但計(jì)算部分距離矩陣。showplot畫不畫圖,0不畫,1和2都畫。countmode,可以填個(gè)向量,用來(lái)顯示計(jì)算進(jìn)度。用鳶尾花試一試
> install.packages("fpc", dependencies=T)
> library(fpc)
> newiris <- iris[1:4]
> model <- dbscan(newiris,1.5,5,scale=T,showplot=T,method="raw")# 畫出來(lái)明顯不對(duì) 把距離調(diào)小了一點(diǎn)
> model <- dbscan(newiris,0.5,5,scale=T,showplot=T,method="raw")
> model #還是不太理想……
dbscan Pts=150 MinPts=5 eps=0.5
0 1 2
border 34 5 18
seed 0 40 53
total 34 45 71
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問(wèn)題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問(wèn)題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問(wèn)題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過(guò)程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10