使用k-means及k-prototype对混合型数据集进行聚类分析

2023-11-15

1. 分析目标

本项目旨在使用聚类算法对110个城市进行分类与排序,以寻找客观真实的城市分层方法、支持业务运营与决策。

2. 数据集

数据集来源于某互联网公司,特征值标签已做脱敏处理。数据集尺寸为111行×5列,第一行为标题行,其余110行为实例。

  • 第一列:城市名,将作为index不参与模型计算;
  • 第二列:特征值a,以数值表现的分类变量,1代表评价最好、4代表最差;
  • 第三列:特征值b,数值型变量,数值越高对业务积极影响越大;
  • 第四列:特征值c,数值型变量,数值越高对业务消极影响越大;
  • 第五列:特征值d,数值型变量,数值越高对业务积极影响越大。

3. 方法论

首先,由于数据集呈现分类变量与数值变量混合的特点,本次数据分析将采用以下两种算法并在分析结束后进行对比择优:

  • K-means算法:需要将分类变量a转换为哑变量,使其成为数值型变量,然后通过计算欧几里得距离得出聚类结果。算法运行结束后将使用轮廓系数评价聚类效果。
  • K-prototype算法:无需创建哑变量,将分别为分类变量计算汉明距离、为数值型变量计算欧几里得距离然后得出聚类结果。算法运行结束后将使用成本函数评价聚类效果。

其次,数值型变量b、c、d的量纲明显不等,为避免量纲影响距离计算中不同变量的权重,需要对变量b、c、d进行处理。由于不知道是否符合正态分布,在这里使用归一化而非标准化。

最后,由于机器无法理解业务场景,算法本身无法对不同聚类进行排序。在找到合理聚类方法后需要人工构建一个聚类评价指标以实现排序。

本项目基于python 3.7.3,使用的库包括pandas、numpy、sklearn、matplotlib、seaborn、kmodes,具体代码详见附录。

4. 预处理

预处理步骤包括:

  • 使用MinMaxScaler对变量b,c,d进行归一化
  • 使用get_dummies为变量a创建哑变量

处理结束后的数据集如下所示(仅展示前五行为例):

城市

a_1

a_2

a_3

a_4

a

b

c

d

三亚

0

0

1

0

3

0.016206

0.009198

0.00757

上海

1

0

0

0

1

1

1

1

东莞

0

0

1

0

3

0.314485

0.187345

0.299205

中山

0

0

0

1

4

0.109215

0.060833

0.057343

临沂

0

0

0

1

4

0.106044

0.035673

0.018547

5. 分析过程

5.1 K-means

 

  • 参与运算的列:a_1,a_2,a_3,a_4,b,c,d
  • 手肘法求解最优k值(聚类数量):k=3
  • k=3时的轮廓系数评价:

  • 聚类间距:

  • 解读:虽然聚类间距良好,但是聚类2的轮廓系数过低,说明聚类2的聚合效果不好。在检视聚类2时发现其包含北京、上海、牡丹江、大庆等城市,有悖常规认知,说明该聚类不合理。
  • 结论:k-means聚类结果不可用。

5.2 K-prototype

  • 参与运算的列:a,b,c,d
  • 手肘法求解最优k(使用成本函数制图):k=4

注1:python中计数从0开始计,所以横轴数值为聚类数量-1

注2:此方法结果具有随机性,有时会产生不止一个肘点,存在最优解和次优解。为确保k=3为最优解,此过程被运行了十次,最后验证最优解众数为3。

  • 解读:分为四个聚类时,四个聚类所包含的城市符合一、二、三、四线城市的常规认知,说明聚类接近真实情况。
  • 结论:K-prototype的聚类结果较为真实客观,可以采用。

6. 聚类排序

为实现聚类排序,首先调取了每个聚类的质点:

 

CentroidsMin-max Scaled

Centroids(原数据)

 

Cluster

a

b

c

d

a

b

c

d

Count

0

4

0.05

0.02

0.01

4

3853.19

6638.98

56.46

48

1

2

0.66

0.52

0.59

2

38517.47

178333.07

3119.33

6

2

2

0.31

0.17

0.15

2

18678.75

60002.46

785.96

24

3

3

0.10

0.04

0.03

3

7053.54

16004.42

148.87

32

此处需要基于业务理解构建一个作为聚类评价指标。四个特征值的业务重要程度一致,因此需要采用等权重计算每个特征值的,但是变量c对总的贡献为负。但是,考虑到量纲的影响,仍需使用归一化的b、c、d作为其。如果将a作为数值型变量进行考量,也应当进行归一化处理,并且应注意数值越大实际上对的贡献越低。综上所述,的构建方法如下:

其中,

经计算,每个聚类的及排名如下:

Cluster

Score

Ranking

0

0.04

4

1

1.40

1

2

0.95

2

3

0.42

3

经检视,聚类1、2、3、0非常接近常规认知中的一、二、三、四线城市,证明排序合理。

 

7. 结论

经过使用k-prototype算法和构建聚类评价指标,成功将110个城市分为四个聚类及聚类排序。同时运用评价指标,结合归一化数据可对个体城市实现细粒度上的评价,从而得到每个聚类内部的城市排名情况或跨四个聚类的总体城市排名:

城市

a

 b

c

 d

cluster

cluster_tag

in-cluster_score

in-cluster_ranking

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用k-means及k-prototype对混合型数据集进行聚类分析 的相关文章

随机推荐

  • Java中的constant是什么_如何在Java中定义常量(Constant)

    Method One interface ConstantInterface String SUNDAY SUNDAY String MONDAY MONDAY String TUESDAY TUESDAY String WEDNESDAY
  • springcloud+vue+nginx+linux项目部署

    一 项目打包 右边栏Maven Projects gt package 进行项目打包 可以把闪电标志点掉 这样会过滤掉test项 二 将jar包上传到服务端 并运行jar包 nohup java jar XXXX jar gt XXXX t
  • 全国职业技能大赛云计算--高职组赛题卷②(私有云)

    全国职业技能大赛云计算 高职组赛题卷 私有云 第一场次题目 OpenStack平台部署与运维 任务1 基础运维任务 5分 任务2 OpenStack搭建任务 15分 任务3 OpenStack云平台运维 15分 任务4 OpenStack云
  • 华为OD机试 Python 最长公共后缀

    描述 你有一堆字符串 你的任务是找出这堆字符串共同拥有的那段尾字符 如果没有共同的尾 就回答 Zero 具体规定 字符串的数量至少为2 最多为1000 每个字符串的字符都是ASCII码里的 所以范围是 1 126 示范 比如 给你 abc
  • BF,KMP,BM三种字符串匹配算法性能比较

    三种最基本的字符串匹配算法是BF KMP以及BM BF算法是最简单直接的匹配算法 就是逐个比较 一旦匹配不上 就往后移动一位 继续比较 所以比较次数很都 关于KMP和BM的详细介绍可以参考下面的两个link 是讲得比较好的 KMP http
  • Xilinx原语使用方法

    以下链接为百度文库链接 没事的时候可以点击看看 学习学习 xilinx原语的使用方法 Xilinx原语的使用方法2
  • 面试官:你来设计一下抖音直播功能测试用例吧!

    实战案例 Q 微博发动态 设计一下测试点 虽说是发动态 但是测试时不能只是关注发动态这一操作的功能 发完动态之后 我们要确保动态要对外可见 对关注的人可见 单单测试发动态这个操作 实际上意义是不大的 毕竟只测发动态 不能实现测试闭环 所以测
  • [STM32F1]STM32F103滴答定时器定时不准?)

    STM32F103滴答定时器定时不准 前几天调了1块F103ZET6的开发板 用了个系统定时器 感觉不准 最终找到原因是因为选错了时钟源 今天来分享一下也算是给大家以后出现问题做个参考吧 说到时钟源 得说到STM32系统时钟的初始化 前面就
  • 深度学习_用LSTM+Attention与Self-Attention

    笔者在重新尝试用深度学习的各个模型对序列进行预测 就LSTM进行一些使用记录 一 一些优化 和keras一样的权重初始化 有时候我们torch训练的LSTM 没有keras好 可以将权重按keras的方式进行初始化 增加attention
  • Neo4j的下载与安装(完整详细版)

    简要 1 jdk安装 2 neo4j下载 3 neo4j环境配置 4 cmd启动 neo4j bat console 注意jdk的版本要11以上才可以和neo4j匹配 但我安装时用了16 0也报错了 然后重新下载了一个11的 就不报错了 具
  • base格式图片转文件存储

  • Docker 宿主机与容器直接文件移动命令

    1 将容器中的文件复制到宿主机 docker cp nginx test etc nginx usr local nginx 说明 nginx test 容器名称 etc nginx 容器目录存放目录 usr local nginx 宿主机
  • STM32使用FAT文件系统-代码简读

    FAT的一些基础知识 概念先看我这一篇 FAT32文件和目录的组织方式 fat32文件系统架构设计 暴躁的野生猿的博客 CSDN博客 fat文件系统的所有外部接口都在ff h中 物理驱动器 逻辑驱动器 一个物理驱动器就是一个真实的存储设备
  • mysql查询包含逗号的数据,并逗号拆分为多行展现

    在做系统开发的时候 有可能是由于之前的遗留问题 导致在数据入库的时候 将多个数据以逗号分隔的实行 存储在一条数据中 例如 ID VALUE 1 yang zheng song 2 zhao qian sun 3 jiang 现在因为新的需求
  • Anaconda创建并管理Python虚拟环境

    在使用Python进行一些开发或分析工作时 需要安装并使用大神们写的一些程序包 有的程序包只支持32位Python环境 有的支持64位Python环境 有的包支持最新版本 有的可能只支持以前版本 3 6或2 x 而且不同包之间还有版本依赖性
  • 基于深度学习OpenCV与python进行字符识别

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 当我们在处理图像数据集时 总是会想有没有什么办法以简单的文本格式检索图像中的这些字符呢 今天我们就一起看看有没有什么简单的办法可以实现这一功能 对于字符识别 我们找到了一
  • 性能测试,服务器资源监控工具nmon常用操作

    在性能测试过程中 对服务端的各项资源使用情况进行监控是很重要的一环 这篇博客 介绍下服务端监控工具 nmon的使用方法 一 认识nmon 1 简介 nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具 它能在系统运行过程
  • Linux驱动开发入门(二)VS code驱动开发配置

    开发环境配置 安装 配置 安装 VS code是一款功能强大的开源编辑器 能够在各个平台安装使用 如Linux Widows Mac 而我们Linux驱动直接运行在Linux上 所以下载安装在Linux平台 示例机系统为Ubuntu 20
  • OPC配置DCOM解决方案

    OPC配置DCOM解决方案 概述 随着对数据重要性的提升以及数据交换问题的重视 大家对免费的OPC server使用有所增加 下面跟大家分享一下解决OPC 配置DCOM困难问题 免去繁琐的工作量 直接导入变量解决OPC配置DCOM问题 适用
  • 使用k-means及k-prototype对混合型数据集进行聚类分析

    1 分析目标 本项目旨在使用聚类算法对110个城市进行分类与排序 以寻找客观真实的城市分层方法 支持业务运营与决策 2 数据集 数据集来源于某互联网公司 特征值标签已做脱敏处理 数据集尺寸为111行 5列 第一行为标题行 其余110行为实例