【聚类】K-modes和K-prototypes——适合离散数据的聚类方法

news/2024/5/20 7:28:43 标签: 聚类, 机器学习, 人工智能

应用场景:

假设一批数据,每一个样本中,有唯一标识(id)、品类(cate_id)、受众(users, 小孩、老人、中年等)等属性,希望从其中找出一些样本,使得这些样本覆盖的品类、受众等最广。

分析:

思路是使用聚类的方式,每个簇选一个样本。观察数据,都为类别特征,常用的kmeans聚类方法,会使用欧式距离,计算两个样本之间的距离,来判断该样本是否数据该簇。对于类别特征来说,就算表示为0 ,1, 2,这些数字没有大小的意义,只代表某一个属性。所以我们不可以使用判断距离的方式,划分簇。

经过调研,认识到了两个新的聚类方法:K-modes和K-prototypes。下面分别介绍下两个方法。

K-modes

适用于离散数据,采用汉明距离

K-modes算法是按照k-means算法的核心内容进行修改,主要有以下两点:

1.度量方式。样本之间的距离D,属性相同为0,不同为1,并将所有属性结有相加。因此D越大,即他的不相关程度越强(与欧式距离代表的意义是一样的);

汉明距离:Hamming Distance也能用来计算两个向量的相似度,通过比较向量每一位是否相同,若不同则汉明距离加1,这样得到汉明距离。向量相似度越高,对应的汉明距离越小。如10001001和10110001有3位不同。

2.更新modes,使用一个簇的每个属性出现频率最大的那个属性值作为代表簇的属性值(如{[a,b] [a,c] [c,b] [b,c]})代表模式为[a,b]或者[a,c];

from kmodes.kmodes import KModes
 
KM = KModes(n_clusters=i,init='Huang').fit_predict(X)

K-prototypes

适用于混合数据(有离散有连续)

K-Prototype算法是结合K-Means与K-modes算法,针对混合属性的,解决2个核心问题如下:

1.度量具有混合属性的方法是,数值属性采用K-means方法得到P1,分类属性采用K-modes方法P2,那么D=P1+a*P2,a是权重,如果觉得分类属性重要,则增加a,否则减少a,a=0时即只有数值属性

2.更新一个簇的中心的方法,方法是结合K-Means与K-modes的更新方法


from kmodes.kprototypes import KPrototypes
 
KP = KPrototypes(n_clusters=self.k, init='Cao').fit_predict(X, categorical=self.dis_col)


http://www.niftyadmin.cn/n/5241314.html

相关文章

使用 PyTorch 完全分片数据并行技术加速大模型训练

本文,我们将了解如何基于 PyTorch 最新的 完全分片数据并行 (Fully Sharded Data Parallel,FSDP) 功能用 Accelerate 库来训练大模型。 动机 🤗 随着机器学习 (ML) 模型的规模、大小和参数量的不断增加,ML 从业者发现在自己的硬件…

10W 音频功率放大电路芯片TDA2003,可用于汽车收音机及收录机中作音频功率放大器,内部具有短路保护和过热保护等功能

TDA2003 用于汽车收音机及收录机中作音频功率放大器。 采用 TO220B5 封装形式。 主要特点: ⚫ 内部具有短路保护和过热保护。内部具有地线开路、电源极性接 反和负载泄放电压反冲等保护电路。 ⚫ 输出电流大。 ⚫ 负载电阻可低至 1.6  。 ⚫ 谐波失真…

有关Nginx docker容器版部署访问403的解决

文章目录 问题记录解决结果 问题记录 nginx.conf日志中出现,403问题,由于容器版的nginx中没有任何编辑工具,所以不太容器在容器中查看nginx文件的配置内容可能是权限问题,分析为主要是代理请求出现问题,没有代理到正确…

神经网络中的 Grad-CAM 热图(Gradient-weighted Class Activation Mapping)

Grad-CAM(Gradient-weighted Class Activation Mapping)是一种用于可视化卷积神经网络(CNN)中特定类别的激活区域的方法。其基本思想是使用网络的梯度信息来获取关于特定类别的空间定位信息。 Grad-CAM 的具体公式如下&#xff1…

MySQL三 | 多表查询

目录 多表查询 内连接 隐式内连接 显示内连接 外连接 左外连接 右外连接 自连接 子查询 多表查询 笛卡尔积:集合A和集合B的所有组合情况 A * B 在多表查询时应消除无效的笛卡尔积 内连接 查询的是两张表交集的地方 隐式内连接 SELECT 字段列表 FROM 表1&#xf…

UEC++ 探索虚幻5笔记(捡金币案例) day12

吃金币案例 创建金币逻辑 之前的MyActor_One.cpp,直接添加几个资源拿着就用 //静态网格UPROPERTY(VisibleAnywhere, BlueprintReadOnly)class UStaticMeshComponent* StaticMesh;//球形碰撞体UPROPERTY(VisibleAnywhere, BlueprintReadWrite)class USphereCompone…

python中获取函数签名(参数)

说明 有些时候我们不清楚python的函数的具体签名的时候,调用可能会报错,这里就是介绍一种简单的方法来获取函数的签名参数。 语法 获取函数的参数签名可以使用 组件.函数.__signature__示例: 我想要获取streamlit.text_input函数的参数签…

JavaScript 流程控制

JavaScript 流程控制 通过一些特定的语句,让程序按照我们需要的方式顺序执行、选择执行或者重复执行 顺序结构 按照位置,从上往下一条语句一条语句执行 选择结构 按照给定的一个或者多个条件选择某些语句执行某些语句不执行 分支结构 单路分支 根据某个…