【机器学习系列(3)】无监督学习实战:聚类与降维的核心技术
一、无监督学习概述
无监督学习(Unsupervised Learning) 从无标签数据中发现隐藏模式。主要应用于:
- 数据聚类(Group similar data)
- 异常检测(Identify outliers)
- 特征降维(Reduce dimensionality)
二、K-Means聚类算法详解
算法步骤
- 随机选择K个初始质心
- 将数据点分配到最近的质心
- 重新计算质心位置
- 重复2-3步直到收敛
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
# 生成模拟数据
X, _ = make_blobs(n_samples=500, centers=3, random_state=42)
# 训练模型
kmeans = KMeans(n_clusters=3, n_init=10)
kmeans.fit(X)
# 查看聚类结果
print(f"质心位置:\n{kmeans.cluster_centers_}")
print(f"前10个样本的簇标签:{kmeans.labels_[:10]}")
三、主成分分析(PCA)降维
数学原理
通过正交变换将相关特征转换为线性无关的主成分,保留最大方差方向
from sklearn.decomposition import PCA
from sklearn.datasets import load_digits
# 加载手写数字数据集
digits = load_digits()
X = digits.data
# 应用PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 查看方差解释率
print(f"各主成分方差解释率:{pca.explained_variance_ratio_}")
四、聚类质量评估方法
1. 内部评估(无需真实标签)
from sklearn.metrics import silhouette_score
# 计算轮廓系数(-1到1,越大越好)
score = silhouette_score(X, kmeans.labels_)
print(f"轮廓系数:{score:.2f}")
2. 外部评估(已知真实标签)
from sklearn.metrics import adjusted_rand_score
# 生成真实标签
_, y_true = make_blobs(n_samples=500, centers=3, random_state=42)
# 计算调整兰德指数(-0.2到1,越大越好)
ari = adjusted_rand_score(y_true, kmeans.labels_)
print(f"调整兰德指数:{ari:.2f}")
五、实战项目:顾客分群分析
import pandas as pd
from sklearn.preprocessing import StandardScaler
# 加载数据集(假设包含年龄、消费频率、平均消费金额)
data = pd.read_csv("customers.csv")
X = data[['age', 'purchase_freq', 'avg_spending']]
# 数据预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 降维可视化
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
# 聚类分析
kmeans = KMeans(n_clusters=4)
clusters = kmeans.fit_predict(X_scaled)
# 分析聚类特征
data['cluster'] = clusters
print(data.groupby('cluster').mean())
六、下期预告
《机器学习系列(4)》将深入探讨:
- 关联规则挖掘(Apriori算法)
- 异常检测常用方法
- 推荐系统基础原理
最佳实践提示:
- 使用
scaler.inverse_transform可还原标准化前的数据尺度 - 通过
PCA().fit(X).cumsum()查看累计方差解释率 - 尝试不同聚类算法:
DBSCAN,AgglomerativeClustering
1208

被折叠的 条评论
为什么被折叠?



