本篇学习AI人工智能机器学习之聚类分析,以KMeans、AgglomerativeClustering、DBSCAN为例,从代码层面讲述机器学习中的聚类分析。
聚类分析是一种无监督学习的方法,用于将数据集中的样本划分为不同的组(簇),使得同一组中的样本相似度较高,而不同组之间的样本相似度较低。
sklearn.cluster提供了多种聚类算法
本篇,以三个示例讲述聚类分析使用方法:
python安装机器学习库: pip install scikit-learn
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# 生成样本数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
# 创建 KMeans 模型
kmeans = KMeans(n_clusters=4, init='k-means++', max_iter=300, n_init='auto')
kmeans.fit(X)
# 获取聚类结果
y_kmeans = kmeans.predict(X)
# 评估聚类效果 - 轮廓系数(Silhouette Score):衡量样本与其聚类的相似性。值范围在 [-1, 1] 之间,值越大表示聚类效果越好。
score = silhouette_score(X, y_kmeans)
print(f"Silhouette Score: {score:.3f}")
# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75, marker='o')
plt.title("K-Means Clustering")
plt.show()
运行上述代码的输出:
Silhouette Score: 0.682
参数释义:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import AgglomerativeClustering
from sklearn.metrics import silhouette_score
# 生成样本数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
# 创建层次聚类模型
agg_clustering = AgglomerativeClustering(n_clusters=4, metric='euclidean', linkage='ward',)
y_agg = agg_clustering.fit_predict(X)
# 评估聚类效果 - 轮廓系数(Silhouette Score):衡量样本与其聚类的相似性。值范围在 [-1, 1] 之间,值越大表示聚类效果越好。
score = silhouette_score(X, y_kmeans)
print(f"Silhouette Score: {score:.3f}")
# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_agg, s=50, cmap='viridis')
plt.title("Agglomerative Clustering")
plt.show()
运行上述代码的输出:
Silhouette Score: 0.682
参数释义:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import DBSCAN
from sklearn.metrics import silhouette_score
# 生成样本数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
# 创建 DBSCAN 模型
dbscan = DBSCAN(eps=0.5, min_samples=5)
y_dbscan = dbscan.fit_predict(X)
# 评估聚类效果 - 轮廓系数(Silhouette Score):衡量样本与其聚类的相似性。值范围在 [-1, 1] 之间,值越大表示聚类效果越好。
score = silhouette_score(X, y_kmeans)
print(f"Silhouette Score: {score:.3f}")
# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_dbscan, s=50, cmap='viridis')
plt.title("DBSCAN Clustering")
plt.show()
运行上述代码的输出:
Silhouette Score: 0.682
参数释义:
本篇以KMeans、AgglomerativeClustering、DBSCAN为例,从代码层面讲述机器学习中的聚类分析,同时使用轮廓系数评估了聚类效果。每种算法都有其独特的优缺点,适用于不同类型的数据集。在实际应用中,选择合适的聚类算法和优化参数是获得良好聚类效果的关键。通过可视化和评估指标,可以更好地理解聚类结果的质量。