基本算法——聚类

目录

创建工程

加载数据

聚类算法

评估

完整代码

结论


相比于有监督的分类器,聚类的目标是从一组未打标签的数据中识别相似对象组。它可 以用于识别同类群体的代表性样本,找到有用与合适的分组;或者找到不寻常的样本,比如 异常值。

下面通过分析银行数据集演示如何实现聚类。数据集包含600个实例,每个实例用11个属性 进行描述,这些属性包括年龄、性别、地区、收入、婚姻状况、是否有子女、汽车拥有情况、存 款活动、当前活动、房地产抵押、PEP。分析中,我们将尝试使用EMExpectation Maximization, 期望最大化)聚类算法识别常见的客户组。

EM工作过程如下:给定一组簇(clusters),EM首先为每个实例指派一个属于某个特定簇的 概率分布。比如,起初有3个簇ABC,一个实例分别属于簇ABC的概率分布依次为0.7、 0.10、0.20。第二步中,EM重新评估每个类的概率分布的参数向量。算法不断对这两步做迭代, 直到参数收敛或者达到迭代的最大值。

对于EM中使用的簇数,可以手动设置,也可以通过交叉验证进行自动设置。另外一个确 定数据集中簇数的方法是肘部法则(elbow-method),这个方法会查看特定簇数所解释的偏差 百分比。使用该方法会不断增加簇数,直到新加的簇不会带来很多信息,即只能解释很少的额外 差异。

创建工程

依然使用上一篇文章的工程

加载数据

        // 从文件中读取数据集Instances data = new Instances(new BufferedReader(new FileReader(PATH)));

聚类算法

创建聚类模型的过程与创建分类模型的过程很类似,即加载数据与创建模型。Weka中,使 用weka.clusterers包实现聚类算法

        // 创建一个新的聚类器实例EM model = new EM();// 构建聚类模型model.buildClusterer(data);// 打印聚类模型的详细信息System.out.println(model);
该模型识别出如下 6 个簇:
EM
==Number of clusters selected by cross validation: 6
Number of iterations performed: 100Cluster
Attribute              0        1        2        3        4        5(0.1)   (0.13)   (0.26)   (0.25)   (0.12)   (0.14)
======================================================================
age0_34            10.0535  51.8472 122.2815  12.6207   3.1023   1.094835_51           38.6282  24.4056  29.6252  89.4447  34.5208   3.375552_max          13.4293    6.693   6.3459  50.8984   37.861  81.7724[total]         62.1111  82.9457 158.2526 152.9638  75.4841  86.2428
sexFEMALE          27.1812  32.2338  77.9304  83.5129  40.3199  44.8218MALE            33.9299  49.7119  79.3222  68.4509  34.1642   40.421[total]         61.1111  81.9457 157.2526 151.9638  74.4841  85.2428
regionINNER_CITY      26.1651  46.7431   73.874  60.1973  33.3759  34.6445TOWN            24.6991  13.0716  48.4446  53.1731   21.617  17.9946RURAL            8.4113  12.7871  21.7634  25.7529  11.1622  22.1231SUBURBAN         3.8356   11.344  15.1706  14.8404  10.3289  12.4805[total]         63.1111  83.9457 159.2526 153.9638  76.4841  87.2428
income0_24386         22.5301  77.3981 150.8728  35.3652   3.0947   1.739124387_43758     38.0636   4.5119   6.2909 113.3875  70.4654   8.280843759_max        1.5174   1.0357   1.0889   4.2111    1.924  76.2228[total]         62.1111  82.9457 158.2526 152.9638  75.4841  86.2428
marriedNO              15.0163  34.8213  48.6021  32.7954  49.5126  29.2523YES             46.0948  47.1244 108.6506 119.1684  24.9715  55.9904[total]         61.1111  81.9457 157.2526 151.9638  74.4841  85.2428
children0                2.1776  53.2782  55.6363  92.5938   32.663  32.65111               51.5497  26.7841  22.0968   1.9302  18.9418  19.69732                6.4264   2.3777  56.5523  25.7573  23.3335  25.55293                2.9574   1.5057  24.9671  33.6825   1.5458   9.3415[total]         63.1111  83.9457 159.2526 153.9638  76.4841  87.2428
carNO              29.7462  47.4075  89.7372  69.5918  34.7847  38.7326YES             31.3649  34.5382  67.5154   82.372  39.6993  46.5101[total]         61.1111  81.9457 157.2526 151.9638  74.4841  85.2428
save_actNO               6.7118  58.9844  49.6095  39.7853  35.7784   1.1306YES             54.3993  22.9613 107.6431 112.1785  38.7056  84.1121[total]         61.1111  81.9457 157.2526 151.9638  74.4841  85.2428
current_actNO              12.8656  21.8946  35.3337  46.1845  15.9243  18.7973YES             48.2455  60.0511 121.9189 105.7792  58.5598  66.4455[total]         61.1111  81.9457 157.2526 151.9638  74.4841  85.2428
mortgageNO              34.2814  47.6791 108.1248  95.3628  54.1015  57.4504YES             26.8297  34.2666  49.1278   56.601  20.3826  27.7924[total]         61.1111  81.9457 157.2526 151.9638  74.4841  85.2428
pepYES             59.0226  72.2592  18.5799   3.8416  68.4764  57.8202NO               2.0885   9.6865 138.6727 148.1222   6.0076  27.4226[total]         61.1111  81.9457 157.2526 151.9638  74.4841  85.2428-8.773422954298614

第一行表明有6个簇,第一列指出属性及相应范围。比如,属性age划分为3 个区段:0~3435~5152~max。左侧列表示有多少个实例归入每个簇的特定范围,比如0~34 年龄组的客户大部分位于簇#2122个实例)。

评估

可以使用对数似然度量(log likelihood measure)评估聚类算法的质量,即测量被识别的簇的 一致程度。数据集划分为多个折(folds),针对每个折运行聚类。这么做的动机是,如果聚类算 法为相似数据(该数据不用于拟合参数)给出高概率,那么它在捕获数据结构方面可能做得很好。

        // 使用 10 折交叉验证评估模型的对数似然值double logLikelihood = ClusterEvaluation.crossValidateModel(model, data, 10, new Random(1));// 打印对数似然值System.out.println(logLikelihood);

评估结果:-8.773422954298614

完整代码

    private static String PATH = ClassUtils.getDefaultClassLoader().getResource("bank-data.arff").getPath();public static void main(String[] args) throws Exception {// 从文件中读取数据集Instances data = new Instances(new BufferedReader(new FileReader(PATH)));// 创建一个新的聚类器实例EM model = new EM();// 构建聚类模型model.buildClusterer(data);// 打印聚类模型的详细信息System.out.println(model);// 使用 10 折交叉验证评估模型的对数似然值double logLikelihood = ClusterEvaluation.crossValidateModel(model, data, 10, new Random(1));// 打印对数似然值System.out.println(logLikelihood);}

结论

1. 聚类数量: 交叉验证选择的最佳聚类数量为 6 个。
2. 迭代次数: 模型进行了 100 次迭代。
3. 聚类特征分布:
   - **年龄(age)**:
     - 年龄在 52 岁以上的个体在聚类 5 中有较高的比例。
     - 年龄在 35-51 岁的个体在聚类 3 中有较高的比例。
   - **性别(sex)**:
     - 女性的比例在聚类 2、3 和 6 中较高。
     - 男性的比例在聚类 1 和 4 中较高。
   - **地区(region)**:
     - 内城(INNER_CITY)和郊区(SUBURBAN)的个体在聚类 0 和 5 中较高。
     - 农村和城镇的个体在聚类 2 和 3 中较高。
   - **收入(income)**:
     - 高收入个体(43759_max)在聚类 5 中比例较高。
     - 中等收入个体(24387_43758)在聚类 3 中比例较高。
   - **婚姻状况(married)**:
     - 未婚个体在聚类 4 中比例较高。
     - 已婚个体在聚类 3 和 6 中比例较高。
   - **子女数量(children)**:
     - 无子女的个体在聚类 3 中比例较高。
     - 有多个子女的个体在聚类 0 和 5 中比例较高。
   - **是否有车(car)**:
     - 无车的个体在聚类 2 中比例较高。
     - 有车的个体在聚类 3 和 4 中比例较高。
   - **是否有储蓄账户(save_act)**:
     - 有储蓄账户的个体在聚类 6 中比例较高。
     - 无储蓄账户的个体在聚类 5 中比例较低。
   - **是否有当前账户(current_act)**:
     - 无当前账户的个体在聚类 0 和 5 中比例较低。
     - 有当前账户的个体在聚类 3 和 4 中比例较高。
   - **是否有抵押贷款(mortgage)**:
     - 无抵押贷款的个体在聚类 3 和 4 中比例较高。
     - 有抵押贷款的个体在聚类 6 中比例较低。
   - **是否有个人养老计划(pep)**:
     - 有个人养老计划的个体在聚类 1 和 4 中比例较高。
     - 无个人养老计划的个体在聚类 2 和 3 中比例较高。

4. 目标变量:结果显示目标变量的得分(-8.773422954298614),这可能是一个对数似然值或某种损失函数的值,表示模型在训练数据上的拟合程度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/65556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day21-ubuntu入门

小趣味docker 1.安装docker&#xff0c;从阿里云的yum yum install docker -y 2.需要提前准备好docker镜像&#xff0c;确保可用 docker -v 3.导入该游戏镜像&#xff08;先用systemctl start docker&#xff09; docker load < game_v2.tar 4.一条命令&#xff0c;在…

vue3 学习与实战

1. Vue3简介 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;n 经历了&#xff1a;4800次提交、40个RFC、600次PR、300贡献者 官方发版地址&#xff1a;Release v3.0.0 One Piece vuejs/core 截止2023年10月&#xff0c;最…

Three.js滚动画案例精选

今天为大家带来 3 个基于滚动动画的网站 Demo&#xff0c;它们不仅视觉效果惊艳&#xff0c;而且每个案例的源码都已开源在 GitHub&#xff0c;方便大家学习和借鉴&#xff01; 3D照片墙滚动 通过滚动操作实现 3D 网格效果以及动态过渡动画。这个案例使用了 GSAP 的 SplitTex…

MBox20边缘计算网关助力各种数字化升级

在当今全球范围内数字化浪潮的强劲推动下&#xff0c;企业对数据处理与传输能力的需求正以前所未有的速度增长。制造业的心脏地带——工厂&#xff0c;其数字化转型已成为驱动生产效率飞跃、成本控制优化及竞争力显著提升的关键路径。在此过程中&#xff0c;明达技术MBox20边缘…

el-table动态行和列及多级表头

主页面 <template><div class"result-wrapper"><dynamic-table :table-data"tableData" :table-header"tableConfig" :tableTitle"tableTitle" :flowParams"flowParams"></dynamic-table></div…

RocketMQ(二)RocketMQ实战

文章目录 一、RocketMQ实战1.1 批量消息发送1.2 消息发送队列自选择1.3 事务消息1.4 SpringCloud集成RocketMQ 二、最佳实践2.1 生产者2.1.1 发送消息注意事项2.1.2 消息发送失败处理方式 2.2 消费者2.2.1 消费过程幂等2.2.2 消费打印日志 2.3 Broker 三、相关问题3.1 为什么要…

2-194基于matlab的四足机器人行走程序设计

基于matlab的四足机器人行走程序设计&#xff0c;正运动设计&#xff0c;逆运动学解算&#xff0c;步态设计。可定义机身高、步长、步高、一个摆相的市场等参数。输出四足机器人动态行走结果&#xff0c;及摆相示意图。程序已调通&#xff0c;可直接运行。 2-194基于matlab的四…

android studio android sdk下载地址

android studio安装后&#xff0c;因为公司网络原因&#xff0c;一直无法安装android sdk 后经过手机网络&#xff0c;安装android sdk成功如下&#xff0c;也可以手动下载后指定android sdk本地目录 https://dl.google.com/android/repository/source-35_r01.zip https://dl…

字符串和对象之间的转换

使用&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version> </dependency> public class Demo3 {public static void main(String[] args) {Person person …

window如何将powershell以管理员身份添加到右键菜单?(按住Shift键显示)

window如何将powershell以管理员身份添加到右键菜单&#xff1f; 在 Windows 中&#xff0c;将 PowerShell 以管理员身份添加到右键菜单&#xff0c;可以让你在需要提升权限的情况下快速打开 PowerShell 窗口。以下是详细的步骤&#xff0c;包括手动编辑注册表和使用注册表脚本…

【NebulaGraph】变化的多跳查询

【NebulaGraph】变化的多跳查询 1. 需求2. 解决方案2.1 确定查询结构2.2 构建查询语句 3. 追加需求&#xff1a;如果增加每一跳都要指定查询某SPACE下的Tag&#xff0c;或者不查询某个Tag怎么办 1. 需求 存在多跳请求&#xff0c;其中每一跳是从上一跳查询结果为基础的。但是 …

华为ensp-BGP联盟

学习新思想&#xff0c;争做新青年&#xff0c;今天学习BGP联盟 实验介绍 一个BGP联盟是一个具有内部层次结构的AS。一个BGP联盟由若干个子AS 组成&#xff0c;子AS也称为成员AS。对于一个BGP联盟&#xff0c;其成员AS内部的各路由器之间需要建立全互联的IBGP邻居关系或使用B…

内部类(3)

大家好&#xff0c;今天我们继续来看看内部类&#xff0c;今天我们来学习一下内部类的分类&#xff0c;我们来看看一共有几种&#xff0c;它们有什么作用&#xff0c;那么话不多说&#xff0c;我们直接开始。 9.1 内部类的分类 先来看下,内部类都可以在一个类的哪些位置进行定…

【Python】ftp和sftp工具类,使用python实现文件的上传与下载

文章目录 1. ftp工具类2. sftp工具类 1. ftp工具类 编写ftp工具类&#xff0c;我这里取名为 ftp_util.py import os from ftplib import FTPclass FtpUtil:def __init__(self, ip, username, password, port21):self.ip ipself.username usernameself.password passwordse…

Airbnb/Booking 系统设计(high level architecture)

原文地址 CodeKarle: Airbnb System Design | Booking.com System Design B站搜 “Airbnb System Design” 有视频版本 需求&#xff1a; 功能性需求 系统用户包括商家和客人。 Hotel - 商家&#xff08;拥有hotel的人&#xff09; onboarding - 商家可以入住系统。 update…

【QT开发自制小工具】PDF/图片转excel---调用百度OCR API接口

前言 前几年WPS还可以免费处理5页以内的PDF转excel&#xff0c;现在必须付费了&#xff0c;而且其他在线的PDF转excel都是要收费的&#xff0c;刚好前几年调研过百度OCR的高精度含位置接口&#xff0c;依然是每天可以免费调用50次&#xff0c;本篇是基于此接口&#xff0c;开发…

Vscode左大括号不另起一行、注释自动换行

参考大佬的博客VSCode 格式化 cpp 文件时配置左大括号不换行_vscode大括号不换行-CSDN博客 Clang_format_style {BasedOnStyle: Chromium, IndentWidth: 4}

原神新角色玛薇卡配队攻略 原神玛薇卡技能机制

原神在2025年1月1日即将迎来一次版本更新&#xff0c;玛薇卡、茜特菈莉、蓝砚三名角色即将上线&#xff0c;今天就给大家抢先介绍一下玛薇卡的机制和配队。 技能机制 战技挂火&#xff1a;战技不用充能就可以输出&#xff0c;但是挂火频率和范围比香菱低一些&#xff0c;适合搭…

8086汇编(16位汇编)学习笔记10.寄存器总结

8086汇编(16位汇编)学习笔记10.寄存器总结-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 寄存器 8086CPU有14个寄存器 它们的名称为&#xff1a; AX、BX、CX、DX、SI、DI、SP、BP、 IP**、CS、DS、ES、**SS、PSW。 8086CPU所有的寄存器都是16位的&#…

llamafactory报错:双卡4090GPU,训练qwen2.5:7B、14B时报错GPU显存不足(out of memory),轻松搞定~~~

实际问题场景&#xff1a; 使用llamafactory进行微调qwen2.5 7B和14B的大模型时&#xff0c;会出现out of memory的报错。尝试使用降低batch_size&#xff08;原本是2&#xff0c;现在降到1&#xff09;的方式&#xff0c;可以让qwen2.5:7B跑起来&#xff0c;但时不时会不稳定…