[数据挖掘课程笔记]SLIQ算法
1.数据结构

主要的数据结构有:1.Attribute List 2.Class List
对于数据集,每一个属性都有一个对应的Attribute List.如上图所示,每个Attribute List有两列,分别是对应的属性值和该条记录在Class List里的索引。根据不同的索引值,可以得到记录的类标。对于连续型的属性,Attribute List应当是有序的。
对于Class List,存储的是每条记录对应的类标以及记录所在的当前叶节点。Class List 需常驻内存当中。
2.算法过程
gini index:如果一个数据集D有n个不同的类,那么:

在属性A下,把数据集分为D1和D2,那么:

基尼增益定义:


算法思想:扫描全部的Attribute List.对于每一个不同的Attribute List,从上到下扫描,并计算以当前记录split所得出的基尼增益。从而求出最大基尼增益的属性和分裂点。
在对Attribute List 从上到下扫描时,需要用到另一种数据结构——类直方图。类直方图的行表分裂点的左边和右边,列代表不同的类。如上图所示,当算法扫描到Salary List的第一条记录时,首先根据index找到当前记录所属的叶子节点。可知,salary = 15时这条记录属于N2节点。当前N2节点有两条记录,类直方图初始化时默认这两条记录属于未分裂。所以,在N2节点中共有两条记录,分别是索引值1和索引值2的记录。在Class List中可知,这两条记录分别属于G类和B类。
算法在扫描到salary = 15这条记录时,实际上是在N2这个节点做了一次试探性的分裂,N2中salary<=15的记录归为左边,其余的归为右边。类直方图可变为:

从而可以根据这次分裂算得基尼增益:

依次向下扫描,分别得到每一次试探性分裂的基尼增益,选择基尼增益最大的分裂。比如,在N2节点中,选择salary = 15这条记录分裂所得的基尼增益最大,那么在该节点的分裂点就是(a1+a2)/2,也就是40.
算法在决定每一个当前叶子节点的分裂点之后,需要根据分裂点,更新Class List中每条记录所属的叶子节点。然后再次循环分裂。

[数据挖掘课程笔记]SLIQ算法的更多相关文章
- [数据挖掘课程笔记]关联规则挖掘 - Apriori算法
两种度量: 支持度(support) support(A→B) = count(AUB)/N (N是数据库中记录的条数) 自信度(confidence)confidence(A→B) = count ...
- [数据挖掘课程笔记]基于规则的分类-顺序覆盖算法(sequential covering algorithm)
Rule_set = {}; //学习的规则集初试为空 for 每个类c do repeat Rule = Learn_One_Rule(D,Att-vals,c) 从D中删除被Rule覆盖的元组; ...
- 数据挖掘学习笔记--AdaBoost算法(一)
声明: 这篇笔记是自己对AdaBoost原理的一些理解,如果有错,还望指正,俯谢- 背景: AdaBoost算法,这个算法思路简单,但是论文真是各种晦涩啊-,以下是自己看了A Short Introd ...
- [数据挖掘课程笔记]无监督学习——聚类(clustering)
什么是聚类(clustering) 个人理解:聚类就是将大量无标签的记录,根据它们的特点把它们分成簇,最后结果应当是相同簇之间相似性要尽可能大,不同簇之间相似性要尽可能小. 聚类方法的分类如下图所示: ...
- [数据挖掘课程笔记]人工神经网络(ANN)
人工神经网络(Artificial Neural Networks)顾名思义,是模仿人大脑神经元结构的模型.上图是一个有隐含层的人工神经网络模型.X = (x1,x2,..,xm)是ANN的输入,也就 ...
- [数据挖掘课程笔记]Naïve Bayesian Classifier
朴素贝叶斯模型 1) X:一条未被标记的数据 2) H:一个假设,如H=X属于Ci类 根据贝叶斯公式 把X表示为(x1,x2,....xn) x1,x2,....xn表示X在各个特征上的值. 假设有c ...
- Andrew Ng机器学习课程笔记--汇总
笔记总结,各章节主要内容已总结在标题之中 Andrew Ng机器学习课程笔记–week1(机器学习简介&线性回归模型) Andrew Ng机器学习课程笔记--week2(多元线性回归& ...
- 深度学习课程笔记(三)Backpropagation 反向传播算法
深度学习课程笔记(三)Backpropagation 反向传播算法 2017.10.06 材料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS1 ...
- Andrew Ng机器学习课程笔记(五)之应用机器学习的建议
Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.h ...
随机推荐
- toUpperCase与toLowerCase
public String toLowerCase()此方法返回的字符串转换为小写. public String toUpperCase()此方法返回的字符串转换为大写. 注:支队英文字符有效,其他字 ...
- bzero 字符数组清零
原来bzero()是这个功能,学习啦.下面的文章可以好好参考,出处:http://hi.baidu.com/wg_wang/item/5fa42c15c73b8efa9c778af8 bzero &a ...
- AC日记——[USACO09JAN]全流Total Flow 洛谷 P2936
题目描述 Farmer John always wants his cows to have enough water and thus has made a map of the N (1 < ...
- django中表变更后migrate无效的问题
问题描述: 已有的model,修改之后,想重新建模,于是将migrations文件夹中除__init__.py之外其他文件都删掉,再次执行以下步骤python manage.py makemigrat ...
- PHP平均小数红包算法
<?php function RandMoney( $money,$num ){ $arr = array();//存放金额 $total_money = 0;//红包总金额 $thisMone ...
- JavaWeb过滤器.监听器.拦截器-?原理&区别
过滤器可以简单理解为“取你所想取”,忽视掉那些你不想要的东西:拦截器可以简单理解为“拒你所想拒”,关心你想要拒绝掉哪些东西,比如一个BBS论坛上拦截掉敏感词汇. 1.拦截器是基于java的反射机制,过 ...
- vue生命周期的栗子
vue生命周期的栗子注意触发vue的created事件以后,this便指向vue实例,这点很重要 <!DOCTYPE html><html><head><me ...
- 借助树莓派模拟Wimonitor并实现WiFi窃听和嗅探
Wimonitor是一款非常优秀的黑客工具,它不仅可以帮渗透测试人员省去配置虚拟机和无线网卡等一系列麻烦事,而且它的Web接口配置起来也非常的方便.实际上,它就是一款TP-Link-MR3020路由器 ...
- [c++菜鸟]《Accelerate C++》读书笔记
第0章 开始学习C++ 1.<<的行为取决于它的操作数类型,<<会把它的右操作数的字符写到左操作数所指示的流中,他是结果就是它的左操作数. 2.std::endl是一个控制器, ...
- OTN 交换& P-OTN有效减少100G 网络成本 (三)
OTN 交换& P-OTN有效减少100G 网络成本 (三) 城域网面临的挑战在于不仅须要支持和管理旧有的传送业务,还要支持新兴的分组业务.在城域网中,以太网业务是规模最大.增长最迅速的业务种 ...