机器学习—聚类5-3(DBSCAN算法)
使用DBSCAN对环形数据做聚类
主要步骤流程:
- 1. 导入包
- 2. 生成数据并可视化
- 3. 使用DBSCAN做聚类并可视化
- 3.1 参数组合1
- 3.2 参数组合2
- 3.3 参数组合3
- 3.4 参数组合4
- 4. 使用K-Means做聚类并可视化
- 5. 打印调整兰德指数
1. 导入包
In [2]:
# 导入包
import numpy as np
import matplotlib.pyplot as plt
2. 生成数据并可视化
In [3]:
# 生成数据
from sklearn.datasets import make_circles
X, y = make_circles(n_samples=750, factor=0.3, noise=0.1, random_state=1)
In [4]:
# 可视化数据
plt.figure()
plt.scatter(X[:,0], X[:,1], c=y)
Out[4]:
In [5]:
X.shape
Out[5]:
In [6]:
y.shape
Out[6]:
In [7]:
y
Out[7]:
3. 使用DBSCAN做聚类并可视化
3.1 参数组合1
In [8]:
# 使用DBSCAN做聚类
from sklearn.cluster import DBSCAN
y_dbscan_pred = DBSCAN(eps=0.05, min_samples=10).fit_predict(X)
In [9]:
# 可视化DBSCAN聚类效果
plt.figure()
plt.scatter(X[:,0], X[:,1], c=y_dbscan_pred)
Out[9]:
3.2 参数组合2
In [10]:
# 使用DBSCAN做聚类
from sklearn.cluster import DBSCAN
y_dbscan_pred = DBSCAN(eps=0.15, min_samples=10).fit_predict(X)
In [11]:
# 可视化DBSCAN聚类效果
plt.figure()
plt.scatter(X[:,0], X[:,1], c=y_dbscan_pred)
Out[11]:
3.3 参数组合3
In [12]:
# 使用DBSCAN做聚类
from sklearn.cluster import DBSCAN
y_dbscan_pred = DBSCAN(eps=0.3, min_samples=10).fit_predict(X)
In [13]:
# 可视化DBSCAN聚类效果
plt.figure()
plt.scatter(X[:,0], X[:,1], c=y_dbscan_pred)
Out[13]:
3.4 参数组合4
In [14]:
# 使用DBSCAN做聚类
from sklearn.cluster import DBSCAN
y_dbscan_pred = DBSCAN(eps=0.15, min_samples=50).fit_predict(X)
In [15]:
# 可视化DBSCAN聚类效果
plt.figure()
plt.scatter(X[:,0], X[:,1], c=y_dbscan_pred)
Out[15]:
4. 使用K-Means做聚类并可视化
In [16]:
# 使用K-Means做聚类
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters = 2, init = 'k-means++', n_init=10, max_iter=300, random_state = 0)
kmeans.fit(X)
y_kmeans_pred = kmeans.predict(X)
In [17]:
# 可视化K-means聚类效果
plt.figure()
plt.scatter(X[:,0], X[:,1], c=y_kmeans_pred)
Out[17]:
5. 打印调整兰德指数
In [18]:
# 使用DBSCAN做聚类(调用最优的参数组合)
from sklearn.cluster import DBSCAN
y_dbscan_pred = DBSCAN(eps=0.15, min_samples=10).fit_predict(X)
由于样本数据有标签,所以可以用调整兰德指数衡量模型性能
In [19]:
# 打印出调整兰德指数
from sklearn import metrics
print("DBSCAN的调整兰德指数是:%0.3f" % metrics.adjusted_rand_score(y, y_dbscan_pred))
print("K-Means的调整兰德指数是:%0.3f" % metrics.adjusted_rand_score(y, y_kmeans_pred))
由打印出的兰德系数可见,DBSCAN算法的效果远远优于K-Means算法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了