尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

【机器学习入门】K-means 聚类和 DBSCAN 聚类

【机器学习入门】K-means 聚类和 DBSCAN 聚类 文章目录前言一、聚类算法简介1.1 什么是聚类1.2 聚类的目标1.3 常见聚类算法二、K-means聚类算法2.1 K-means简介2.2 sklearn KMeans 重要 API 参数2.3 轮廓系数聚类评价指标2.4 代码示例2.5 K‑means 优缺点三、DBSCAN 密度聚类3.1 DBSCAN 核心概念3.2 sklearn DBSCAN API 参数3.3 代码示例3.4 DBSCAN 优缺点四、K‑means VS DBSCAN 对比总结总结前言聚类属于无监督机器学习算法数据集没有标签算法依靠样本特征之间的相似度自动把样本划分成不同组别。聚类能够帮助我们快速发现数据中隐藏的规律与结构。一、聚类算法简介1.1 什么是聚类在机器学习中根据学习方式不同可以分为监督学习Supervised Learning无监督学习Unsupervised Learning半监督学习Semi-supervised Learning其中监督学习的数据具有明确标签模型通过已有标签学习规律。无监督学习的数据没有人工标注结果模型需要自己发现数据中的隐藏结构。聚类Clustering就是无监督学习中最经典的方法之一。1.2 聚类的目标聚类希望将相似的数据样本划分到同一个集合中使同一类别内部样本尽可能相似不同类别之间差异尽可能明显。1.3 常见聚类算法机器学习中常见聚类算法算法特点K-means基于距离和质心的划分聚类DBSCAN基于密度的聚类层次聚类通过树形结构逐渐合并高斯混合模型(GMM)基于概率分布二、K-means聚类算法2.1 K-means简介K-means 是最经典、应用最广泛的聚类算法之一。它属于基于距离的划分式聚类算法。核心思想给定 K 个类别随机选择 K 个中心点计算每个样本距离各中心点的距离将样本划分到最近的类别更新每个类别中心不断重复直到中心点不再变化优化目标最小化簇内样本到所属簇质心的平方误差和min ⁡ ∑ i 1 K ∑ x ∈ c i ( c i − x ) 2 \min \sum_{i1}^{K} \sum_{x\in c_i} (c_i - x)^2mini1∑K​x∈ci​∑​(ci​−x)2c i c_ici​代表第i \mathrm{i}i个簇的质心x xx是簇内样本点。距离补充欧氏距离d ( x 1 − x 2 ) 2 ( y 1 − y 2 ) 2 d \sqrt{(x_1- x_2)^2 (y_1- y_2)^2}d(x1​−x2​)2(y1​−y2​)2​Kmeans 默认使用曼哈顿距离d ∣ x 1 − x 2 ∣ ∣ y 1 − y 2 ∣ d |x_1- x_2| |y_1- y_2|d∣x1​−x2​∣∣y1​−y2​∣Kmeans 一般不使用该距离2.2 sklearn KMeans 重要 API 参数函数原型classsklearn.cluster.KMeans(n_clusters8,initk‑means,n_init10,max_iter300,random_stateNone)参数作用n_clustersK 值需要人为指定聚类簇的数量默认 8init初始化质心策略k‑means加速收敛random随机选取样本做初始质心n_init使用不同初始质心运行算法的次数返回 inertia 最优的结果max_iter单次 Kmeans 最大迭代轮数random_state随机种子固定可保证实验可复现重要属性labels_每个样本的聚类标签cluster_centers_各个簇质心坐标inertia_所有样本到对应簇质心距离平方之和簇内误差平方和。2.3 轮廓系数聚类评价指标轮廓系数用于评估聚类效果取值范围[ − 1 , 1 ] [-1, 1][−1,1]数值越接近1 11代表聚类效果越好接近− 1 -1−1代表样本分错簇接近0 00代表样本处在簇边界上。S ( i ) b ( i ) − a ( i ) max ⁡ { a ( i ) , b ( i ) } S(i)\frac{b(i)-a(i)}{\max \{a(i), b(i)\}}S(i)max{a(i),b(i)}b(i)−a(i)​a ( i ) a(i)a(i)样本i ii到同簇内其他样本的平均距离衡量簇内紧密程度a aa越小簇内越紧凑。b ( i ) b(i)b(i)样本i ii到其它各个簇样本平均距离的最小值衡量簇与簇之间分离程度b bb越大簇区分越明显。注意轮廓系数要求聚类结果簇数k ≥ 2 k\ge2k≥2且不能全部样本归为同一个簇。2.4 代码示例importpandasaspdfromsklearn.clusterimportKMeansfromsklearnimportmetricsfromsklearn.preprocessingimportStandardScaler beerpd.read_table(data.txt,sep ,encodingutf-8,enginepython)xbeer[[calories,sodium,alcohol,cost]]# 特征标准化scalerStandardScaler()x_scaledscaler.fit_transform(x)scores[]k_listrange(2,10)forkink_list:kmeansKMeans(n_clustersk,random_state42,n_init10)labelskmeans.fit_predict(x_scaled)scoremetrics.silhouette_score(x_scaled,labels)scores.append(score)print(fk{k},轮廓系数{score:.4f})best_kk_list[scores.index(max(scores))]print(f\n最优K值{best_k}最大轮廓系数{max(scores):.4f})2.5 K‑means 优缺点优点算法简单、计算速度快适合球形分布、凸型簇的常规数据集。缺点K 值需要人工确定对量纲敏感必须做标准化只能发现球形簇无法识别任意形状的簇容易陷入局部最优对噪声点、异常值比较敏感依赖初始质心容易收敛到局部最优解。三、DBSCAN 密度聚类K‑means 是基于距离划分簇DBSCAN 是基于密度的聚类算法不需要预先指定聚类数量 K可以发现任意形状的簇同时识别噪声点离群样本。3.1 DBSCAN 核心概念ϵ \epsilonϵ邻域 (eps)给定样本半径 eps 范围内的样本集合核心对象某个样本的ϵ \epsilonϵ邻域内样本数量≥ min_samples \ge \text{min\_samples}≥min_samples直接密度可达点 B 在点 A 的 eps 邻域内且 A 是核心对象则 B 由 A 直接密度可达密度可达一串直接密度可达链接起来的样本边界点不是核心对象但可以被某个核心对象密度可达噪声点 (离群点)既不是核心点也不属于任何簇的边界点标签记为− 1 -1−1。聚类逻辑把密度相连的样本归为同一个簇低密度区域样本标记为噪声。3.2 sklearn DBSCAN API 参数classsklearn.cluster.DBSCAN(eps0.5,min_samples5,metriceuclidean)参数说明eps邻域半径距离阈值eps 过大簇会合并过小会产生大量噪声点min_samples成为核心对象eps 邻域最少需要的样本数eps 固定min_samples 越大更多样本被标记噪声metric距离度量默认欧式距离euclidean属性labels_样本标签− 1 -1−1代表噪声点0 、 1 、 2 … 0、1、2…0、1、2…代表各个簇编号。⚠️重要提醒DBSCAN 对特征尺度高度敏感必须进行标准化处理3.3 代码示例importpandasaspdfromsklearn.preprocessingimportStandardScalerfromsklearn.clusterimportDBSCANfromsklearn.metricsimportsilhouette_score datapd.read_table(data.txt,sep ,encodingutf-8,enginepython)xdata[[calories,sodium,alcohol,cost]]# 标准化scalerStandardScaler()x_scaledscaler.fit_transform(x)eps_lst[0.5,0.7,0.9,1.1,1.3,1.5,1.7,1.9]min_sam[2,3]score_list[]param_list[]forepsineps_lst:formin_sampleinmin_sam:dbscanDBSCAN(epseps,min_samplesmin_sample)labelsdbscan.fit_predict(x_scaled)n_clusterslen(set(labels))-(1if-1inlabelselse0)n_noiselist(labels).count(-1)# 簇数小于2跳过轮廓系数计算ifn_clusters2:print(feps{eps},min_samples{min_sample},簇数{n_clusters},噪声数{n_noise}跳过轮廓系数)continuescoresilhouette_score(x_scaled,labels)print(feps{eps},min_samples{min_sample},簇数{n_clusters},噪声数{n_noise},轮廓系数{score:.4f})score_list.append(score)param_list.append((eps,min_sample))iflen(score_list)0:max_idxscore_list.index(max(score_list))best_eps,best_minparam_list[max_idx]best_scorescore_list[max_idx]print(f\n最优参数eps{best_eps}, min_samples{best_min},最大轮廓系数{best_score:.4f})else:print(\n遍历参数后没有满足条件的聚类结果)3.4 DBSCAN 优缺点优点不需要预先指定聚类数量 K可以识别任意形状、非球形的簇自带噪声识别能够标记离群样本对异常点鲁棒性优于 K‑means。缺点对参数eps、min_samples非常敏感调参难度大高维数据距离度量失效聚类效果变差当数据集中不同簇的密度差异较大时DBSCAN 的聚类质量会下降样本量很大时计算开销较高。四、K‑means VS DBSCAN 对比总结对比维度K‑meansDBSCAN聚类思想划分式基于距离找球形簇密度聚类基于样本稠密程度是否需要指定簇数量必须指定 K不需要 K自动生成簇簇形状仅擅长球形凸簇支持任意形状簇噪声处理对噪声敏感无法识别噪声点自动识别噪声点标签− 1 -1−1数据预处理需要标准化必须标准化调参对象K 值eps、min_samples两个参数适用场景样本分布均匀、球形簇数据量大存在不规则簇、存在离群噪声样本选择小技巧如果样本大致呈球状分布优先 K‑means速度快如果簇形状不规则数据存在异常噪声点优先 DBSCAN无论哪个算法标准化几乎都是必做步骤不同量纲特征会严重破坏距离计算。总结K‑means 和 DBSCAN 是无监督聚类的两大代表算法一个代表划分式聚类一个代表密度聚类。K‑means 简单高效但是对簇形状有强假设DBSCAN 更加灵活能捕捉不规则簇和噪声但是调参成本更高。在做聚类任务时要结合数据集分布特点选择算法同时做好数据预处理搭配轮廓系数等指标评估聚类质量。
返回列表