機器學習 Day16 聚類算法 ,數據降維

聚類算法

1.簡介

1.1 聚類概念

  • 無監督學習:聚類是一種無監督學習算法,不需要預先標記的訓練數據

  • 相似性分組:根據樣本之間的相似性自動將樣本歸到不同類別

  • 相似度度量:常用歐式距離作為相似度計算方法

1.2 聚類vs分類

  • 聚類:無監督,不知道類別數量或含義,基于相似性分組

  • 分類:有監督,使用已標記數據訓練模型預測新數據類別

2. K-means聚類實現

2.1 API介紹

from sklearn.cluster import KMeans# 主要參數
KMeans(n_clusters=8)  # n_clusters指定聚類中心數量# 常用方法
estimator.fit(x)      # 訓練模型
estimator.predict(x)   # 預測類別
estimator.fit_predict(x)  # 訓練+預測

2.2 代碼實現步驟

1.創建數據集from sklearn.datasets import make_blobs
import matplotlib.pyplot as pltX, y = make_blobs(n_samples=1000, n_features=2, centers=[[-1,-1], [0,0], [1,1], [2,2]], cluster_std=[0.4, 0.2, 0.2, 0.2], random_state=9)# 可視化
plt.scatter(X[:,0], X[:,1], marker='o')
plt.show()2.聚類
from sklearn.cluster import KMeans# 嘗試不同聚類數量
y_pred = KMeans(n_clusters=2, random_state=9).fit_predict(X)# 可視化結果
plt.scatter(X[:,0], X[:,1], c=y_pred)
plt.show()3.聚類評估from sklearn.metrics import calinski_harabasz_score# 使用Calinski-Harabasz指數評估
print(calinski_harabasz_score(X, y_pred))

3.算法流程?

算法優化的是SSE,所以每一步都在把每個點分配到歐式距離最小的點。當然當優化的損失函數不同時,我們可以采取不同的距離。

K-means聚類步驟詳解

  1. 初始化聚類中心

    • 隨機選擇(有改進)K個數據點作為初始聚類中心

    • 這些中心點位于特征空間內

  2. 分配數據點到最近中心

    • 對于每個數據點,計算它與所有K個中心的距離

    • 將該點分配到距離最近的聚類中心所屬的簇

    • 常用距離度量:歐幾里得距離(歐式距離)

  3. 重新計算聚類中心

    • 對每個簇,計算其中所有點的均值(每個特征維度的平均值)

    • 將均值點作為新的聚類中心

  4. 判斷收斂

    • 比較新舊中心點的位置變化

    • 如果中心點不再移動(或移動小于閾值),算法終止

    • 否則,返回步驟2繼續迭代

算法特點說明

  • 需要預先指定K值:這是算法的主要限制之一

  • 對初始中心敏感:不同的初始中心可能導致不同的最終結果

  • 對異常點敏感:涉及到求平均,異常點會產生誤差很大。

  • 迭代過程保證收斂:算法一定會收斂,但可能只是局部最優

  • 適用于凸形數據分布:對非凸分布效果可能不佳

實際應用提示

  1. 可以通過多次運行取最優結果來緩解初始中心敏感問題

  2. 使用肘部法則(Elbow Method)或輪廓系數等方法幫助確定最佳K值

  3. 數據標準化很重要,因為K-means對特征的量綱敏感

4.算法評估:

4.1SSE(確定迭代次數)

?

就是計算每個簇中,每個點到中心點的距離平方,很明顯當數據很多時,SSE計算會很計算量大、

4.2.肘方法(確定K)

4.3.輪廓系數(選擇K)

a就是凝聚度,b就是分離度,我們希望高凝聚,高分離,也就是a小b大,所以那個公式就是SC越為一越好。但是,SC越1越好嗎,我們在選擇K的時候需要考慮希望使得樣本不是很極端,比如

k=2的時候第一簇極度窄于第二簇,雖然它的SC小但是我們選擇k=4.

4.4.C-H系數(選擇K)

5.kmeans優缺點

6.Canopy算法

算法流程:

該算法之所以被稱為預聚類,因為它的結果和選取的起始點可以作為以后的參考。?算法簡而言之就是我先選一個點,在T1距離內視作這個類,在T2內我們不能再選出另一個起始點,然后選擇一個隨機點繼續進行以上步驟。

優點解讀

  • 抗干擾能力提升:K - means 算法對噪聲敏感,離群點易使聚類中心偏移。Canopy 算法在預處理階段,通過設定距離閾值,可將包含少量樣本點(NumPoint 較小)的 Cluster 直接去除。這些小 Cluster 很可能是由噪聲或離群點形成的,去掉它們能減少噪聲對后續聚類的干擾,提升聚類結果的穩定性 。
  • 聚類中心初始化優化:Canopy 算法在聚類過程中,會確定每個 Canopy 的中心點。將這些中心點作為 K - means 算法的初始聚類中心(K ),相較于 K - means 隨機選取初始中心,Canopy 算法得到的中心更具代表性,能使 K - means 更快收斂到更優解,提高聚類精度 。
  • 計算量降低:Canopy 算法先將數據集劃分成若干個相互重疊的子集(Canopy) 。后續對每個 Canopy 內部進行 K - means 聚類,無需在整個數據集上進行相似性計算,極大減少了計算量,尤其適用于大規模數據集,能有效提高聚類效率 。

缺點解讀

  • 閾值確定難題:Canopy 算法依賴兩個距離閾值 T1 和 T2 ,合適的閾值能使算法有效劃分數據集。但實際應用中,很難事先確定最優的 T1 和 T2 值。若閾值設置不當,可能導致劃分的 Canopy 過于稀疏或過于密集,影響聚類效果。同時,即使使用 Canopy 算法進行預處理,后續基于 Canopy 的 K - means 聚類依舊可能陷入局部最優解,因為 K - means 本身的迭代優化特性容易受初始條件和數據分布影響 。

7.k-means++算法

K - means++ 是 K - means 算法的改進版本,主要改進在于初始聚類中心的選擇,目的是讓選擇的質心盡可能分散,以提升聚類效果,減少陷入局部最優的可能性

初始聚類中心選擇概率公式

  • 公式原理其中D(x)表示數據點x到最近已選聚類中心的距離 。該公式計算每個數據點被選為下一個聚類中心的概率,分子是單個數據點到最近已選中心距離的平方,分母是所有數據點到最近已選中心距離平方的總和。通過這種方式,距離已選中心遠的點有更大概率被選為新的聚類中心 。

8.二分k-means算法

?

9.K-中心聚類算法

k - medoids 算法抗噪性優勢

  • 原理:k - medoids 算法選擇實際數據點作為簇中心(medoids ,即中心點),通過最小化絕對誤差(如曼哈頓距離等)來確定簇中心。與 k - means 計算均值作為質心不同,它更關注數據點本身的代表性。
  • 示例:樣本點(1,1)、(1,2)、(2,1)相對接近,屬于正常數據,而(1000,1000)是明顯噪聲點。k - means 會受噪聲影響,使質心偏向噪聲點方向;k - medoids 則在所有樣本點中選擇使簇絕對誤差最小的點作為中心,由于噪聲點會增大誤差,所以更可能在前三個正常樣本點中選中心,避免噪聲干擾,體現出對噪聲的魯棒性。

k - medoids 算法局限性

  • 計算效率問題:k - medoids 算法計算量較大,隨著樣本數量增加,計算每個數據點作為中心點時的絕對誤差并進行比較的操作會耗費大量時間和資源,導致算法運行速度變慢。
  • 與 k - means 對比:在大規模樣本情況下,k - means 雖然對噪聲敏感,但少量噪聲對其質心計算影響有限,且 k - means 計算簡單、效率高。所以綜合來看,k - means 在實際應用中更為廣泛,而 k - medoids 更適用于對噪聲敏感且樣本規模較小的場景。

數據降維

1.定義和主要方式

?方式主要是特征選擇和主成分分析(因子分析等)

2.特征選擇

2.1特征選擇定義

旨在從數據中包含的眾多特征(屬性、指標等)里,找出主要特征,剔除冗余或無關變量。例如分析鳥類相關數據時,羽毛顏色、眼睛寬度等都是可能的特征,需篩選出對研究目的(如區分鳥類種類等)有重要作用的特征 。

2.2特征選擇方法

  • Filter(過濾式)也就是直接進行選擇
    • 方差選擇法:依據特征方差大小篩選。方差小意味著多數樣本在該特征上取值相近,對區分樣本作用小,可刪除。如sklearn.feature_selection.VarianceThreshold(threshold = 0.0)?,默認刪除所有樣本取值相同(方差為 0 )的特征,也可指定閾值,刪除方差低于該值的特征 。
    • 相關系數
      • 皮爾遜相關系數:衡量兩變量線性相關程度,取值 [-1, 1] 。r > 0?為正相關,r < 0?為負相關;|r| = 1?完全相關,r = 0?無相關;0 < |r| < 1?存在一定程度相關,|r|?越接近 1 線性關系越密切。可通過from scipy.stats import pearsonr?計算,返回相關系數和 p 值 。
      • 斯皮爾曼相關系數:也是反映變量相關程度的統計指標,能表明變量相關方向,取值 [-1, 1] ,應用比皮爾遜相關系數更廣泛 ,計算使用from scipy.stats import spearmanr?。
  • Embedded(嵌入式)也就是在某些算法中嵌入的
    • 決策樹:利用信息熵、信息增益等指標,在構建決策樹過程中自動選擇與目標值關聯緊密的特征 。
    • 正則化:如 L1、L2 正則化,在模型訓練時通過約束參數,使部分特征系數趨近于 0 ,從而實現特征選擇 。
    • 深度學習:如卷積神經網絡等,在訓練過程中自動學習數據特征,隱式進行特征選擇 。

2.3低方差特征過濾

  • 原理:方差用于衡量數據的離散程度。在特征選擇中,若某個特征的方差很小,說明該特征在不同樣本間取值差異不大,對樣本區分能力弱,可視為冗余特征進行刪除。例如,在一個關于學生成績的數據集里,如果 “學生姓名筆畫數” 這個特征方差極小,說明該特征對區分學生成績好壞沒什么作用,就可考慮刪除。
  • API 使用示例
import pandas as pd
from sklearn.feature_selection import VarianceThresholddef variance_demo():"""刪除低方差特征——特征選擇:return: None"""data = pd.read_csv("factor_returns.csv")print(data)# 1、實例化一個轉換器類,指定閾值方差為1transfer = VarianceThreshold(threshold=1)# 2、調用fit_transform進行轉換,這里選取data.iloc[:, 1:10]部分數據data = transfer.fit_transform(data.iloc[:, 1:10])print("刪除低方差特征的結果: \n", data)print("形狀: \n", data.shape)return None

2.4相關系數 - 皮爾遜相關系數

  • 原理:皮爾遜相關系數衡量兩個變量之間的線性相關程度(皮爾遜低說明的是線性關系弱,并不代表相關性弱,可能還有非線性關系)。它基于變量的均值、標準差等統計量計算。當兩個變量的變化趨勢呈現同向線性關系時,相關系數為正;反向線性關系時,相關系數為負;若不存在線性關系,相關系數接近 0 。比如研究身高和體重的關系,若身高增加時體重也傾向于增加,皮爾遜相關系數為正。
  • API 及案例
from scipy.stats import pearsonrx1 = [12.5, 15.3, 23.2, 26.4, 33.5, 34.4, 39.4, 45.2, 55.4, 60.9]
x2 = [21.2, 23.9, 32.9, 34.1, 42.5, 43.2, 49.0, 52.8, 59.4, 63.5]
result = pearsonr(x1, x2)
print(result)

代碼中,從scipy.stats導入pearsonr函數,定義兩個數據列表x1x2?,調用pearsonr計算二者的皮爾遜相關系數和 p 值,打印結果。這里得到的相關系數接近 0.994 ,說明x1x2之間存在高度線性正相關關系,p 值極小表明這種相關性在統計上非常顯著。

2.5相關系數 - 斯皮爾曼相關系數

  • 原理:斯皮爾曼相關系數是一種非參數統計量,它基于變量的秩次(排序位置)計算,反映變量之間的單調相關關系,不局限于線性關系。例如,研究學生考試成績排名和平時作業完成質量排名之間的關系,斯皮爾曼相關系數能有效衡量二者關聯程度。
  • API 及案例
from scipy.stats import spearmanrx1 = [12.5, 15.3, 23.2, 26.4, 33.5, 34.4, 39.4, 45.2, 55.4, 60.9]
x2 = [21.2, 23.9, 32.9, 34.1, 42.5, 43.2, 49.0, 52.8, 59.4, 63.5]
result = spearmanr(x1, x2)
print(result)

3.主成分分析(這里只將實現,具體原理參考李航機器學習)

PCA(主成分分析)API?

  • 類定義sklearn.decomposition.PCA(n_components=None)?是用于主成分分析的類,主成分分析是一種常用的數據降維技術,目的是將高維數據轉換到較低維數空間,同時盡可能保留數據的關鍵信息。
  • 參數n_components?:
    • 小數形式:表示要保留數據信息的比例。例如n_components = 0.9?,意味著 PCA 會自動確定一個合適的低維空間維度,使得轉換后的數據能夠保留原始數據 90% 的信息 。
    • 整數形式:直接指定降維后數據的特征維度。如n_components = 3?,就是將數據降到 3 維 。
  • 方法fit_transform(X)?:X需是numpy array格式,形狀為[n_samples, n_features]?(n_samples是樣本數量,n_features是特征數量) 。該方法先對數據進行擬合(學習數據的分布特征等),再進行轉換(降維操作),返回降維后指定維度的數組 。

PCA 代碼示例

from sklearn.decomposition import PCAdef pca_demo():"""對數據進行PCA降維:return: None"""data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]# 1、實例化PCA,小數——保留多少信息transfer = PCA(n_components=0.9)# 2、調用fit_transformdata1 = transfer.fit_transform(data)print("保留90%的信息,降維結果為: \n", data1)# 1、實例化PCA,整數——指定降維到的維數transfer2 = PCA(n_components=3)# 2、調用fit_transformdata2 = transfer2.fit_transform(data)print("降維到3維的結果: \n", data2)return None

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

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

相關文章

【Linux】第十八章 調優系統性能

1. 系統管理員可以使用哪個命令來更改tuned守護進程的設置&#xff1f; tuned 的調優配置集存儲在 /usr/lib/tuned&#xff08;默認&#xff09; 和 /etc/tuned&#xff08;自定義 或當前有效&#xff09;目錄下。每個配置集都有一個單獨的目錄&#xff0c;目錄中包含 tuned.c…

【JVS更新日志】企業文檔AI助手上線、低代碼、智能BI、智能APS、AI助手5.14更新說明!

項目介紹 JVS是企業級數字化服務構建的基礎腳手架&#xff0c;主要解決企業信息化項目交付難、實施效率低、開發成本高的問題&#xff0c;采用微服務配置化的方式&#xff0c;提供了低代碼數據分析物聯網的核心能力產品&#xff0c;并構建了協同辦公、企業常用的管理工具等&…

ollama調用千問2.5-vl視頻圖片UI界面小程序分享

1、問題描述&#xff1a; ollama調用千問2.5-vl視頻圖片內容&#xff0c;通常用命令行工具不方便&#xff0c;于是做了一個python UI界面與大家分享。需要提前安裝ollama&#xff0c;并下載千問qwen2.5vl:7b 模型&#xff0c;在ollama官網即可下載。 &#xff08;8G-6G 顯卡可…

Web 架構之會話保持深度解析

文章目錄 一、引言二、會話保持的基本概念2.1 什么是會話2.2 為什么需要會話保持 三、會話保持的常見實現方式3.1 基于客戶端的會話保持3.1.1 Cookie 方式3.1.2 URL 重寫方式 3.2 基于服務器端的會話保持3.2.1 負載均衡器會話保持3.2.2 會話共享 四、會話保持可能遇到的問題及解…

Maven 項目中將本地依賴庫打包到最終的 JAR 中

文章目錄 前言詳細步驟 前言 在現代后端開發中&#xff0c;構建高效且可擴展的 Web 應用程序通常依賴于多種第三方庫和內部依賴。這些依賴可以來自公共倉庫&#xff0c;也可能是公司內部自研的庫或尚未發布到公共倉庫的 JAR 包。本文將詳細介紹如何在 Maven 項目中處理本地依賴…

快速定位到源碼位置的插件 - vite/webpack

1. vite-plugin-vue-devtools npm i vite-plugin-vue-devtools -D vite.config.js中配置 import vueDevTools from vite-plugin-vue-devtoolsexport default defineConfig({server: {port: 5173,host: 0.0.0.0},plugins: [vue(),vueJsx(),vueDevTools({componentInspector: t…

基于AH1101芯片的5V升18.6V LED恒流背光供電方案設計

基于AH1101芯片的5V升18.6V LED恒流背光供電方案設計 在現代電子設備中&#xff0c;LED背光技術因其高效、節能、壽命長等優點被廣泛應用于各類顯示設備。本文將詳細介紹如何利用AH1101高效升壓恒流驅動芯片&#xff0c;實現從5V輸入電壓升壓至18.6V&#xff0c;為LED背光板提供…

16.1 - VDMA視頻轉發實驗之TPG

文章目錄 1 實驗任務2 系統框圖3 硬件設計3.1 IP核配置3.2 注意事項 4 軟件設計4.1 注意事項4.2 工程源碼4.2.1 main.c文件 1 實驗任務 基于14.1&#xff0c;使用Xilinx TPG&#xff08;Test Pattern Generator&#xff09; IP提供視頻源&#xff0c;將視頻數據通過VDMA寫入PS…

認識Docker/安裝Docker

一、認識Docker Docker的定義 Docker 是一個開源的應用容器引擎&#xff0c;允許開發者將應用及其依賴打包到一個輕量級、可移植的容器中。容器化技術使得應用可以在任何支持 Docker 的環境中運行&#xff0c;確保環境一致性。 Docker的核心組件 Docker Engine&#xff1a;負責…

實用工具:微軟軟件PowerToys(完全免費),實現多臺電腦共享鼠標和鍵盤(支持window系統)

實用工具&#xff1a;微軟軟件 PowerToys 讓多臺電腦共享鼠標和鍵盤 在如今的數字化辦公與生活場景中&#xff0c;我們常常會面臨同時使用多臺電腦的情況。例如&#xff0c;辦公時可能一臺電腦用于處理工作文檔&#xff0c;另一臺用于運行專業軟件或查看資料&#xff1b;家庭環…

西門子 Teamcenter13 Eclipse RCP 開發 1.1 工具欄 普通按鈕

西門子 Teamcenter13 Eclipse RCP 開發 1.1 工具欄 普通按鈕 1 配置文件2 插件控制3 命令框架 位置locationURI備注菜單欄menu:org.eclipse.ui.main.menu添加到傳統菜單工具欄toolbar:org.eclipse.ui.main.toolbar添加到工具欄 style 值含義顯示效果push普通按鈕&#xff08;默…

React中巧妙使用異步組件Suspense優化頁面性能。

文章目錄 前言一、為什么需要異步組件&#xff1f;1. 性能瓶頸分析2. 異步組件的價值 二、核心實現方式1. React.lazy Suspense&#xff08;官方推薦&#xff09;2. 路由級代碼分割&#xff08;React Router v6&#xff09; 總結 前言 在 React 應用中&#xff0c;隨著功能復…

現在環保方面有什么新的技術動態

環保領域的技術發展迅速&#xff0c;尤其在“雙碳”目標、數字化轉型和可持續發展背景下&#xff0c;涌現出許多創新技術和應用。以下是當前環保領域的新技術動態&#xff08;截至2024年&#xff09;&#xff1a; 一、碳中和與碳減排技術 CCUS&#xff08;碳捕集、利用與封存&a…

solidwors插件 開發————仙盟創夢IDE

SolidWorks VBS SolidWorks 支持通過 VBScript&#xff08;.vbs&#xff09;腳本 進行簡單的二次開發&#xff08;如自動化建模、批量操作等&#xff09;&#xff0c;但嚴格來說這屬于 腳本編程&#xff0c;而非傳統的插件&#xff08;Plug-in&#xff09;開發&#xff08;插件…

docker(二)初識 docker

在第一章的容器化架構中&#xff0c;我們已經了解到了 docker 是一個容器化技術&#xff0c;本章將詳細介紹什么是虛擬化、容器化技術&#xff0c;以及什么是 docker。 一、物理機 VS 虛擬化 VS 容器化 物理機&#xff1a; 實際的服務器或者計算機。是相對于虛擬機而言的對實體…

ChatGPT + DeepSeek 聯合潤色的 Prompt 模板指令合集,用來潤色SCI論文太香了!

對于非英語母語的作者來說,寫SCI論文的時候經常會碰到語法錯誤、表達不夠專業、結構不清晰以及術語使用不準確等問題。傳統的潤色方式要么成本高、效率低,修改過程又耗時又費力。雖然AI工具可以幫助我們來潤色論文,但單獨用ChatGPT或DeepSeek都會存在內容泛泛、專業性不足的…

python打包exe報錯:處理文件時錯誤:Excel xlsx file; not supported

背景&#xff1a;最近用python寫一個excel解析工具&#xff0c;然后打包成exe可執行文件的時候&#xff0c;遇到這樣的問題 1.在我自己編譯器運行是可以正常將上傳后的excel進行解析&#xff0c;但是在打包成exe后&#xff0c;就無法正常解析excel 問題排查&#xff1a; 1.切換…

Ubuntu操作合集

UFWUncomplicated Firewall 查看狀態和規則&#xff1a; 1查看狀態sudo ufw status&#xff0c; 2查看詳細信息sudo ufw status verbose&#xff0c; 默認策略配置&#xff1a; 1拒絕所有入站sudo ufw default deny incoming 2允許所有出戰sudo ufw default allow outgoing …

怎么用Origin畫出MATLAB效果的3D時頻圖

MATLAB畫3D時頻圖的效果比Origin差遠了....但用Origin去畫MATLAB需要一些過程 本帖讓你輕輕松松把MATLAB的時頻圖搬移到Origin中&#xff0c;然后擁有高級視圖的3D時頻圖&#xff0c;并且可以隨心調整格式 一、數據搬移 首先&#xff0c;在MATLAB中打開時頻圖變量 復制 在O…

OpenEvidence AI臨床決策支持工具平臺研究報告

平臺概述 OpenEvidence是一個專為醫療專業人士設計的臨床決策支持工具,旨在通過整合各類臨床計算器和先進的人工智能技術,提高醫生的診療決策效率和準確性。作為一款綜合性醫療平臺,OpenEvidence將復雜的醫學計算流程簡化,同時提供個性化的臨床建議,使醫生能夠更快、更準…