vocus logo

方格子 vocus

[Python教學] Scikit-learn:非監督學習-聚類與降維

更新 發佈閱讀 12 分鐘

歡迎來到Scikit-learn教學系列的第六篇文章!在前幾篇中,我們學習了監督學習的分類與回歸模型,以及模型選擇與超參數調優。這一篇將進入非監督學習的領域,聚焦於聚類降維。我們將介紹非監督學習的基本概念、使用Scikit-learn實現常見的聚類與降維演算法,並通過實作範例展示如何應用這些技術分析無標籤資料。準備好探索資料的隱藏結構吧!


非監督學習概述

非監督學習(Unsupervised Learning)處理沒有標籤的資料,目標是從資料中發現模式或結構。常見應用包括:

  • 聚類(Clustering):將資料分為相似群組,例如客戶分群或圖像分割。
  • 降維(Dimensionality Reduction):將高維資料壓縮到低維,保留重要資訊,方便視覺化或加速模型訓練。

Scikit-learn提供了簡單且強大的工具來實現這些任務。


聚類演算法

聚類演算法將資料點分為若干群組,同一群組內的資料點相似。以下是兩種常見演算法:

  1. K均值聚類(K-Means Clustering):將資料分為K個群組,通過最小化群內方差進行分群。
  2. DBSCAN(Density-Based Spatial Clustering of Applications with Noise):基於資料點的密度進行分群,能識別異常值。


降維技術

降維技術將高維資料映射到低維空間,常用於視覺化或減少計算成本。以下是兩種常見方法:

  1. 主成分分析(Principal Component Analysis, PCA):通過線性變換找到資料的主要變異方向。
  2. t-SNE(t-Distributed Stochastic Neighbor Embedding):非線性降維,特別適合視覺化高維資料。


實作:對客戶資料進行聚類與降維

我們將使用一個模擬的客戶資料集(或Scikit-learn的make_blobs生成合成資料),進行K均值聚類與PCA降維,然後視覺化結果。假設資料包含客戶的消費行為特徵(例如年消費金額、購買頻率等)。

程式碼範例

以下程式碼展示如何對合成資料進行聚類與降維:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import make_blobs
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans, DBSCAN
from sklearn.decomposition import PCA
from sklearn.metrics import silhouette_score

# 生成合成資料
X, y_true = make_blobs(n_samples=300, centers=4, cluster_std=1.0, random_state=42)

# 資料前處理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# K均值聚類
kmeans = KMeans(n_clusters=4, random_state=42)
kmeans_labels = kmeans.fit_predict(X_scaled)
kmeans_silhouette = silhouette_score(X_scaled, kmeans_labels)

# DBSCAN聚類
dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan_labels = dbscan.fit_predict(X_scaled)
dbscan_silhouette = silhouette_score(X_scaled, dbscan_labels) if len(np.unique(dbscan_labels)) > 1 else None

# PCA降維
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

# 視覺化聚類結果
plt.figure(figsize=(12, 5))

# K均值結果
plt.subplot(1, 2, 1)
sns.scatterplot(x=X_pca[:, 0], y=X_pca[:, 1], hue=kmeans_labels, palette='deep', s=100)
plt.title(f'K-Means Clustering (Silhouette: {kmeans_silhouette:.4f})')
plt.xlabel('PCA Component 1')
plt.ylabel('PCA Component 2')

# DBSCAN結果
plt.subplot(1, 2, 2)
sns.scatterplot(x=X_pca[:, 0], y=X_pca[:, 1], hue=dbscan_labels, palette='deep', s=100)
plt.title(f'DBSCAN Clustering (Silhouette: {dbscan_silhouette if dbscan_silhouette else "N/A"})')
plt.xlabel('PCA Component 1')
plt.ylabel('PCA Component 2')

plt.tight_layout()
plt.savefig('clustering_results.png')
plt.show()

# 視覺化PCA解釋方差
explained_variance_ratio = pca.explained_variance_ratio_
plt.figure(figsize=(6, 4))
sns.barplot(x=['PC1', 'PC2'], y=explained_variance_ratio)
plt.title('Explained Variance Ratio by PCA Components')
plt.ylabel('Variance Ratio')
plt.savefig('pca_variance.png')
plt.show()

# 評估K均值不同群數
silhouette_scores = []
k_range = range(2, 7)
for k in k_range:
kmeans = KMeans(n_clusters=k, random_state=42)
labels = kmeans.fit_predict(X_scaled)
score = silhouette_score(X_scaled, labels)
silhouette_scores.append(score)

plt.figure(figsize=(6, 4))
sns.lineplot(x=k_range, y=silhouette_scores, marker='o')
plt.title('Silhouette Score vs Number of Clusters')
plt.xlabel('Number of Clusters (k)')
plt.ylabel('Silhouette Score')
plt.savefig('kmeans_silhouette.png')
plt.show()

程式碼解釋

  1. 資料生成與前處理: 使用make_blobs生成300筆合成資料,包含4個群組。 使用StandardScaler標準化特徵,確保聚類與降維的穩定性。
  2. 聚類: 應用K均值(n_clusters=4)與DBSCAN(eps=0.5, min_samples=5)進行分群。 使用silhouette_score評估聚類品質(值越接近1越好)。
  3. 降維: 使用PCA將資料降至2維,方便視覺化。 繪製散點圖,展示K均值與DBSCAN的聚類結果。
  4. 視覺化: 繪製PCA解釋方差圖,展示每個主成分的貢獻。 繪製不同K值下的Silhouette分數,幫助選擇最佳群數。

運行程式碼後,你會看到K均值與DBSCAN的聚類結果、PCA降維後的散點圖、解釋方差圖,以及Silhouette分數曲線。

vocus|新世代的創作平台
vocus|新世代的創作平台
vocus|新世代的創作平台


練習:對Iris資料集應用聚類與降維

請完成以下練習:

  1. 使用Scikit-learn的load_iris()載入Iris資料集(忽略標籤,僅使用特徵)。
  2. 對特徵進行標準化。
  3. 使用K均值聚類(n_clusters=3)與DBSCAN(自選eps與min_samples)進行分群。
  4. 使用PCA將資料降至2維,繪製K均值與DBSCAN的聚類結果散點圖,保存為iris_clustering.png。
  5. 計算K均值與DBSCAN的Silhouette分數,並在圖表標題中顯示。
  6. 繪製PCA解釋方差圖,保存為iris_pca_variance.png。

以下是起點程式碼:

from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans, DBSCAN
from sklearn.decomposition import PCA
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt
import seaborn as sns

# 載入Iris資料集
iris = load_iris()
X = iris.data

# 你的程式碼從這裡開始...
vocus|新世代的創作平台


總結

恭喜你掌握了非監督學習的基礎!本篇文章介紹了聚類(K均值、DBSCAN)與降維(PCA)的概念與應用,並通過合成資料展示了完整流程。你現在能夠發現資料的隱藏結構並視覺化結果。

在下一篇文章中,我們將學習進階應用 - 管道與模型組合,探索如何簡化工作流程並提升模型表現。請完成練習,並在留言區分享你的Iris資料集聚類圖!

資源與進階學習




留言
avatar-img
追極光的北極熊|軟體工程師的小天地
16會員
170內容數
歡迎來到我的部落格!這裡記錄了軟體工程師的日常生活點滴,並分享程式設計與演算法的實用教學。無論你是初學者還是有經驗的開發者,都能在這裡找到深入淺出的技術解析與實戰技巧。此外,我也會分享工作中的心路歷程與學習心得,讓你不僅學到技術,更能瞭解軟體開發的實際應用與挑戰。希望透過這個平台,能與你共同成長,激發對技術的熱情!
2025/06/20
歡迎來到Scikit-learn教學系列的第五篇文章!我們將介紹交叉驗證、超參數調優方法(網格搜尋與隨機搜尋),以及如何避免過擬合,幫助你選擇最佳模型並優化其參數。準備好讓你的模型更上一層樓吧!
2025/06/20
歡迎來到Scikit-learn教學系列的第五篇文章!我們將介紹交叉驗證、超參數調優方法(網格搜尋與隨機搜尋),以及如何避免過擬合,幫助你選擇最佳模型並優化其參數。準備好讓你的模型更上一層樓吧!
2025/06/10
歡迎來到Scikit-learn教學系列的第四篇文章!在上一篇文章中,我們學習了分類模型,掌握了如何預測離散類別。這一篇將聚焦於回歸模型,這是監督學習的另一大分支,用於預測連續數值。我們將介紹回歸問題、Scikit-learn中常見的回歸演算法,並通過實作範例訓練模型、評估表現並視覺化結果。
Thumbnail
2025/06/10
歡迎來到Scikit-learn教學系列的第四篇文章!在上一篇文章中,我們學習了分類模型,掌握了如何預測離散類別。這一篇將聚焦於回歸模型,這是監督學習的另一大分支,用於預測連續數值。我們將介紹回歸問題、Scikit-learn中常見的回歸演算法,並通過實作範例訓練模型、評估表現並視覺化結果。
Thumbnail
2025/06/04
歡迎來到Scikit-learn教學系列的第三篇文章!在前兩篇中,我們介紹了Scikit-learn的基礎、環境設置以及資料前處理。這一篇將進入監督學習的核心,聚焦於分類模型。我們將學習分類問題的基本概念、使用Scikit-learn實現常見分類演算法,並通過實作範例與評估方法來訓練和評估模型。
Thumbnail
2025/06/04
歡迎來到Scikit-learn教學系列的第三篇文章!在前兩篇中,我們介紹了Scikit-learn的基礎、環境設置以及資料前處理。這一篇將進入監督學習的核心,聚焦於分類模型。我們將學習分類問題的基本概念、使用Scikit-learn實現常見分類演算法,並通過實作範例與評估方法來訓練和評估模型。
Thumbnail
看更多
你可能也想看
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
資料前處理(Data Preprocessing)中的重要角色-缺失值處理。從檢查、刪除到填充缺失值,以及插值法和機器學習算法的應用方法。Pandas 缺失值處理基礎方法、進階填充缺失值、鐵達尼號存活預測資料集的示例和機器學習算法填補缺失值方法的介紹與使用。
Thumbnail
資料前處理(Data Preprocessing)中的重要角色-缺失值處理。從檢查、刪除到填充缺失值,以及插值法和機器學習算法的應用方法。Pandas 缺失值處理基礎方法、進階填充缺失值、鐵達尼號存活預測資料集的示例和機器學習算法填補缺失值方法的介紹與使用。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
本文介紹了AI助手在數據收集和訓練過程中的工作原理和不斷進步的過程。關注的內容包括從公開的網絡資源、書籍、文章等渠道收集數據,數據的清洗和結構化處理,知識庫的增量更新以及訓練算法和模型的優化。如果大家對AI助手的發展還有任何其他感興趣的話題或建議,歡迎隨時告訴我們,讓我們共同探索,攜手進步。
Thumbnail
本文介紹了AI助手在數據收集和訓練過程中的工作原理和不斷進步的過程。關注的內容包括從公開的網絡資源、書籍、文章等渠道收集數據,數據的清洗和結構化處理,知識庫的增量更新以及訓練算法和模型的優化。如果大家對AI助手的發展還有任何其他感興趣的話題或建議,歡迎隨時告訴我們,讓我們共同探索,攜手進步。
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
數據分析與解讀 隨著數據的爆炸式增長,能夠分析、解讀和應用數據的能力變得至關重要。這包括熟悉數據分析工具和技術,如統計學、數據挖掘、機器學習等。然而,僅靠短時間的數據分析並不足以提供深入見解。 要熟悉數據分析工具和技術,如統計學、數據挖掘和機器學習,可以從以下幾個方面入手: 基礎知識的學習
Thumbnail
數據分析與解讀 隨著數據的爆炸式增長,能夠分析、解讀和應用數據的能力變得至關重要。這包括熟悉數據分析工具和技術,如統計學、數據挖掘、機器學習等。然而,僅靠短時間的數據分析並不足以提供深入見解。 要熟悉數據分析工具和技術,如統計學、數據挖掘和機器學習,可以從以下幾個方面入手: 基礎知識的學習
Thumbnail
本文將延續上一篇文章,經由訓練好的VAE模型其中的解碼器,來生成圖片。 [深度學習]訓練VAE模型用於生成圖片_訓練篇 輸入產生的隨機雜訊,輸入VAE的解碼器後,生成的圖片
Thumbnail
本文將延續上一篇文章,經由訓練好的VAE模型其中的解碼器,來生成圖片。 [深度學習]訓練VAE模型用於生成圖片_訓練篇 輸入產生的隨機雜訊,輸入VAE的解碼器後,生成的圖片
Thumbnail
本文將延續上一篇文章,經由訓練好的GAN模型中的生成器來生成圖片 [深度學習][Python]訓練MLP的GAN模型來生成圖片_訓練篇 [深度學習][Python]訓練CNN的GAN模型來生成圖片_訓練篇 相較之下CNN的GAN生成的效果比較好,但模型也相對比較複雜,訓練時間花的也比較
Thumbnail
本文將延續上一篇文章,經由訓練好的GAN模型中的生成器來生成圖片 [深度學習][Python]訓練MLP的GAN模型來生成圖片_訓練篇 [深度學習][Python]訓練CNN的GAN模型來生成圖片_訓練篇 相較之下CNN的GAN生成的效果比較好,但模型也相對比較複雜,訓練時間花的也比較
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News