欢迎光临散文网 会员登陆 & 注册

Java 人工智能 - Weka - 聚类算法

2021-10-04 12:09 作者:开源开发者  | 我要投稿

聚类的作用是从一组没有打标签的数据中识别相似的对象组

也可以识别不寻常的样本 比如异常值


分析银行的数据集

包括600个实例

每个实例用 11 个属性进行描述

属性包括年龄、性别、地区、收入、婚姻状况、是否有子女、汽车拥有情况、存款活动、当前活动、房地产抵押、PEP


使用EM 期望最大化 聚类算法识别常见的客户组


EM算法流程

给定一组簇

为每个实例指派各个簇的概率分布

比如有 3个簇 A B C

一个实例分别属性簇 A B C 的概率分布依次为 0.7 0.10 0.20

第二步 EM 重新评估每个类的概率分布的参数向量

算法不断对这两步做迭代

直到参数收敛或者达到迭代的最大值


EM 簇数 可以手动设置 也可以通过交叉验证进行自动设置


肘部法则确定簇数

会查看簇数的偏差百分比

使用肘部法则会不断增加簇数数量

直到新加的簇不会带来很多的信息

只会带来很少的额外差异



聚类算法

package com.osrcd.weka;

import weka.clusterers.EM;

import weka.core.Instances;

import java.io.BufferedReader;

import java.io.FileReader;

public class Clustering {

   public static void main(String[] args) throws Exception {

       // 加载数据

       Instances data = new Instances(new BufferedReader(new FileReader(Clustering.class.getClassLoader().getResource("data/bank-data.arff").getPath())));

       // 聚类器的新实例

       EM model = new EM();

       // 创建聚类器

       model.buildClusterer(data);

       System.out.println(model);

   }

}



EM

==

Number of clusters selected by cross validation: 6

Number of iterations performed: 100

                Cluster

Attribute              0        1        2        3        4        5

                  (0.1)   (0.13)   (0.26)   (0.25)   (0.12)   (0.14)

======================================================================

age

 0_34            10.0535  51.8472 122.2815  12.6207   3.1023   1.0948

 35_51           38.6282  24.4056  29.6252  89.4447  34.5208   3.3755

 52_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

sex

 FEMALE          27.1812  32.2338  77.9304  83.5129  40.3199  44.8218

 MALE            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

region

 INNER_CITY      26.1651  46.7431   73.874  60.1973  33.3759  34.6445

 TOWN            24.6991  13.0716  48.4446  53.1731   21.617  17.9946

 RURAL            8.4113  12.7871  21.7634  25.7529  11.1622  22.1231

 SUBURBAN         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

income

 0_24386         22.5301  77.3981 150.8728  35.3652   3.0947   1.7391

 24387_43758     38.0636   4.5119   6.2909 113.3875  70.4654   8.2808

 43759_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

married

 NO              15.0163  34.8213  48.6021  32.7954  49.5126  29.2523

 YES             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

children

 0                2.1776  53.2782  55.6363  92.5938   32.663  32.6511

 1               51.5497  26.7841  22.0968   1.9302  18.9418  19.6973

 2                6.4264   2.3777  56.5523  25.7573  23.3335  25.5529

 3                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

car

 NO              29.7462  47.4075  89.7372  69.5918  34.7847  38.7326

 YES             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_act

 NO               6.7118  58.9844  49.6095  39.7853  35.7784   1.1306

 YES             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_act

 NO              12.8656  21.8946  35.3337  46.1845  15.9243  18.7973

 YES             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

mortgage

 NO              34.2814  47.6791 108.1248  95.3628  54.1015  57.4504

 YES             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

pep

 YES             59.0226  72.2592  18.5799   3.8416  68.4764  57.8202

 NO               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




第1行表明有6个簇


第1列Attribute指出属性以相应范围


比如 属性 age 划分为 3个区段:0~34 35~51 52~max 这些数字列表表示有多少个实例归入每个簇的特定范围 比如 0~34 年龄组的客户大部分位于簇2中的数字表示有122个实例



评估

对数似然度量 评估聚类算法的质量

测量那些数据被识别到簇的一致性程度

数据集划分为多个折

针对每个折运行聚类

如果簇类算法簇里面的相似数据的概率高

说明它在捕获数据结构方面做得很好

double logLikelihood = ClusterEvaluation.crossValidateModel(model, data, 10, new Random(1));

System.out.println(logLikelihood);


运行了很久才计算出来

-8.773422954298612

Java 人工智能 - Weka - 聚类算法的评论 (共 条)

分享到微博请遵守国家法律