进行数据离散化的原因_数据离散化及其KMeans算法实现的理解
摘要
这篇文章尝试借用数据离散化这个事给大家讲明白K-Means算法的含义。
数据离散化的理解
数据离散化是数据预处理的一个非常重要的步骤,就是将连续的数据分成几个段。
举个简单例子,好比我们一个班上的学生成绩是从0-·100分之间的,但是我们在进行数据分析的时候呢我们把这些分数分成不及格、及格、良好、优秀四大类,实际上就是将比较连续的分数给离散化成了4种可能取值。
那这样做有什么好处呢?
数据离散化的意义
一些数据挖掘算法中(比如Apriori算法),要求数据是分类属性形式。因此,就需要在数据预处理阶段将连续属性的数给它离散化,除此之外离散化还具有以下好处:
- 提高计算效率
- 分类模型计算需要
- 距离计算模型(k均值、协同过滤)中降低异常数据对模型的影响
- 图像处理中的二值化处理
当然,一切都还是看业务需要。
常用的离散化方法
离散化的工作很容易理解,就是依照一定规律把写数据给分成少数的几类。那这个规律是什么呢?
常用的离散化方法有:
- 分位数法:使用四分位、五分位、十分位等进行离散
- 距离区间法:等距区间或自定义区间进行离散
- 频率区间法:根据数据的频率分布进行排序,然后按照频率进行离散,好处是数据变为均匀分布,但是会更改原有的数据结构
- 聚类法:使用k-means将样本进行离散处理
- 卡方:通过使用基于卡方的离散方法,找出数据的最佳临近区间并合并,形成较大的区间
- 二值化:数据跟阈值比较,大于阈值设置为某一固定值(例如1),小于设置为另一值(例如0),然后得到一个只拥有两个值域的二值化数据集。
我们重点研究一下K-Means算法。
K-Means算法
聚类分析是在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好。
为什么这么说呢?就像最前面那个成绩聚类的例子,我们以60分为界限划分及格和不及格,那60分的同学真的就比59分的同学优秀么?其实他们可能根本就是一类人。
所以,我们希望能有算法将这些数据更科学的离散化,就是让类和类之间的区分更大,不再残忍地把59.5和60给分割成不同的两个世界。
算法描述
K-Means 算法简单说,就是一个do-while循环。
伪代码如下:
选择K个点作为初始质心
repeat 将每个点指派到最近的质心,形成K个簇重新计算每个簇的质心
until 簇不发生变化或达到最大迭代次数
理解
上面伪代码几句话虽然少,但是对K-Means算法对描述已经很透了。
我们通过一个具体的例子来理解一下。大家想象一下,假设操场上有20个学生随机地站在那不动,我们想把他们分成5组,用K-Means算法该怎么分呢?
- 第1步,我们在这20个同学里面抽出5个同学作为小组长;
- 第2步,剩下的15个同学,每个同学都量量他(她)自己和第1步中选定的小组长的距离,把自己归到离他(她)最近的那个小组长那一组,经过第2步我们就初步的把20个同学分成类5组了(每一组的同学个数不一定是4个);
- 第3步,在第2步中得到的5个组,我们再按一定办法给每个组指定一个新的小组长;
- 第4步,在第3步中没有被选中为小组长的剩下的15个同学重新计算自己与新的小组长的距离,把自己归到离自己最近的那个新的小组长那组;
- 第5步,重复上面的工作,一直到我们对分组的效果满意了或者重复的次数达到我们设置的上限了。
注意事项
从上面两个小结的描述可以看出来,K-Means算法的关键有三点:(1)我们怎么知道要分几类?也就是说这个K是怎么确定的?(2)K确定了后,怎样确定K个初始的中心点呢?(3)各个点到中心点的距离是怎么算得?
这个K值,很多时候都是根据实际需求直接指定的。如果不能指定,可以根据数据可视化的效果再来指定K值;还可以将K从2开始累加,看看分类的效果来确定一个K值。
K个初始中心点,当然可以随机指定。实际中,随机指定可能效果不好。那我们还有两个办法:(1)选择彼此距离尽可能远的K个点;(2)先对数据用层次聚类算法或其它一些聚类算法聚类,得到K个簇之后,从每个类簇中选择一个点,该点可以是该类簇的中心点,或者是距离类簇中心点最近的那个点。
关于距离计算。点是由几个数来描述的(比如身高、体重来代表一个人),这几个数做分量可以构成一个向量。向量出来了,就好办啦,什么欧式距离、切比雪夫距离、曼哈顿距离、闵可夫斯基距离等等等等都可以往上整,甚至你可以根据需要自己定义一种距离计算方案。
小结
本文概要讲了数据离散化和K-Means算法的理论基础。
数据离散化其实是将很紧密的、取值可能性很多的数给聚类,让每个点的可能取值变少,就像0-100分的可能的成绩取值给离散化成:不及格、及格、良好、优秀这四种可能取值。比如模数转换。
K-Means聚类关键就是3条:K值、中心点、距离。
具体的Python实现方法,请期待下一篇文章。
欢迎关注高老师的公众号:
进行数据离散化的原因_数据离散化及其KMeans算法实现的理解相关推荐
- 数据科学还是计算机科学_数据科学101
数据科学还是计算机科学 什么是数据科学? (What is data science?) Well, if you have just woken up from a 10-year coma and ...
- 数据分析模型和工具_数据分析师工具包:模型
数据分析模型和工具 You've cleaned up your data and done some exploratory data analysis. Now what? As data ana ...
- 数据增强 数据集扩充_数据扩充的抽象总结
数据增强 数据集扩充 班级分配不均衡的创新解决方案 (A Creative Solution to Imbalanced Class Distribution) Imbalanced class di ...
- 数据科学生命周期_数据科学项目生命周期第1部分
数据科学生命周期 This is series of how to developed data science project. 这是如何开发数据科学项目的系列. This is part 1. 这 ...
- 数据科学的发展_数据科学的发展与发展
数据科学的发展 There's perhaps nothing that sets the 21st century apart from others more than the concept o ...
- 数据归一化处理方法_数据预处理:归一化和标准化
1. 概述 数据的归一化和标准化是特征缩放(feature scaling)的方法,是数据预处理的关键步骤.不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间 ...
- 数据密集型应用系统设计_数据存储与检索
数据存储与检索 从最基本的层面看,数据库只需要做两件事: 向它插入数据时,它就保存数据 查询数据时,它就返回数据 本章主要从数据库的角度来探讨: 如何存储输入的数据 收到查询请求时,如何重新找到数据 ...
- python数据收集整理教案_数据收集整理教案讲解学习
一.数据收集整理 第一课时 教学目标 初步体验数据收集. 整理. 描述的过程, 会用分类数数的方法将数据整理成 简单的统计表, 初步认识统计表, 能正确填写统计表, 能从中获得简单统计的结 果. 通过 ...
- 数据中台 画像标签_数据中台实战:如何通过标签平台圈出产品高价值用户?...
这是我的好朋友华仔的文章,华仔是<数据中台实战>的作者,曾任职科大讯飞,现在是富力环球商品贸易港数据中台的产品负责人,他的公众号:改变世界的产品经理 写了很多有关数据中台.产品经理相关的原 ...
最新文章
- MFC Dll的详细介绍及创建
- torch 判断相等
- ABAP SUBMIT 程序时带屏幕默认值
- android StringBuilder的Capacity的使用
- search by Belonging to my team测试 - with manager role
- [导入]关于OllyDbg 2.0的消息..
- RewriteCond 详解
- 雇佣K个工人的最小费用 Minimum Cost to Hire K Workers
- 百度Android定位API使用指南
- (35)FPGA面试技能提升篇(AD、DA、时钟芯片)
- php自定义类生成lib,thinkphp引入自定义封装类
- 证件照底色一般是什么颜色 证件照底色更换软件推荐
- 线性插值_c语言实现
- 终端代码重复率检测实践
- JAVA 使用DateUtils对日期进行格式转换
- android下载通知栏,Android开发中实现下载文件通知栏显示进度条
- Nginx反向代理,返回405错误的解决办法
- 线性相关与线性无关的定义与性质
- 纳米器件,量子点理论文献拾遗
- Android开发常用开源库
热门文章
- 远程连接后无法看到本地电脑分区解决方法
- 网游中的网络编程系列1:UDP vs. TCP
- 改变mysql默认字符集为utf8
- AddHandler php5-script .php\AddType text/html .php和AddType application/x-httpd-php .php的区别?...
- web视频播放插件:Video For Everybody
- progressDialog 为什么设置了setProgress()方法无反应?
- 【信息系统项目管理师】第2章-信息系统项目管理基础 知识点详细整理
- AttributeError: module ‘tensorflow‘ has no attribute ‘InteractiveSession‘或 ‘placeholder‘的解决
- Fuchsia之GN与Ninja构建hello world
- Emacs设置侧边栏目录neotree