【机器学习】聚类算法DBSCAN、K-means、Mean Shift对比分析及具体代码实现
【机器学习】聚类算法DBSCAN、K-means、Mean Shift对比分析及具体代码实现
一、DBSCAN算法(具有噪声的基于密度的聚类方法)
1.算法原理
基于数据分布密度不同对数据进行聚类,把高于设定阈值的密度区域划分同一数据簇。主要特点是不需预先设定形成的簇类的数量并且能在噪声数据集中实现任意形状的聚类
2.算法实现流程图
3.参数说明
- Eps:领域半径
- min_samples:密度阈值,即簇内点的个数
4.具体代码实现
import pandas as pd
import numpy as np
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt#读入数据
csv_file = pd.read_csv("now1.csv")
data = []
for i in range(1, len(csv_file)):line = csv_file[i:i + 1]x = line['x'][i]y = line['y'][i]data.append([x, y])#转换成数组
data = np.array(data)
X = data#实现DBSCAN,设置半径为20,样本个数为200
db = DBSCAN(eps=20, min_samples=200).fit(X)
core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
core_samples_mask[db.core_sample_indices_] = True
labels = db.labels_n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
n_noise_ = list(labels).count(-1)# 画图
unique_labels = set(labels)
colors = [plt.cm.Spectral(each) for each in np.linspace(0, 1, len(unique_labels))]
for k, col in zip(unique_labels, colors):if k == -1:col = [0, 0, 0, 1]class_member_mask = labels == kxy = X[class_member_mask & core_samples_mask]plt.plot(xy[:, 0],xy[:, 1],"o",tuple(col),"k",0.01)y = X[class_member_mask & ~core_samples_mask]plt.plot(xy[:, 0],xy[:, 1],"o",tuple(col),"k",0.01,)
plt.title("Estimated number of clusters: %d" % n_clusters_)
plt.savefig("DBSCAN.png")
plt.show()
调参位置为:db = DBSCAN(eps=20, min_samples=200).fit(X)
5.算法结果示意图
二、K-means算法
1.算法原理
K-means算法是一种无监督学习,一般用欧式距离作为衡量数据对象间相似度的指标,相似度与数据对象间的距离成反比,相似度越大,距离越小。算法需要预先指定初始聚类数目k以及k个初始聚类中心,根据数据对象与聚类中心之间的相似度,不断更新聚类中心的位置,不断降低类簇的误差平方和SSE,当SSE不再变化或目标函数收敛时,聚类结束,得到最终结果
2.算法实现流程图
3.参数说明
- K:聚类个数
4.具体代码实现
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans#读入数据
csv_file = pd.read_csv("now1.csv")
data = []
for i in range(1, len(csv_file)):line = csv_file[i:i + 1]x = line['x'][i]y = line['y'][i]data.append([x, y])#转换成数组
data = np.array(data)
X = data
for index, k in enumerate((2, 3, 4, 5)):plt.subplot(2, 2, index + 1)y_pred = KMeans(n_clusters=k, random_state=None).fit_predict(X) # 预测值plt.scatter(X[:, 0], X[:, 1], c=y_pred, s=10, edgecolor='k', linewidths=0.001)plt.text(.99, .01, ('k=%d' % (k)), # 文本注释,标注关键信息transform=plt.gca().transAxes, size=10, horizontalalignment='right')
plt.savefig("Kmeans.png")
plt.show()
调参位置:for index, k in enumerate((2, 3, 4, 5)):
5.算法结果示意图
三、Mean Shift算法(均值漂移算法)
1.算法原理
基于质心的算法,通过更新质心的候选位置,这些侯选位置通常是所选定区域内点的均值。然后,这些候选位置在后处理阶段被过滤以消除近似重复,从而形成最终质心集合。
2.算法实现流程图
3.参数说明
- bandwidth:带宽,可理解为半径
4.具体代码实现
import numpy as np
import pandas as pd
from sklearn.cluster import MeanShift
import matplotlib.pyplot as plt
from itertools import cycle#读入数据
csv_file = pd.read_csv("now1.csv")
data = []
for i in range(0, len(csv_file)):line = csv_file[i:i + 1]x = line['x'][i]y = line['y'][i]data.append([x, y])data = np.array(data)
X = data#bandwidth可以理解为半径
ms = MeanShift(bandwidth=200, bin_seeding=True)
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_
labels_unique = np.unique(labels)
n_clusters_ = len(labels_unique)print("number of estimated clusters : %d" % n_clusters_)#画图
plt.figure(1)
plt.clf()
colors = cycle("bgrcmykbgrcmykbgrcmykbgrcmyk")
for k, col in zip(range(n_clusters_), colors):my_members = labels == kcluster_center = cluster_centers[k]plt.plot(X[my_members, 0], X[my_members, 1], col + ".")plt.plot(cluster_center[0],cluster_center[1],"o",markerfacecolor=col,markeredgecolor="k",markersize=0.01,)
plt.title("Estimated number of clusters: %d" % n_clusters_)
plt.savefig("Mean Shift.png")
plt.show()
调参位置:ms = MeanShift(bandwidth=200, bin_seeding=True)
5.算法结果示意图
now1.csv
文件下载MathorCup D题
【机器学习】聚类算法DBSCAN、K-means、Mean Shift对比分析及具体代码实现相关推荐
- 机器学习 聚类篇——DBSCAN的参数选择及其应用于离群值检测
机器学习 聚类篇--DBSCAN的算法原理.参数选择及其应用于离群值检测 摘要 1. DBSCAN算法原理 1.1 基本概念定义 1.2 算法流程 2. 参数选择 2.1 领域半径:Eps的选取方法( ...
- 炼数成金数据分析课程---17、机器学习聚类算法(后面要重点看)
炼数成金数据分析课程---17.机器学习聚类算法(后面要重点看) 一.总结 一句话总结: 大纲+实例快速学习法 主要讲解常用聚类算法(比如K-means等)的原理及python代码实现:后面学习聚类的 ...
- Python数据分析笔记:聚类算法之K均值
我们之前接触的所有机器学习算法都有一个共同特点,那就是分类器会接受2个向量:一个是训练样本的特征向量X,一个是样本实际所属的类型向量Y.由于训练数据必须指定其真实分类结果,因此这种机器学习统称为有监督 ...
- 基于机器学习聚类算法寻找美国职业篮球联赛NBA中的超级强队
聚类算法 聚类算法是机器学习中经典的非监督学习算法之一,相比于分类算法,聚类不依赖预定义的样本标签,而是让算法通过对数据的学习从而找到其内部的规律,该算法对有相同特征的样本进行聚类,聚类的时候,我们并 ...
- 密度聚类算法DBSCAN实战及可视化分析
密度聚类算法DBSCAN实战及可视化分析 目录 密度聚类算法DBSCAN实战及可视化分析 DBSCAN实战及聚类效果可视化 构建分类算法获得预测推理能力 DBSCAN实战及聚类效果可视化 DBSCAN ...
- 聚类算法中 K均值聚类(KMeans)的python实现
** 聚类算法中 K均值聚类(KMeans)的python实现 ** import numpy as np import matplotlib.pyplot as plt from sklearn.d ...
- 机器学习--聚类算法(无监督学习)--K-Menas/BIRCH/CURE/DBSCAN/MDCA算法理论
目录 一 聚类算法概述 1 聚类的概念 2 聚类算法的评价指标 1)轮廓系数(无需目标属性的评价指标) 二 基于划分的聚类算法(K-Means) 1 K-Means算法 1)算法流程 2)算法的优缺点 ...
- 机器学习之原型聚类算法(K均值和高斯混合)
"原型"是指样本空间中具有代表性的点. 原型聚类算法是假设聚类结构能通过一组原型进行刻画,在现实聚类任务中极为常用. 通常情形下,算法先对原型进行初始化,然后对原型进行迭代更新求解 ...
- 机器学习——聚类算法
文章目录 聚类算法 1 k-Means算法 1.1 基本概念 1.2 k-Means算法原理 1.3 k-Means算法的可视化演示 1.4 实验 2 DBSCAN算法 2.1 基本概念 2.2 DB ...
最新文章
- 电子工程师要学的课程有哪些?
- NET使用了UpdatePanel后如何弹出对话框!
- 【转】用例结构优化心得
- 计算机视觉领域热门研究方向state-of-art算法实时更新
- jpa 自定义sql if_mybatis仿jpa 使用@createDate @updateDate
- Navicat Premium 怎么安装比较快
- 误删path怎么办(已重启)
- java.lang.SecurityException: Prohibited package name: java.xxx.xxxx
- Win10怎么把登录密码去掉
- CentOS 7 安裝FastDFS V6.0.3
- ElasticJob‐Lite:作业监听器
- Android dev 设备访问权限 777,Android Studio:/ dev / kvm设备权限被拒绝
- UT-FT-ST测试
- Java设计模式之装饰器模式 (转)
- 人工智能的主要研究方向都有哪些
- 爬山法求解八皇后问题的全部解法
- 商场促销的语音如何录制?两个小方法来帮忙
- CRM客户关系管理系统界面截图
- 腾讯信鸽推送平台集成中的问题
- STM32的内部Flash读写