非监督学习(Unsupervised Learning)详解 一、核心理论 定义与本质 非监督学习是机器学习的一种范式,模型从未标记的数据中自主发现隐藏模式、结构或关系 。与监督学习不同,它没有预设的目标变量(标签),而是让数据自己”说话”。
核心公式 : 给定未标记数据集:D = {x⁽¹⁾, x⁽²⁾, ..., x⁽ᵐ⁾} 其中 x⁽ⁱ⁾ ∈ ℝⁿ 是特征向量 目标:发现数据中的潜在结构 S = f(D)
关键特点
无标签驱动 :不需要人工标注的正确答案
探索性分析 :揭示数据内在结构而非预测
模式发现 :识别聚类、异常、关联规则等
降维能力 :将高维数据压缩到低维表示
二、主要任务类型
任务类型
目标
典型算法
输出示例
聚类
数据分组
K-means, DBSCAN
顾客分群
降维
简化数据
PCA, t-SNE
3D可视化
关联规则
发现关系
Apriori
购物篮分析
异常检测
识别异常
Isolation Forest
欺诈交易
密度估计
概率分布
GMM
数据生成
三、经典案例:顾客细分分析 业务场景 : 电商公司有10,000名顾客的购买行为数据,需要识别不同的顾客群体,以便制定精准营销策略。
数据集特征 :
年消费金额
购买频率
平均订单价值
最近购买时间
产品类别偏好
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.preprocessing import StandardScalerfrom sklearn.cluster import KMeansfrom sklearn.decomposition import PCAimport matplotlib matplotlib.rc("font" , family='Microsoft Yahei' ) data = pd.DataFrame({ 'annual_spend' : np.random.normal(1500 , 500 , 10000 ), 'frequency' : np.random.poisson(15 , 10000 ), 'avg_order_value' : np.random.gamma(2 , 50 , 10000 ), 'recency' : np.random.exponential(30 , 10000 ), 'category_pref' : np.random.choice([0.2 , 0.5 , 0.8 ], 10000 ) }) scaler = StandardScaler() scaled_data = scaler.fit_transform(data) inertia = []for k in range (1 , 11 ): kmeans = KMeans(n_clusters=k, random_state=42 ) kmeans.fit(scaled_data) inertia.append(kmeans.inertia_) plt.figure(figsize=(10 , 6 )) plt.plot(range (1 , 11 ), inertia, marker='o' ) plt.xlabel('簇数量 (K)' ) plt.ylabel('簇内平方和' ) plt.title('肘部法则确定最佳K值' ) plt.show() kmeans = KMeans(n_clusters=4 , random_state=42 ) clusters = kmeans.fit_predict(scaled_data) data['cluster' ] = clusters pca = PCA(n_components=2 ) reduced_data = pca.fit_transform(scaled_data) data['pca1' ] = reduced_data[:, 0 ] data['pca2' ] = reduced_data[:, 1 ] plt.figure(figsize=(12 , 8 ))for cluster in sorted (data['cluster' ].unique()): cluster_data = data[data['cluster' ] == cluster] plt.scatter(cluster_data['pca1' ], cluster_data['pca2' ], label=f'Cluster {cluster} ' , alpha=0.6 ) plt.scatter(kmeans.cluster_centers_[:, 0 ], kmeans.cluster_centers_[:, 1 ], marker='X' , s=200 , c='black' , label='质心' ) plt.title('顾客聚类可视化' ) plt.xlabel('PCA 成分 1' ) plt.ylabel('PCA 成分 2' ) plt.legend() plt.show() cluster_profiles = data.groupby('cluster' ).mean()print (cluster_profiles)
四、实际应用场景
市场细分 :
异常检测 :信用卡欺诈检测
推荐系统 :
协同过滤(用户行为聚类)
关联规则(”购买A的顾客也买B”)
图像处理 :图像分割
自然语言处理 :
生物信息学 :