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算法的更多相关文章

  1. [数据挖掘课程笔记]关联规则挖掘 - Apriori算法

    两种度量: 支持度(support)  support(A→B) = count(AUB)/N (N是数据库中记录的条数) 自信度(confidence)confidence(A→B) = count ...

  2. [数据挖掘课程笔记]基于规则的分类-顺序覆盖算法(sequential covering algorithm)

    Rule_set = {}; //学习的规则集初试为空 for 每个类c do repeat Rule = Learn_One_Rule(D,Att-vals,c) 从D中删除被Rule覆盖的元组; ...

  3. 数据挖掘学习笔记--AdaBoost算法(一)

    声明: 这篇笔记是自己对AdaBoost原理的一些理解,如果有错,还望指正,俯谢- 背景: AdaBoost算法,这个算法思路简单,但是论文真是各种晦涩啊-,以下是自己看了A Short Introd ...

  4. [数据挖掘课程笔记]无监督学习——聚类(clustering)

    什么是聚类(clustering) 个人理解:聚类就是将大量无标签的记录,根据它们的特点把它们分成簇,最后结果应当是相同簇之间相似性要尽可能大,不同簇之间相似性要尽可能小. 聚类方法的分类如下图所示: ...

  5. [数据挖掘课程笔记]人工神经网络(ANN)

    人工神经网络(Artificial Neural Networks)顾名思义,是模仿人大脑神经元结构的模型.上图是一个有隐含层的人工神经网络模型.X = (x1,x2,..,xm)是ANN的输入,也就 ...

  6. [数据挖掘课程笔记]Naïve Bayesian Classifier

    朴素贝叶斯模型 1) X:一条未被标记的数据 2) H:一个假设,如H=X属于Ci类 根据贝叶斯公式 把X表示为(x1,x2,....xn) x1,x2,....xn表示X在各个特征上的值. 假设有c ...

  7. Andrew Ng机器学习课程笔记--汇总

    笔记总结,各章节主要内容已总结在标题之中 Andrew Ng机器学习课程笔记–week1(机器学习简介&线性回归模型) Andrew Ng机器学习课程笔记--week2(多元线性回归& ...

  8. 深度学习课程笔记(三)Backpropagation 反向传播算法

    深度学习课程笔记(三)Backpropagation 反向传播算法 2017.10.06  材料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS1 ...

  9. Andrew Ng机器学习课程笔记(五)之应用机器学习的建议

    Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.h ...

随机推荐

  1. R语言table()函数

    R语言table()函数比较有用,两个示例尤其是混淆矩阵这个案例比较有用: 例子一:统计频次 z<-c(1,2,2,4,2,7,1,1);z1<-table(z);summary(z1); ...

  2. 济南day1下午

    下午 预:60+100+30 实:30+30+30 T1水题(water) T1写了二分图匹配 听说有70分,写挫了.... 正解:贪心,按长度排序, 对于第一幅牌里面的,在第二个里面,找一个长度小于 ...

  3. NEERC15

    2015-2016 ACM-ICPC Northeastern European Regional Contest 再开一个新坑吧 目前姿势有限,C.H.I仍然处于弃坑状态 代码戳这里 Problem ...

  4. CodeForces - 393E Yet Another Number Sequence

    Discription Everyone knows what the Fibonacci sequence is. This sequence can be defined by the recur ...

  5. jdk1.8中nashorn不支持ECMAScript6的问题

    背景 在项目中需要使用java调用javascript脚本,有两种方案,一种是faas,使用开源的openwhisk.另一种本地运行的方式,使用jdk的nashorn调用javascript,jdk版 ...

  6. ios使用http来上传图片实现方法

    if (parameters) {                int genderNumber = 1;        self.token = loginToken;        self.p ...

  7. Android Adapter推荐写法

    package jason.fragmentdemo.adapter; import nqy.fragmentdemo.R; import nqy.fragmentdemo.model.Article ...

  8. 深入理解vue路由的使用

    vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用.vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来.传统的页面应 ...

  9. XPath可以快速定位到Xml中的节点或者属性。XPath语法很简单,但是强大够用,它也是使用xslt的基础知识。

    示例Xml: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <?xml versio ...

  10. log4j:WARN Please initialize the log4j system properly解决的方法

    要解决问题很easy,建立LOG4J 的配置文件就可以. 在src 文件夹下创建配置文件,选 一.择菜单File > New > File,文件名称输入log4j.properties,文 ...