【R語言】聚類分析

聚類分析是一種常用的無監督學習方法,是將所觀測的事物或者指標進行分類的一種統計分析方法,其目的是通過辨認在某些特征上相似的事物,并將它們分成各種類別。R語言提供了多種聚類分析的方法和包。

方法優點缺點適用場景
K-means計算效率高需預設K值球形數據分布
層次聚類可視化直觀計算復雜度O(n2)小數據集/層級關系分析
DBSCAN發現任意形狀參數敏感噪聲數據/密度差異大
PAM對異常值魯棒計算成本高中小規模數據

一、層次聚類

它是通過計算樣本之間的距離來構建一個層次化的聚類結構,結果通常用樹狀圖(dendrogram)來表示。

實現層次聚類的常用函數是R語言內置函數hclust(),還可以用cluter擴展包agens()函數flashClust擴展包hclust()函數

1、hclust()函數

下面用flexclust擴展包中的milk數據集進行講解,此數據集包含了25種哺乳動物乳汁的成分數據:水分(water)、蛋白質(protein)、乳糖(lactose)、脂肪(fat)和灰分(ash)。

1.1 準備數據

library(flexclust)
# 第1步 準備數據:查看數據
data(milk)
milk

?

1.2 標準化數據?

# 第2步 標準化數據
milk_data <- scale(milk, center=T, scale=T)
milk_data

1.3 計算距離

# 第3步 計算歐幾里得距離;也可以選用其它方法
milk_dist <- dist(milk_data, method="euclidean")
milk_dist

1.4 層次聚類

?使用平均距離法進行層次聚類

# 使用平均距離法進行層次聚類
fit_average <- hclust(milk_dist, method="averge")
fit_average

使用離差平和法進行層次聚類

# 使用平均距離法進行層次聚類
fit_average <- hclust(milk_dist, method="ward.D2")
fit_average

1.5 可視化結果

plot(fit_average, hang=-1, cex=1.2,main="平均距離層次聚類")

plot(fit_average, hang = -1, main = "層次聚類樹狀圖", xlab = "樣本", sub = "")
# 用矩形標出3個聚類
rect.hclust(fit_average, k = 3, border = 2:4)  

?1.6 切割聚類并評估

使用flexclust擴展包中的cuttree()函數將聚類結果分為3類(為什么分為3類,在此不細究,可上網查詢方法)。

clusters <- cutree(fit_average, k=3)
# 可視化結果
plot(fit_average, hang=-1, cex=1, main="平均距離層次最終聚類")
rect.hclust(fit_average, k=3)

二、K-均值聚類?

1、kmeans()函數

層次聚類是一次性的,即樣本點一旦被劃分道一個類中,就不會再被分配到其它的類中,而且當樣本量達到數百甚至數千時,層次聚類會很難處理。

R語言中最常用的K-均值聚類函數時kmeans()函數。

1.1 數據準備

用R語言內置的iris數據集為例。首先需要將類別信息去除。

head(iris)
iris_data <- iris[, 1:4]
head(iris_data)

1.2 標準化數據

# 標準化數據,消除量綱的影響
iris_scaled <- scale(iris_data, center=T, scale=TRUE)
head(iris_scaled)

?1.3 選擇最佳K值

使用肘部法選擇最佳的K值:通過計算不同聚類數k對應的總組內平方和(Total Within-Cluster Sum of Squares, WSS),找到WSS下降速度顯著變緩的“肘部”點,該點對應的k即為最佳聚類數。

wss <- numeric(10)
for (k in 1:10) {kmeans_model <- kmeans(iris_scaled, centers = k, nstart = 25)wss[k] <- kmeans_model$tot.withinss
}
plot(1:10, wss, type = "b", pch = 19, main = "肘部法選擇最佳k值", xlab = "聚類數k", ylab = "總組內平方和(WSS)")

從下面的截圖可知,當k=3時,下降速度明顯變緩。?

?1.4 K-均值聚類

centers:聚類數k。

nstart:隨機初始中心點的次數(建議設為25以減少局部最優影響)。

iter.max:最大迭代次數(默認10)。

set.seed(123)
# 進行K-均值聚類
fit_means <- kmeans(iris_scaled, centers=3, iter.max=100, nstart=25)

1.5 可視化結果

library(factoextra)
fviz_cluster(fit_means, data = iris_scaled, palette = "jco",  # 配色方案geom = "point",   # 僅顯示點ellipse.type = "norm",  # 添加正態分布橢圓ggtheme = theme_minimal())

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895817.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895817.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895817.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

超全Deepseek資料包,deepseek下載安裝部署提示詞及本地部署指南介紹

該資料包涵蓋了DeepSeek模型的下載、安裝、部署以及本地運行的詳細指南&#xff0c;適合希望在本地環境中高效運行DeepSeek模型的用戶。資料包不僅包括基礎的安裝步驟&#xff0c;還提供了68G多套獨立部署視頻教程教程&#xff0c;針對不同硬件配置的模型選擇建議&#xff0c;以…

Java Spring boot 篇:常用注解

Configuration 作用 Configuration 注解的核心作用是把一個類標記為 Spring 應用上下文里的配置類。配置類就像一個 Java 版的 XML 配置文件&#xff0c;能夠在其中定義 Bean 定義和 Bean 之間的依賴關系。當 Spring 容器啟動時&#xff0c;會掃描這些配置類&#xff0c;解析其…

在 Ubuntu 20.04 為 Clash Verge AppImage 創建桌面圖標教程

在 Ubuntu 20.04 為 AppImage 創建桌面圖標教程 一、準備工作 確保你已經下載了 xxxx.AppImage 文件&#xff0c;并且知道它所在的具體路徑。同時&#xff0c;你可以準備一個合適的圖標文件&#xff08;.png 格式&#xff09;用于代表該應用程序&#xff0c;如果沒有合適的圖…

【復現DeepSeek-R1之Open R1實戰】系列6:GRPO源碼逐行深度解析(上)

目錄 4 GRPO源碼分析4.1 數據類 GRPOScriptArguments4.2 系統提示字符串 SYSTEM_PROMPT4.3 獎勵函數4.3.1 accuracy_reward函數4.3.2 verify函數4.3.3 format_reward函數 4.4 將數據集格式化為對話形式4.5 初始化GRPO Trainer 【復現DeepSeek-R1之Open R1實戰】系列3&#xff1…

【雜談】加油!!!!

為了在三月底前系統準備Java后端開發的面試和筆試&#xff0c;以下是分階段的高效學習計劃&#xff1a; 一、知識體系構建&#xff08;第1-2周&#xff09; 核心基礎強化 Java基礎&#xff08;每日1.5小時&#xff09;&#xff1a; 重點掌握&#xff1a;JVM內存模型&#xff0…

python旅游推薦系統+爬蟲+可視化(協同過濾算法)

??基于用戶的協同過濾算法 ??有后臺管理 ??2w多數據集 這個旅游數據分析推薦系統采用了Python語言、Django框架、MySQL數據庫、requests庫進行網絡爬蟲開發、機器學習中的協同過濾算法、ECharts數據可視化技術&#xff0c;以實現從網站抓取旅游數據、個性化推薦和直觀展…

HarmonyNext上傳用戶相冊圖片到服務器

圖片選擇就不用說了&#xff0c;直接用 無須申請權限 。 上傳圖片&#xff0c;步驟和android對比稍微有點復雜&#xff0c;可能是為了安全性考慮&#xff0c;需要將圖片先拷貝到緩存目錄下面&#xff0c;然后再上傳&#xff0c;當然你也可以轉成Base64&#xff0c;然后和服務…

同為科技智能PDU助力Deepseek人工智能和數據交互的快速發展

1 2025開年&#xff0c;人工智能領域迎來了一場前所未有的變革。Deepseek成為代表“東方力量”的開年王炸&#xff0c;不僅在國內掀起了技術熱潮&#xff0c;并且在全球范圍內引起了高度關注。Deepseek以顛覆性技術突破和現象級應用場景席卷全球&#xff0c;這不僅重塑了產業格…

二、QEMU NFS 環境搭建

? 在上一章節中&#xff0c;我們已經成功完成了內核和 busybox 環境的配置。為了進一步提高開發效率&#xff0c;我們可以使用 NFS&#xff08;Network File System&#xff09;來掛載根目錄。NFS 允許我們將本地文件系統通過網絡共享給虛擬機使用&#xff0c;這樣在開發過程中…

.NET 9.0 的 Blazor Web App 項目中 EF Core 【事務】使用備忘

一、DbContext.Database.BeginTransactionAsync() 模式 1. 注意事項&#xff1a;連接字符串中啟用了 MARS&#xff08;Multiple Active Result Sets&#xff1a;MultipleActiveResultSetsTrue &#xff09;后&#xff0c;無法創建 保存點&#xff08;保存點與 SQL Server 的多…

記一次 Git Fetch 后切換分支為空的情況

Git Fetch 后切換分支為空的情況 在使用 Git 時&#xff0c;我遇到這樣的情況&#xff1a;執行 git fetch 后切換分支&#xff0c;發現工作目錄是空的&#xff0c;沒有任何文件&#xff0c;所以插眼記錄一下。 原因分析 git fetch 的作用&#xff1a;git fetch 只會從遠程倉庫…

UMLS數據下載及訪問

UMLS數據申請 這個直接在官網上申請即可&#xff0c;記得把地址填全&#xff0c;基本都會拿到lisence。 UMLS數據訪問 UMLS的數據訪問分為網頁訪問&#xff0c;API訪問以及數據下載后的本地訪問&#xff0c;網頁訪問&#xff0c;API訪問按照官網的指示即可&#xff0c;這里主…

使用 Docker 部署 Apache Spark 集群教程

簡介 Apache Spark 是一個強大的統一分析引擎&#xff0c;用于大規模數據處理。本文將詳細介紹如何使用 Docker 和 Docker Compose 快速部署一個包含一個 Master 節點和兩個 Worker 節點的 Spark 集群。這種方法不僅簡化了集群的搭建過程&#xff0c;還提供了資源隔離、易于擴…

瑞薩RA-T系列芯片ADCGPT功能模塊的配合使用

在馬達或電源工程中&#xff0c;往往需要采集多路AD信號&#xff0c;且這些信號的優先級和采樣時機不相同。本篇介紹在使用RA-T系列芯片建立馬達或電源工程時&#xff0c;如何根據需求來設置主要功能模塊ADC&GPT&#xff0c;包括采樣通道打包和分組&#xff0c;GPT觸發啟動…

20250217 隨筆 redis非原子性操作簡述

從你提供的文本來看&#xff0c;核心是 Redis 作為緩存的檢查機制&#xff0c;以及非原子性操作導致的不一致性問題。 我們可以拆解為兩個部分來理解&#xff1a; &#x1f4cc; 1. 邏輯&#xff1a;先查 Redis&#xff0c;再決定是否注冊 邏輯流程 先查詢 Redis 是否有某個 …

git-提交時間和作者時間的區別

1.介紹 定義介紹 提交時間&#xff08;Committer Date&#xff09;&#xff1a;決定了提交在 Git 歷史中的位置&#xff0c;通常影響 GitHub 上提交顯示的順序。 作者時間&#xff08;Author Date&#xff09;&#xff1a;雖然不影響提交的排序&#xff0c;但在每個提交詳情頁…

PHP框架入門指南:從零構建現代Web應用

一、為什么需要PHP框架? 1.1 傳統PHP開發的痛點 重復造輪子:用戶認證、表單驗證等基礎功能需要反復開發代碼混亂:缺乏統一結構導致維護困難安全漏洞:手動處理SQL注入/XSS攻擊效率低下擴展性差:耦合代碼難以適應業務增長1.2 框架的核心價值 標準化架構:MVC模式強制代碼分…

Leetcode 146 LRU緩存 的三種解法

146. LRU 緩存 請你設計并實現一個滿足 LRU (最近最少使用) 緩存 約束的數據結構。 實現 LRUCache 類&#xff1a; LRUCache(int capacity) 以 正整數 作為容量 capacity 初始化 LRU 緩存int get(int key) 如果關鍵字 key 存在于緩存中&#xff0c;則返回關鍵字的值&#xff0…

尚硅谷 java 學習Day19 抽象類與抽象方法、接口、內部類

6-5 抽象類(abstract)與抽象方法&#xff08;important&#xff09; 一、什么叫抽象類&#xff1a; 有時候將一個父類設計的非常抽象&#xff0c;以至于它沒有具體的實例&#xff0c;這樣的類稱為抽象類 abstract關鍵字的使用&#xff1a; ? 1、abstract:抽象的 ? 2、abs…

【LeetCode Hot100 鏈表(上)】相交鏈表、反轉鏈表、回文鏈表、環形鏈表、合并兩個有序鏈表、兩數相加

鏈表 1. 相交鏈表問題描述解決思路代碼實現 2. 反轉鏈表問題描述解決思路代碼實現 3. 回文鏈表問題描述解決思路代碼實現 4. 環形鏈表問題描述解決思路代碼實現 5. 環形鏈表II問題描述解決思路代碼實現 6. 合并兩個有序鏈表問題描述解決思路代碼實現 7. 兩數相加問題描述解決思…