YellowBrick-聚类评估示例

Yellowbrick库是一个机器学习的诊断可视化平台,可用于引导数据科学家进行模型选择。它用一个新的核心对象扩展了SciKit学习API:可视化工具。可视化工具允许模型作为SciKit学习管道过程的一部分进行拟合和转换,在高维数据转换过程中提供可视化诊断。

在机器学习中,聚类属于无监督机器学习算法,聚类是指将数据分组为类似的对象组成的多个模式的分析过程。聚类算法主要有两类:将相似数据点连接在一起的聚集聚类和试图在数据中找到中心或分区的质心聚类。

目前,YellowBrick提供了两个可视化工具来评估质心机制,尤其是k均值聚类,帮助用户发现聚类度量中的最佳?k参数:

  • KelbowVisualizer根据评分函数可视化集群,在曲线中查找“肘形”。

  • SilhouetteVisualizer在单个模型中可视化每个集群的轮廓分数。

%matplotlib inline

import pandas as pd
import matplotlib as mpl 
import matplotlib.pyplot as plt 

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer

mpl.rcParams["figure.figsize"] = (9,6)

加载数据

对于以下示例,我们将使用Scikit Learn的make_blobs()函数创建一个包含8个随机点簇的二维数据集示例。

# Generate synthetic dataset with 8 blobs
X, y = make_blobs(n_samples=1000, n_features=12, centers=8, shuffle=True, random_state=42)

# 数据样本1000
# 样本的特征数量12
# 聚类数量8

肘形法

k-means是一种简单的无监督机器学习算法,它将数据分组到用户指定的集群数?k中,即使它不是数据集的最佳集群数。

Yellowbrick的KelbowVisualizer实现了“肘形”方法,即通过将k-means模型与?k的值范围相匹配来选择最佳簇数。如果折线图看起来像一个手臂,那么“肘部”(曲线上的拐点)就是一个很好的提示,表明基础模型在这一点上最适合。

在下面的示例中,KelbowVisualizer适合由参数k=(4,12)设置的?k值范围4到11的模型。当模型适合8个簇时,我们可以在图中看到一个“肘形”,在这种情况下,我们知道这是最佳数字,因为我们创建了包含8个簇点的合成数据集。

# Instantiate the clustering model and visualizer
model = KMeans()
visualizer = KElbowVisualizer(model, k=(4,12))

visualizer.fit(X)    # Fit the data to the visualizer
visualizer.poof()    # Draw/show/poof the data

# 横轴:K    左侧纵轴:失真分数(越小越好)  右侧纵轴:拟合时间(约小越好)
# 蓝色线为不同K时的失真分数,淡绿色为拟合时间

轮廓可视化工具

轮廓分析可用于评价聚类之间的密度和分离度。通过平均每个样本的轮廓系数来计算分数,该系数计算为每个样本的平均簇内距离和平均最近簇距离之间的差异,并由最大值归一化。这会产生一个介于-1和+1之间的分数,其中+1附近的分数表示高分离度,而-1附近的分数表示样本可能被分配到了错误的簇。

SilhouetteVisualizer以每个集群为基础显示每个样本的轮廓系数,允许用户可视化集群的密度和分离。这对于确定集群不平衡或通过比较多个可视化工具选择?K的值特别有用。

我们为这些示例创建了示例数据集,所以我们已经知道数据点被分为8个集群。因此,对于第一个轮廓可视化工具示例,我们将?K设置为8,以便在使用?K的最佳值时显示绘图的外观。

请注意,该图包含均匀且长的轮廓。此外,图上的垂直红色虚线表示所有观测的平均轮廓分数。

# Instantiate the clustering model and visualizer 
model = KMeans(8)
visualizer = SilhouetteVisualizer(model)

visualizer.fit(X)    # Fit the data to the visualizer
visualizer.poof()    # Draw/show/poof the data

对于下一个示例,让我们看看当使用?k的非最优值时会发生什么,在本例中是6。

现在我们看到集群1和集群2的宽度都增加了,它们的轮廓系数得分也下降了。这是因为每个轮廓的宽度与分配给集群的样本数成比例。该模型试图将我们的数据放入一个比最优数量更小的集群中,使其中两个集群更大(更宽)但凝聚力更低(正如我们从他们的低平均分数中看到的那样)。

# Instantiate the clustering model and visualizer 
model = KMeans(6)
visualizer = SilhouetteVisualizer(model)

visualizer.fit(X)    # Fit the data to the visualizer
visualizer.poof()    # Draw/show/poof the data

来源:https://github.com/DistrictDataLabs/yellowbrick/blob/develop/examples/clustering.ipynb

发布了227 篇原创文章 · 获赞 94 · 访问量 54万+

猜你喜欢

转载自blog.csdn.net/wiborgite/article/details/96455545