【sklearn | 6】無監督學習與聚類分析

在前幾篇教程中,我們探討了 sklearn 的基礎、高級功能,異常檢測與降維,時間序列分析與自然語言處理,模型部署與優化,以及集成學習與模型解釋。本篇教程將專注于無監督學習和聚類分析,這在探索性數據分析和數據挖掘中非常重要。

無監督學習

無監督學習是一種無需預先標記數據的學習方法,主要用于發現數據的內在結構和模式。常見的無監督學習任務包括聚類分析、降維和異常檢測。

聚類分析

聚類分析是將數據集劃分為若干組(簇)的過程,使得同一簇中的數據點彼此相似,而不同簇中的數據點差異較大。常見的聚類算法包括 k 均值(K-Means)、層次聚類(Hierarchical Clustering)和 DBSCAN。

k 均值(K-Means)

k 均值是一種迭代聚類算法,通過最小化簇內數據點到簇中心的距離來劃分數據。

import numpy as np
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# 加載數據集
iris = load_iris()
X = iris.data# 訓練 k 均值模型
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)# 聚類結果
labels = kmeans.labels_
centers = kmeans.cluster_centers_# 可視化聚類結果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='red', marker='X', s=200)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('K-Means Clustering')
plt.show()
層次聚類(Hierarchical Clustering)

層次聚類通過構建樹狀結構(樹狀圖)來進行聚類,常用的方法包括凝聚聚類(Agglomerative Clustering)。

from sklearn.cluster import AgglomerativeClustering
import scipy.cluster.hierarchy as sch# 訓練層次聚類模型
hc = AgglomerativeClustering(n_clusters=3, affinity='euclidean', linkage='ward')
labels = hc.fit_predict(X)# 繪制樹狀圖
dendrogram = sch.dendrogram(sch.linkage(X, method='ward'))
plt.title('Dendrogram')
plt.xlabel('Samples')
plt.ylabel('Euclidean distances')
plt.show()# 可視化聚類結果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('Hierarchical Clustering')
plt.show()
DBSCAN

DBSCAN 是一種基于密度的聚類算法,適用于發現任意形狀的簇。

from sklearn.cluster import DBSCAN# 訓練 DBSCAN 模型
dbscan = DBSCAN(eps=0.5, min_samples=5)
labels = dbscan.fit_predict(X)# 可視化聚類結果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('DBSCAN Clustering')
plt.show()

降維

降維是通過減少數據的特征數量來簡化數據,同時保留數據的重要結構和模式。常見的降維方法包括主成分分析(PCA)和 t-SNE。

主成分分析(PCA)

PCA 通過線性變換將數據投影到低維空間,同時盡量保留數據的方差。

from sklearn.decomposition import PCA# 訓練 PCA 模型
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)# 可視化降維結果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=iris.target, cmap='viridis')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA of IRIS dataset')
plt.show()
t-SNE

t-SNE 是一種非線性降維方法,適用于高維數據的可視化。

from sklearn.manifold import TSNE# 訓練 t-SNE 模型
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X)# 可視化降維結果
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=iris.target, cmap='viridis')
plt.xlabel('t-SNE Component 1')
plt.ylabel('t-SNE Component 2')
plt.title('t-SNE of IRIS dataset')
plt.show()

異常檢測

異常檢測是識別數據集中異常或不正常數據點的過程。常用的異常檢測方法包括孤立森林(Isolation Forest)和局部異常因子(Local Outlier Factor, LOF)。

孤立森林(Isolation Forest)

孤立森林通過構建隨機樹來隔離數據點,計算其異常分數。

from sklearn.ensemble import IsolationForest# 訓練孤立森林模型
iso_forest = IsolationForest(contamination=0.1, random_state=42)
labels = iso_forest.fit_predict(X)# 可視化異常檢測結果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('Isolation Forest Anomaly Detection')
plt.show()
局部異常因子(LOF)

LOF 通過計算局部密度偏差來識別異常點。

from sklearn.neighbors import LocalOutlierFactor# 訓練 LOF 模型
lof = LocalOutlierFactor(n_neighbors=20, contamination=0.1)
labels = lof.fit_predict(X)# 可視化異常檢測結果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('Local Outlier Factor Anomaly Detection')
plt.show()

綜合示例項目:無監督學習與聚類分析

步驟1:數據預處理與聚類分析

from sklearn.datasets import make_blobs
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans, DBSCAN
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt# 生成數據集
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 標準化數據
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# K-Means 聚類
kmeans = KMeans(n_clusters=4)
kmeans_labels = kmeans.fit_predict(X_scaled)# DBSCAN 聚類
dbscan = DBSCAN(eps=0.3, min_samples=10)
dbscan_labels = dbscan.fit_predict(X_scaled)# PCA 降維
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)# 可視化 K-Means 聚類結果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=kmeans_labels, cmap='viridis')
plt.title('K-Means Clustering')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()# 可視化 DBSCAN 聚類結果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=dbscan_labels, cmap='viridis')
plt.title('DBSCAN Clustering')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()

步驟2:異常檢測

from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor# 孤立森林異常檢測
iso_forest = IsolationForest(contamination=0.1, random_state=42)
iso_forest_labels = iso_forest.fit_predict(X_scaled)# 局部異常因子異常檢測
lof = LocalOutlierFactor(n_neighbors=20, contamination=0.1)
lof_labels = lof.fit_predict(X_scaled)# 可視化孤立森林異常檢測結果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=iso_forest_labels, cmap='viridis')
plt.title('Isolation Forest Anomaly Detection')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()# 可視化局部異常因子異常檢測結果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=lof_labels, cmap='viridis')
plt.title('Local Outlier Factor Anomaly Detection')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()

總結

通過本篇專題教程,我們學習了 sklearn 中的無監督學習和聚類分析。無監督學習包括聚類分析、降維和異常檢測。聚類分析方法包括 k 均值、層次聚類和

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

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

相關文章

github有趣項目:自制“我的世界” project make

videocodehttps://www.youtube.com/watch?v4O0_-1NaWnY,https://www.bilibili.com/video/BV1oj411p7qM/?https://github.com/jdah/minecraft-weekend MAKE git clone --recurse-submodules https://github.com/jdah/minecraft-weekend.git 正克隆到 minecraft-weekend... …

x264 參考幀管理源碼分析

x264參考幀管理 在x264中,參考幀的管理是一個重要的組成部分,因為它涉及到視頻編碼過程中的幀間預測。以下是關于x264參考幀管理的一些關鍵點: 參考幀的分類:在x264中,幀可以分為幾類,包括參考幀、當前編碼幀和未使用幀等。 參考幀的作用:參考幀用于幀間預測,通過比較當…

【Qt】之【Get√】QByteArray寫入txt文件、QByteArray截取數據

寫入文件 QFile file(path);if (file.open(QIODevice::WriteOnly)) {// 將 QImage 保存到文件file.write(jsonData.toByteArray());// 關閉文件file.close();SCDebug << "saved to" << path;} else {SCDebug << "Failed to open file for wri…

直播分享|深入解析ts-morph:通過注釋生成類型文檔

? ? 你看小狗在叫 樹葉會笑 風聲在呢喃? ? 乘風追夢&#xff0c;童心未泯 OpenTiny 預祝所有大朋友、小朋友兒童節快樂~ 與此同時&#xff0c;OpenTiny 貢獻者直播也即將開啟啦~ 直播主題&#xff1a;【深入解析ts-morph&#xff1a;通過注釋生成類型文檔】 6月1日&am…

碳課堂|入門必看!碳足跡(CFP)主要國際標準一覽

一、碳足跡概念 碳足跡&#xff08;Carbon FootPrint&#xff0c;CFP&#xff09;是用來衡量個體、組織、產品或國家在一定時間內直接或間接導致的二氧化碳排放量的指標。產品碳足跡屬于碳排放核算的一種&#xff0c;一般指產品從原材料加工、運輸、生產到出廠銷售等流程所產生…

NeuralForecast 推理 - 從csv文件里讀取數據進行推理

NeuralForecast 推理 - 從csv文件里讀取數據進行推理 flyfish from ray import tunefrom neuralforecast.core import NeuralForecast from neuralforecast.auto import AutoMLP from neuralforecast.models import NBEATS, NHITS import torch import torch.nn as nn import…

【Java】剛剛!突然!緊急通知!垃圾回收!

【Java】剛剛&#xff01;突然&#xff01;緊急通知&#xff01;垃圾回收&#xff01; 文章目錄 【Java】剛剛&#xff01;突然&#xff01;緊急通知&#xff01;垃圾回收&#xff01;從C語言的內存管理引入&#xff1a;手動回收Java的垃圾回收機制引用計數器循環引用問題 可達…

SpringBoot六種API請求參數讀取方式

SpringBoot六種API請求參數讀取方式 同步請求和異步請求 同步: 指單線程依次做幾件事異步: 指多線程同時做幾件事 同步請求: 指客戶端瀏覽器只有一個主線程, 此線程負責頁面的渲染和發出請求等操作, 如果此主線程發出請求的話則停止渲染而且會清空頁面顯示的內容 直到服務器響…

優化基礎(二):線性組合、仿射組合、錐組合、凸組合、線性集合、仿射集合、錐集合、凸集合的理解

文章目錄 前言組合線性組合 (linear combination)仿射組合 (affine combination)錐組合 (conic combination)凸組合 (convex combination) 集合仿射集合凸集合 練習&#xff1a;哪個圖形是凸的&#xff0c;哪個是仿射的&#xff1f;參考資料 前言 組合側重于描述由一些基點生成…

越洗越黑”的Pandas數據清洗

引言 先來一個腦筋急轉彎活躍一下枯燥工作日常&#xff0c;問&#xff1a;“什么東西越洗越黑&#xff1f;” 有沒有猜到的&#xff1f;猜不到我告訴你吧&#xff01; 答案是“煤球”。那么這個腦機急轉彎跟我們要討論的話題有沒有關系呢&#xff1f; 嗯是的&#xff0c;還是沾…

三相智能電表通過Modbus轉Profinet網關與PLC通訊案例

Modbus轉Profinet網關&#xff08;XD-MDPN100/300&#xff09;的主要功能是實現Modbus協議和Profinet協議之間的轉換和通信。Modbus轉Profinet網關集成了Modbus和Profinet兩種協議&#xff0c;支持Modbus RTU主站/從站&#xff0c;并可以與RS485接口的設備&#xff0c;它自帶網…

「前端+鴻蒙」核心技術HTML5+CSS3

1、CS架構與BS架構 CS架構(Client-Server):客戶端/服務器架構。用戶通過客戶端軟件與服務器進行交互,客戶端需要安裝特定的軟件才能訪問服務器上的資源。BS架構(Browser-Server):瀏覽器/服務器架構。用戶通過瀏覽器訪問服務器上的網頁,無需安裝額外的軟件,所有的交互都…

接口請求參數為文件時如何測試

方法 工具&#xff1a;Postman 步驟&#xff1a;①點擊body②點擊form-data③選擇key類型為fie ④輸入參數名⑤選擇參數上傳⑥發送請求

對稱二叉樹(oj題)

一、題目鏈接https://leetcode-cn.com/problems/symmetric-tree/ 二、題目思路 給你一個二叉樹的根節點 root &#xff0c; 檢查它是否軸對稱的思路: 1.將該樹的左子樹和右子樹&#xff0c;當做兩棵樹&#xff0c;調用 判斷兩棵樹是否對稱相等的函數 2.判斷兩顆樹是否對稱相…

告別低效提問:掌握BARD技巧,讓AI成為你的智能助手!

今天只聊一個主題&#xff1a;提示詞 Prompt。 說到提示詞&#xff0c;大家可能都看過GPT的高級示例&#xff0c;那些幾百字的提示詞&#xff0c;寫起來確實不容易。 那么&#xff0c;如何寫出同樣效果的提示詞呢&#xff1f; 有沒有什么公式或者系統學習的方法&#xff1f;…

在Linux/Ubuntu/Debian中使用lshw查看系統信息

在Linux/Ubuntu/Debian中使用lshw查看系統信息 lshw 是一個用于顯示硬件配置的命令&#xff0c;可以提供系統硬件的詳細信息&#xff0c;包括 CPU、內存、硬盤、主板等。該命令需要超級用戶權限來獲取詳細信息。 常見用法&#xff1a; 顯示所有硬件信息&#xff1a; sudo l…

木葉飛舞之【機器人ROS2】篇章_第三節、給turtlebot3安裝realsense深度相機

我們做視覺slam時會用到深度相機&#xff0c;但是gazebo的turtlebot3中只有rgb相機&#xff0c;沒有深度&#xff0c;因此本節會修改代碼&#xff0c;來給我們的小烏龜增加一個rgbd相機。 效果展示 發布topic如下圖 圖片大小都是640*480 1. 修改model.sdf文件 1.1 路徑位置…

射頻功率限幅器簡略

在功率輸入保護方面&#xff0c;限幅器是最好用的器件之一&#xff0c;可以保護后級電路不受超限功率的損害&#xff0c;限幅器其實像TVS功能一樣&#xff0c;讓超過閾值的功率釋放到接地上&#xff0c;來達到限制幅度的目的&#xff0c;目前限幅器的限幅幅度大多都大于15dBm,很…

啟智CV機器人,ROS, ubuntu 18.04

資料&#xff1a; https://wiki.ros.org/kinetic/Installation/Ubuntu https://blog.csdn.net/qq_44339029/article/details/120579608 http://wiki.ros.org/melodic/Installation/Ubuntu https://github.com/6-robot/wpb_cv 一、安裝ros環境 裝VM。 裝ubuntu18.04 desktop.…

100道面試必會算法-27-美團2024面試第一題-前綴和矩陣

100道面試必會算法-27-美團2024面試第一題-前綴和矩陣 問題解讀 給定一個 n x n 的二進制矩陣&#xff0c;每個元素是 0 或 1。我們的任務是計算矩陣中所有邊長為 k 的子矩陣中&#xff0c;包含特定數量 1 的情況。例如&#xff0c;我們希望找到所有邊長為 k 的子矩陣中包含 k…