聚类是一种无监督学习方法,它的目的是将数据集中的数据点划分为若干个相似的子集,称为聚类。
常用聚类方法介绍
代码实现
k-means聚类
# 导入库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
# 使用make_blobs函数生成一个有四个簇的数据集,每个簇有100个观测值和两个特征
X, y = make_blobs(n_samples=400, n_features=2, centers=4)
# 可视化生成的数据集,以第一个特征和第二个特征为例
plt.scatter(X[:, 0], X[:, 1])
plt.xlabel("feature_1")
plt.ylabel("feature_2")
plt.show()
# 使用K-means算法对数据进行聚类,假设有四个簇
kmeans = KMeans(n_clusters=4)
# 训练模型并得到每个观测值的簇标签
kmeans.fit(X)
labels = kmeans.predict(X)
# 可视化聚类结果,以第一个特征和第二个特征为例,并用不同颜色表示不同簇
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap="rainbow")
plt.xlabel("feature_1")
plt.ylabel("feature_2")
plt.show()
# 导入库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 创建一些坐标数据,每个坐标由纬度和经度组成
coordinates = [[40.7128, -74.0060], [34.0522, -118.2437], [41.8781, -87.6298], [29.7604, -95.3698], [39.9526, -75.1652],
[48.8566, 2.3522], [51.5074, -0.1278], [52.5200, 13.4050], [55.7558, 37.6173], [35.6895, 139.6917]]
# 将坐标数据转换为一个二维数组
X = np.array(coordinates)
# 使用K-means算法对坐标数据进行聚类,假设有两个簇
kmeans = KMeans(n_clusters=2)
# 训练模型并得到每个坐标的簇标签
kmeans.fit(X)
labels = kmeans.predict(X)
# 可视化聚类结果,以纬度和经度为例,并用不同颜色表示不同簇
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap="rainbow")
plt.xlabel("latitude")
plt.ylabel("longitude")
plt.show()

DBSCAN密度聚类算法。
from sklearn.cluster import DBSCAN
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt
# 生成月牙形数据
X, y = make_moons(n_samples=200, noise=0.05)
# 创建DBSCAN对象,设置参数eps=0.3, min_samples=5
dbscan = DBSCAN(eps=0.3, min_samples=5)
# 对数据进行聚类
dbscan.fit(X)
# 获取聚类标签
labels = dbscan.labels_
# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.show()
# 导入库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
# 生成随机数据
X = np.random.randn(1000, 2)
# 设置DBSCAN算法参数
eps = 0.3 # 邻域半径
MinPts = 10 # 密度阈值
# 创建DBSCAN对象并进行聚类
dbscan = DBSCAN(eps=eps, min_samples=MinPts)
dbscan.fit(X)
# 获取聚类标签和核心样本索引
labels = dbscan.labels_
core_indices = dbscan.core_sample_indices_
# 绘制聚类结果图
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='rainbow')
plt.scatter(X[core_indices, 0], X[core_indices, 1], marker='o', s=80,
edgecolor='k', facecolor='none', label='Core points')
plt.xlabel('X1')
plt.ylabel('X2')
plt.title('DBSCAN clustering result')
plt.legend()
plt.show()