KModes聚类算法详解

KModes是一种无监督机器学习算法,专门用于对分类变量进行聚类。与基于距离度量的聚类算法不同,KModes通过识别每个聚类中的主要或最频繁值来确定其质心。KModes非常适合对分类数据进行聚类,例如客户人口统计、市场细分或调查响应。它是数据分析师和科学家洞察数据并做出明智决策的强大工具。

KModes与KMeans的区别

KMeans使用数学度量(距离)来聚类连续数据。距离越小,数据点越相似。质心通过均值更新。但对于分类数据点,无法计算距离。因此,选择KModes算法。它使用数据点之间的不相似性(总不匹配数)。不相似性越小,数据点越相似。它使用众数而不是均值。

KModes算法的工作原理

与层次聚类方法不同,需要预先指定K值。KModes算法的工作步骤如下:

  1. 随机选择K个观测值作为领导者/聚类。
  2. 计算不相似性并分配每个观测值到最近的聚类。
  3. 为聚类定义新的众数。
  4. 重复步骤2-3,直到观测值的分配不再变化。

通过一个例子来说明KModes算法的工作步骤。假设有一个数据集,包含了人们的发色、眼色和肤色信息。目标是根据这些信息将人们分组(可能是为了推荐一些造型建议)。发色、眼色和肤色都是分类变量。以下是数据集的样子。

Python中KModes的实现

首先,需要导入必要的库。

import pandas as pd import numpy as np # !pip install kmodes from kmodes.kmodes import KModes import matplotlib.pyplot as plt %matplotlib inline

创建一个玩具数据集。

import pandas as pd import numpy as np # 创建玩具数据集 hair_color = np.array(['blonde', 'brunette', 'red', 'black', 'brunette', 'black', 'red', 'black']) eye_color = np.array(['amber', 'gray', 'green', 'hazel', 'amber', 'gray', 'green', 'hazel']) skin_color = np.array(['fair', 'brown', 'brown', 'brown', 'fair', 'brown', 'fair', 'fair']) person = ['P1','P2','P3','P4','P5','P6','P7','P8'] data = pd.DataFrame({'person':person, 'hair_color':hair_color, 'eye_color':eye_color, 'skin_color':skin_color}) data = data.set_index('person') print(data)

为了找到最佳的K值,可以绘制成本曲线。成本是聚类间所有不相似性的总和。选择成本值较小且出现肘部弯曲的K值。

# 肘部曲线以找到最佳K值 cost = [] K = range(1,5) for num_clusters in list(K): kmode = KModes(n_clusters=num_clusters, init = "random", n_init = 5, verbose=1) kmode.fit_predict(data) cost.append(kmode.cost_) plt.plot(K, cost, 'bx-') plt.xlabel('No. of clusters') plt.ylabel('Cost') plt.title('Elbow Method For Optimal k') plt.show()

可以看到,当K=3时,曲线出现弯曲,表明3是最佳聚类数。

# 使用3个聚类构建模型 kmode = KModes(n_clusters=3, init = "random", n_init = 5, verbose=1) clusters = kmode.fit_predict(data) clusters data.insert(0, "Cluster", clusters, True) data
Q1. K-modes用于什么?
A. K-modes是一种聚类算法,用于数据挖掘和机器学习中,将分类数据聚类成不同的聚类。与处理数值数据的K-means不同,K-modes专注于基于分类属性找到聚类。它适用于具有非数值特征的数据段,如客户偏好、产品类别或人口统计信息。
Q2.Python中Kmodes的功能是什么?
A. 在Python中,Kmodes函数是kmodes库的一部分,该库实现了K-modes聚类算法。这个函数用于对分类数据进行聚类,将相似的数据点根据其分类属性聚类到一起。它接受数据集和所需的聚类数(k)作为输入,然后迭代地将数据点分配到聚类中,并更新聚类中心,直到收敛。Kmodes函数有助于分析和将分类数据聚类成有意义的组,以用于数据分析和模式识别中的各种应用。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485