17年暑假看过的《机器学习实战》发现挺不错的,最近拿来继续翻一翻,总结一下数据挖掘里经典的方法,敲一敲代码。
简述:
1、K-NN:
优点:精度高、对异常值不敏感,无数据输入假设
缺点:计算复杂度高,空间复杂度高
适用数据范围:数值型和标称型
(无监督分类方法,初始需要划分一些类别)
2、归一化数值
newValue=(oldValue-min)/(max-min)将任意值转化到0-1之间。
也可以使用normalization
3、决策树
优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据。(决策树算法是一种有监督分类算法)
缺点:可能会产生过度匹配问题
适用数据类型:数值型和标称型。
每个类的信息值:
原始的信息熵:
按第i个特征分类后,得到的新的分类数为k,则按第i个特征分类后的信息熵为:
则信息熵增益为:
计算得到最大的信息熵增益的那个特征,作为本次分类的特征。
4、朴素贝叶斯
5、Logistic回归
6、支持向量机
7、利用Adaboost提高分类性能
10、K-means
【重点】11、使用Apriori算法进行关联分析
从大规模数据集中寻找物品间的隐含关系被称作关联分析或者关联规则学习。
Apriori算法:
优点:易编码实现
缺点:在大数据集熵可能较慢
适用数据类型:数值型或者标称型数据。
关联分析是一种在大规模数据集中寻找有趣关系的任务,这些关系可以有两种形式:频繁项集或者关联规则。频繁项集是经常出现在一块的物品的集合,关联规则按时梁总物品之间可能存在很强的关系。一个项集的支持度被定义为数据集中包含该项集的记录所占的比例。支持度是针对项集来说的,因此可以定义一个最小支持度。可信度或置信度是针对一条关联规则来定义的。支持度和可信度是用来量化关联分析是否成功的方法。
Apriori(a priori,一个先验)原理是说如果某个项集是频繁的,那么它的素有子集也是频繁的。这个原理转上并没有什么帮助,但是如果反过来看既有用了,也就是说如果一个项集是非频繁集,那么它的所有超集也是非频繁集。
Apriori算法是发现频繁项集的一种方法,Apriori算法的两个输入参数分别是最小支持度和数据集。该算法首先会生成所有单个物品的项集列表,接着扫描交易记录来查看哪些项集满足最小支持度要求,哪些不满意最小支持度要求的集合会被去掉。然后对剩下的集合进行组合以生成包含两个元素的项集。接下来,再重新扫描交易记录,去掉不满足最小支持度的项集。该过程重复进行直到所有项集都被去掉。
【重点】12、使用FP-growth算法来高效发现频繁项集
FP-growth比Apriori算法要快,它基于Apriori构建,但是在完成相同任务时采用了一些不同的技术,这里的任务是将数据集存储咋一个特定的称作FP树的结构之后发现频繁项集或者频繁项对。FP-growth执行速度要比Apriori快2个数量级以上。但是该算法不能用于发现关联规则。FP-growth算法只需要对数据库进行两次扫描。
优点:比Apriori快
缺点:实现比较困难,在某些数据集上性能会下降
适用数据类型:标称型数据