【笔记】【机器学习基础】DBSCAN

三、DBSCAN

优点:它不需要用户先验地设置簇的个数,可以划分具有复杂形状的簇,还可以找出不属于任何簇的点。

原理:识别特征空间的“拥挤”区域中的点,在这些区域中许多数据点靠近在一起。这些区域被称为特征空间中的密集区域。
思想:簇形成数据的密集区域,并由相对较空的区域分隔开。

核心样本:在密集区域内的点被称为核心样本(或核心点)。DBSCAN有两个参数:min_samples和eps。如果在距一个给定数据点eps的距离内至少有min_samples个数据点,那么这个数据点就是核心样本,小于则是噪声。

一共有三种类型的点:核心点,与核心点的距离在eps之内的点(叫做边界点)和噪声。

(1)应用于数据集(模拟数据make_blobs)

from sklearn.cluster import DBSCAN
X, y = make_blobs(random_state=0, n_samples=12)

dbscan = DBSCAN()
clusters = dbscan.fit_predict(X)
print("Cluster memberships:\n{}".format(clusters))

Cluster memberships:
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]

数据点都默认被分配了-1,表示噪声

(2)调节参数,eps和min_samples不同取值下的簇分配

mglearn.plots.plot_dbscan()

在这里插入图片描述
在这张图中,属于簇的点是实心的,噪声点为空心。核心样本显示为较大的标记,边界点则显示为较小的标记。
增大eps,扩大核心点的领域,会让一个簇变得更大
增大min_samples会让一个簇中包含更多的点,同时核心点变小,噪声变多
1、eps决定了点与点之间“接近的含义”。eps小,表示没有点是核心样本,eps大,可能所有点成单个簇
2、min_samples是为了判断稀疏区域内的点被标记为异常值还是形成自己的簇

(3)应用于数据集make_moons
设置eps可以隐式地控制找到的簇的个数,使用StandardScaler或MinMaxScaler对数据进行缩放之后,有时会更容易找到eps的较好取值,因为使用这些缩放技术将确保所有特征具有相似的范围

X, y = make_moons(n_samples=200, noise=0.05, random_state=0)

scaler = StandardScaler()
scaler.fit(X)
X_scaled = scaler.transform(X)

dbscan = DBSCAN()
clusters = dbscan.fit_predict(X_scaled)

plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=clusters, cmap=mglearn.cm2, s=60)
plt.xlabel("Feature 0")
plt.ylabel("Feature 1")

在这里插入图片描述
由于算法找到了我们想要的簇的个数,因此参数设置的效果很好。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值