《常用数据挖掘算法总结及Python实现.pdf》由会员分享,可在线阅读,更多相关《常用数据挖掘算法总结及Python实现.pdf(132页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 常用数据挖掘算法总结及 Python 实现 V1.0 By Xuejun Yang 2016.09.18 目录 第一部分 数据挖掘与机器学习数学基础.3 第一章 机器学习的统计基础.3 第二章 探索性数据分析(EDA).11 第二部分 机器学习概述.14 第三章 机器学习概述.14 第三部分 监督学习-分类与回归.16 第四章 KNN(k 最邻近分类算法).16 第五章 决策树.19 第六章 朴素贝叶斯分类.30 第七章 Logistic 回归.33 第八章 SVM 支持向量机.43 第九章 集成学习(Esemble Learning).44 第十一章 模型评估.49 第四部分 非监督学习-
2、聚类与关联分析.57 第十二章 Kmeans 聚类分析.60 第十三章 关联分析 Apriori.62 第十四章 数据预处理之数据降维.64 第五部分 Python 数据预处理.67 第十五章 Python 数据分析基础.67 第十六章 Python 进行数据清洗.98 第六部分 数据结构与算法.错误错误!未定义书签。未定义书签。一、二叉树(前、中、后遍历).错误错误!未定义书签。未定义书签。二、几种基本排序方法.错误错误!未定义书签。未定义书签。第七部分 SQL 知识.错误错误!未定义书签。未定义书签。第八部分 数据挖掘案例分析.104 案例一 A Journey through Titan
3、ic 597c770e.104 案例二 Analysis for airplane-crashes-since-1908.112 案例三 贷款预测问题.117 案例四 KNN 算法实现葡萄酒价格模型预测及交叉验证.126 第一部分第一部分 数据挖掘与机器学习数学基础数据挖掘与机器学习数学基础 第一章第一章 机器学习的机器学习的统计统计基础基础 1.1 概率论概率论 1.概率论基本概念概率论基本概念 样本空间样本空间 我们将随机实验 E 的一切可能基本结果组成的集合称为 E 的样本空间,记为 S。样本空间的元素,即E 的每一个可能的结果,称为样本点。样本空间又叫基本事件空间。例例:拍拍贷用户的学
4、历拍拍贷用户的学历 S=研究生或以上研究生或以上,本科本科,大专大专,高中高中,中专中专,初中及以下初中及以下,A=研研究生或以上究生或以上,本科本科,大专大专 事件事件 事件 A 是样本空间的子集,可分为四种类型 空事件:样本空间的空子集;原子事件:仅包含一个元素的样本空间;混合事件:包含多个元素的样本空间;样本空间本身也是一个事件.集合集合 概率论定义概率论定义 概率用来描述一件事的不确定性。假设 A 是投硬币的一个结果(比如正面朝上),如果重复投硬币很多次,直到 A 出现的机会逼近一个极限 p。那么可以说出现 A 的概率是 p 对于事件 A 和 B,联合概率 Pr(AB)表示事件 A 和
5、 B 同时发生的概率。概率定律概率定律 事件的概率:P(A)满足:P(A)0;P(S)=1;对于一连串的互斥事件:iiiiAPAP)()(S A 条件概率条件概率 发生事件 A 的情况下,发生 B 的概率称作条件概率 P(B|A).()(|)()P BAP B AP A 独立性独立性 事件发生和其它事件无关。如果 P(B|A)=P(B),我们称 B 和 A 统计独立,当且仅当:()()()P ABP A P B 如果 A 和 B 统计独立,那么 B 与 A 也统计独立 总概率总概率 P(A)=P()+P(A )=P(A|B)P(B)+P(A|)P()贝叶斯理论贝叶斯理论(|)()(|)()P
6、A B P BP B AP A P(B):B 的先验概率先验概率,非条件概率,或者边际概率 P(A|B):给定 B 条件下的 A 的条件概率,也被称作“似然似然”P(A):A 的边际概率边际概率,也作为 B 的后验概率的归一化常量 P(B|A):B 的后验概率后验概率 2.随机变量,期望,方差随机变量,期望,方差 随机变量 X 是随机试验的数值型结果 相关概念:相关概念:观测值:其中一个结果成为观测值 数据:多个观测值集合为数据 总体:所有的结果称为总体 有两种类型的随机变量有两种类型的随机变量 离散变量:值数目可数 对于离散型随机变量,我们关心每个特定数值出现的概率 eg.客户的婚姻情况 连
7、续变量:数值在一定范围内 对于连续性变量,某一个特定值出现的概率为 0,我们只关心区间的概率 Eg.客户的投资金额 概率分布概率分布 随机变量的分布就是它所有可能的输出以及它们的概率集合 概率密度函数概率密度函数 随机变量的概率密度函数描述该随机变量在某个取值发生的可能性 离散变量:P(X=x)=p(x)连续变量:badxxpbXaP)()(累积分布函数累积分布函数 x 处的累积分布函数是负无穷到 x 点的概率密度函数的累加和 期望期望 期望是指所有可能值的加权和。其权重对于离散值而言就是该值出现的概率,而对于连续值而言就是其密度函数。离散情况:连续情况:x all)()p(xxXEii dx
8、xp(x)XEx all)(方差方差 用来描述该随机变量值和平均值的离散程度 离散情况 连续情况 x all 2)()()p(xXExXVarii dxp(x)XExXVarx all2)()(3.常用概率分布常用概率分布 离散分布:伯努利分布(二项分布)离散分布:伯努利分布(二项分布)概率密度函数概率密度函数:xxppxp1)1()(均值均值:pXE)(方差方差:)1()(ppXVar 连续分布连续分布 正态分布是最常用的一种连续分布。密度函数的特点是:关于均值 对称,并在 处取最大值,在正(负)无穷远处取值为 0,图像是一条位于 x 轴上方的钟形曲线。期望值 决定了分布的位置,标准差 决定
9、了分布的幅度。当=0,2=1 时,称为标准正态分布,记为 N(0,1)。概率密度函数概率密度函数 222)(221)(xexf 期望期望)(XE 方差方差 2)(XVar 4.统计量估计和中心极限定理统计量估计和中心极限定理 从一个数据集(样本)估计它的分布情况从一个数据集(样本)估计它的分布情况 统计直方图:直观地显示了数据的分布 描述性指标:描述性指标:衡量据中趋势 期望值的估计:=最大值最大值/最小值:最小值:2500 万用户的最大/最小借款金额 中值:中值:按照借款金额排序,最中间的值 众数:众数::出现次数最多的借款金额 衡量变化性衡量变化性 范围:最大最小的借款金额之差 方差的估计
10、:两个重要定理两个重要定理 大数定律 中心极限定理 大数定理大数定理 大数定理描述的是一组独立同分布随机变量的均值的极限。在这些随机变量个数趋于无穷时,其均值依概率收敛于这些随机变量的数学期望 指明样本均值的收敛趋势指明样本均值的收敛趋势 中心极限定理中心极限定理 设随机变量 X1,X2,.Xn 相互独立,服从同一分布,且具有数学期望和方差 0)(,)(2iiXVarXE 则随机变量的均值=1+2+渐进地服从正态分布,并且期望和方差分别为 0)(,)(2iiXVarXE 指明样本均值的分布与样本量的关系指明样本均值的分布与样本量的关系 1.2 假设检验假设检验 1.假设检验概述假设检验概述 作
11、用:检查观察到的样本究竟是否支持对总体的假设,帮助进行决策 假设检验在数据分析中的应用假设检验在数据分析中的应用 理解分析建模的结果 需要读懂相关性分析,归回等建模的结果 AB Test 什么是假设检验什么是假设检验 假设检验是数理统计学中根据一定假设条件由样本推断总体的一种方法。-对总体做假设假设-由样本做检验检验 假设检验的要素假设检验的要素 原假设(Null Hypothesis)备择假设(Alternative Hypothesis):即与原假设相悖的陈述 检验统计量:用采样数据基于原假设计算出的统计量,用来检验原假设和备择假设 拒绝域:在该区间,拒绝原假设,而趋向于备择假设 错误类型
12、错误类型 类型 I:在给定原假设是正确的情况下拒绝原假设的概率(False positive)=P(reject H0|H0 true)拒真拒真 类型 II:在给定备择假设是正确的情况下接受原假设的概率(False negative)=P(accept H0|H1 true)取伪取伪 P-value 比观测值更极端的情况出现的概率,衡量样本数据相对于原假设的置信强,也称作观测的显著性水平)(:obszZPpvalP 用于做拒绝决定:如果 p-value a,不拒绝原假设 如果 p-value Z/2 or Z t/2 or T 0,分布呈尖峰状态;峰度0,表示两变量存在正的线性相关关系;0.8
13、 表示两变量之间具有较强的线性关系 绝对值0.3 表示两变量之间的线性相关关系较弱 相关系数的假设检验 提出零假设提出零假设:两变量无线性相关关系 选择检验统计量选择检验统计量:Pearson 相关系数的检验统计量为 t 统计量,即t=212,其中 t 统计量服从 n-2个自由度的 t 分布 计算计算检验统计量的观测值和 p 值 决策:决策:若 p 值小于显著水平,应拒绝原假设,即两变量存在线性相关关系,否则拒绝 相关性分析注意事项:进行线性相关分析前,可以先绘制散点图 要求两变量都来自正态总体的随机变量 出现异常值时甚用(2)秩相关(两个有序的分类变量)(3)两个无序分类变量关联性分析-2检
14、验 第二第二部分部分 机器学习机器学习概述概述 第三章第三章 机器学习机器学习概述概述 3.1 机器学习机器学习概述概述 机器学习方法主要分为有监督学习(supervised learning)和无监督学习(unsupervised learning),半监督学习和强化学习 监督学习监督学习就是分类,通过已有的训练样本去训练得到一个最优模型,然后利用这个最优模型将所有输入映射为相应的输出,对于输出进行判断实现分类,这就对未知数据进行了分类。监督学习中的典型例子是 KNN 和和 SVM。无监督学习无监督学习与监督学习的不同之处,主要是它没有训练样本没有训练样本,而是直接对数据进行建模直接对数据进
15、行建模。典型案例就是聚类聚类了,其目的是把相似的东西聚在一起,而不关心这一类是什么。聚类算法通常只需要知道如何计算相似度就可以了,它可能不具有实际意义。如果在分类过程中有训练样本训练样本,则可以考虑采用监督学习监督学习的方法,否则不能使用监督学习。3.2 数据挖掘常数据挖掘常用用 Python 库库 Python 科学计算包:Numpy 数据处理工具包:pandas 绘图和可视化:matplotlib 统计包:statsmodels Python 算法库和工具包:SciPy 机器学习模块 scikit-learn:基于 Numpy 和 SciPy,包括分类、回归、聚类系列算法,主要算法有 SV
16、M、逻辑回归、朴素贝叶斯、Kmeans、DBSCAN 等,目前由 INRI 资助,偶尔 Google 也资助一点 3.3 数据挖掘常用模型数据挖掘常用模型 数据挖掘模型监督学习分类KNN决策树朴素贝叶斯分类Logistic回归CART分类回归树SVM支持向量机集成学习(Bagging,Adaboost)回归半监督学习非监督学习聚类分析-Kmeans关联分析Apriori数据降维PCA第三部分第三部分 监督学习监督学习-分类与回归分类与回归 有监督就是给的样本都有标签,分类的训练样本必须有标签,所以分类算法都是有监督算法。监督机器学习无非就是“minimize your error while
17、regularizing your parameters”,也就是在规则化参数的在规则化参数的同时最小化误差同时最小化误差。最小化误差是为了让我们的训练数据,而规则化参数是防止我们的模型过分拟合我们的训练数据,提高泛化能力 第第四四章章 KNN(k 最邻近分类算法)最邻近分类算法)1.算法算法思路思路 通过计算每个训练样例到待分类样品的距离,取和待分类样品距离最近的 K 个训练个训练样例,K 个样品中哪个类别的训练样例占多数,则待分类样品就属于哪个类别 核心思想:核心思想:如果一个样本在特征空间中的 k 个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性
18、。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。kNN 方法在类别决策时,只与极少量的相邻样本有关。由于 kNN 方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN 方法较其他方法更为适合。2.算法描述算法描述 1.算距离:给定测试对象,计算它与训练集中的每个对象的距离 依公式计算 Item 与 D1、D2 、Dj 之相似度。得到 Sim(Item,D1)、Sim(Item,D2)、Sim(Item,Dj)。2.将 Sim(Item,D1)、Sim(Item,D2)、Sim(Item
19、,Dj)排序,若是超过相似度阈值 t 则放入邻居案例集合 NN。找邻居:圈定距离最近的 k 个训练对象,作为测试对象的近邻 3.自邻居案例集合 NN 中取出前 k 名,依多数决,得到 Item 可能类别。做分类:根据这 k 个近邻归属的主要类别,来对测试对象分类 3.算法步骤算法步骤 step.1-初始化距离为最大值 step.2-计算未知样本和每个训练样本的距离 dist step.3-得到目前 K 个最临近样本中的最大距离 maxdist step.4-如果 dist 小于 maxdist,则将该训练样本作为 K-最近邻样本 step.5-重复步骤 2、3、4,直到未知样本和所有训练样本的
20、距离都算完 step.6-统计 K-最近邻样本中每个类标号出现的次数 step.7-选择出现频率最大的类标号作为未知样本的类标号 该算法涉及 3 个主要因素:训练集、距离或相似的衡量、训练集、距离或相似的衡量、k 的大小。的大小。4.k 邻近模型三个基本要素邻近模型三个基本要素 三个基本要素为距离度量、距离度量、k值的选择和分类决策规则值的选择和分类决策规则 距离度量:距离度量:设特征空间是 n 维实数向量空间,,,=(1),(2),(),=(1),(2),(),的距离定义为:(,)=(|()()|=1)1/p 1 p=2 时为欧式距离:2(,)=(|()()|2=1)1/2 p=1 时为曼哈
21、顿距离:1(,)=|()()|=1 p=时,它是各个坐标距离的最大值(,)=max|()()|5.算法优缺点算法优缺点 1)优点优点 简单,易于理解,易于实现,无需估计参数,无需训练;适合样本容量比较大的分类问题 特别适合于多分类问题(multi-modal,对象具有多个类别标签),例如根据基因特征来判断其功能分类,kNN 比 SVM 的表现要好 2)缺点缺点 懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢;可解释性较差,无法给出决策树那样的规则 对于样本量较小的分类问题,会产生误分 6.常见问题常见问题 1)K 值设定为多大 k 太小,分类结果易受噪声点影响;k 太大,近邻中又可能
22、包含太多的其它类别的点。(对距离加权,可以降低 k 值设定的影响)k 值通常是采用交叉检验交叉检验来确定(以 k=1 为基准)经验规则:k 一般低于训练样本数的平方根一般低于训练样本数的平方根 2)类别如何判定最合适 投票法没有考虑近邻的距离的远近,距离更近的近邻也许更应该决定最终的分类,所以加权投票法更恰当一些。3)如何选定合适的距离衡量 高维度对距离衡量的影响:众所周知当变量数越多,欧式距离的区分能力就越差。变量值域对距离的影响:值域越大的变量常常会在距离计算中占据主导作用,因此应先对变量进行标准化。4)训练样本是否要一视同仁 在训练集中,有些样本可能是更值得依赖的。可以给不同的样本施加不
23、同的权重,加强依赖样本的权重,降低不可信赖样本的影响。5)性能问题 kNN 是一种懒惰算法,平时不好好学习,考试(对测试样本分类)时才临阵磨枪(临时去找 k 个近邻)。懒惰的后果:构造模型很简单,但在对测试样本分类地的系统开销大,因为要扫描全部训练样本并计算距离。已经有一些方法提高计算的效率,例如压缩训练样本量等。6)能否大幅减少训练样本量,同时又保持分类精度?浓缩技术(condensing)编辑技术(editing)6.KNN 算法算法 Python 实现实例之电影分类实现实例之电影分类 电影名称电影名称 打斗次数打斗次数 接吻次数接吻次数 电影类型电影类型 California Man 3
24、 104 Romance Hes Not Really into Dudes 2 100 Romance Beautiful Woman 1 81 Romance Kevin Longblade 101 10 Action Robo Slayer 3000 99 5 Action Amped II 98 2 Action 未知 18 90 Unknown 任务描述:通过打斗次数和接吻次数来界定电影类型 调用 Python 的 sklearn 模块求解 1.import numpy as np 2.from sklearn import neighbors 3.knn=neighbors.KNe
25、ighborsClassifier()#取得 knn 分类器 4.data=np.array(3,104,2,100,1,81,101,10,99,5,98,2)#data 对应着打斗次数和接吻次数 5.labels=np.array(1,1,1,2,2,2)#labels 则是对应 Romance 和 Action 6.knn.fit(data,labels)#导入数据进行训练 7.#Out:KNeighborsClassifier(algorithm=auto,leaf_size=30,metric=minkowski,8.metric_params=None,n_jobs=1,n_nei
26、ghbors=5,p=2,9.weights=uniform)10.knn.predict(18,90)说明:说明:首先,用 labels 数组中的 1 和 2 代表 Romance 和 Aciton,因为 sklearn 不接受字符数组作为标志,只能用 1,2 这样的 int 型数据来表示,后面处理可以将 1 和 2 映射到 Romance 和 Action 上来。fit 则是用 data 和 labels 进行训练,data 对应的是打斗次数和接吻次数构成的向量,称之为特征向量。labels则是这个数据所代表的电影所属的类型。调用 predict 进行预测,将未知电影的特征向量代入,则能分
27、析出该未知电影所属的类型。此处计算结果为 1,也就是该未知电影属于 Romance,和直觉相符。第第五五章章 决策树决策树 5.1.决策树基本概念及算法优缺点决策树基本概念及算法优缺点 1.什么是决策树什么是决策树 分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。决策树(Decision Tree),又称判定树,是一种以树结构(包括二叉树和多叉树)形式来表达的预测分析模型。通过把实例从根节点排列到某个叶子节点来分类实例 叶子节点即为实例所属的分类 树上每个节点说明了对实例的某个属性的测试
28、,节点的每个后继分支对应于该属性的一个可能值 2.决策树结构决策树结构 3.决策树种类决策树种类 分类树-对离散变量做决策树 回归树-对连续变量做决策树 4.决策树算法(贪心算法)决策树算法(贪心算法)有监督的学习 非参数学习算法 自顶向下递归方式构造决策树 在每一步选择中都采取在当前状态下最好/优的选择 决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得各 个子数据集有一个最好的分类的过程。在决策树算法中,ID3 基于信息增益信息增益作为属性选择的度量,C4.5 基于信息增益比信息增益比作为属性选择的度量,CART 基于基尼指数基尼指数作为属性选择属性选择的度
29、量 5.决策树学习过程决策树学习过程 特征选择 决策树生成:递归结构,对应于模型的局部最优 决策树剪枝:缩小树结构规模、缓解过拟合,对应于模型的全局选择 6.决策树优缺点决策树优缺点 优点:优点:(1)速度快:速度快:计算量相对较小,且容易转化成分类规则。只要沿着树根向下一直走到叶,沿途的分裂条件就能够唯一确定一条分类的谓词。(2)准确性高:准确性高:挖掘出的分类规则准确性高,便于理解,决策树可以清晰的显示哪些字段比较重要,即可以生成可以理解的规则。(3)可以处理连续和种类字段 缺点:缺点:(1)对于各类别样本数量不一致的数据,信息增益偏向于哪些具有更多数值的特征(2)易于过拟合(3)对连续的
30、字段比较难预测(4)不是全局最优 5.2 决策树数学知识决策树数学知识 1.信息论:信息论:若一事假有 k 种结果,对应的概率为,则此事件发生后所得到的信息量 I 为:I=(1 2(1)+2 2(2)+2()=2=1 2.熵:熵:给定包含关于某个目标概念的正反样例的样例集 S,那么 S 相对这个布尔型分类的熵为:Entropy(S)2 2其中 P+代表正样例,p-代表反样例 3.条件熵条件熵:假设随机变量(X,Y),其联合分布概率为 P(X=xi,Y=yi)=Pij,i=1,2,n;j=1,2,m 则条件熵 H(Y|X)表示在已知随机变量 X 的条件下随机变量 Y 的不确定性,其定义为 X 在
31、给定条件下Y 的条件概率分布的熵对 X 的数学期望 5.3 决策树算法决策树算法 Hunt 在 Hunt 算法中,通过递归的方式建立决策树。1)如果数据集 D 中所有的数据都属于一个类,那么将该节点标记为为节点。2)如果数据集 D 中包含属于多个类的训练数据,那么选择一个属性将训练数据划分为较小的子集,对于测试条件的每个输出,创建一个子女节点,并根据测试结果将 D 中的记录分布到子女节点中,然后对每一个子女节点重复 1,2 过程,对子女的子女依然是递归的调用该算法,直至最后停止。5.4.决策树算法决策树算法 ID3 1.分类系统信息熵分类系统信息熵 2.条件熵条件熵 分类系统中的条件熵指的是当
32、样本的某一特征 X 固定时的信息熵 因此样本特征 X 取值为 xi 的概率是 Pi,该特征被固定为值 xi 时的条件信息熵就是 H(C|X=xi),那么H(C|X)就是分类系统中特征 X 被固定时的条件熵(X=(x1,x2,xn):3.信息增益信息增益 Gain(S,A)定义)定义 4.属性选择度量属性选择度量 使用信息增益,选择最高信息增益最高信息增益的属性作为当前节点的测试属性 5.算法不足算法不足 使用 ID3 算法构建决策树时,若出现各属性值取值数分布偏差大的情况,分类精度会大打折扣 ID3 算法本身并未给出处理连续数据的方法 ID3 算法不能处理带有缺失值的数据集,故在算法挖掘之前需
33、要对数据集中的缺失值进行预处理 ID3 算法只有树的生成,所以该算法生成的树容易产生过拟合 6.算法流程算法流程 7.算法算法 Python 实现实现 1)Python 实现熵的计算 def calcShannonEnt(dataSet):numEntries=len(dataSet)labelCounts=for featVec in dataSet:currentLabel=featVec-1 if currentLabel not in labelCounts.keys():labelCountscurrentLabel=0 labelCountscurrentLabel+=1 shan
34、nonEnt=0.0 for key in labelCounts:prob=float(labelCountskey)/numEntries shannonEnt-=prob*log(prob,2)return shannonEnt 2)Sklearn.tree 参数介绍及使用建议 官网:官网:http:/scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html class sklearn.tree.DecisionTreeClassifier(criterion=gini,split
35、ter=best,max_depth=None,min_samples_split=2,min_samples_leaf=1,max_features=None,random_state=None,min_density=None,compute_importances=None,max_leaf_nodes=None)比较重要的参数:比较重要的参数:criterion:规定了该决策树所采用的的最佳分割属性的判决方法,有两种:“gini”,“entropy”。max_depth:限定了决策树的最大深度,对于防止过拟合非常有用。min_samples_leaf:限定了叶子节点包含的最小样本数,这
36、个属性对于防止上文讲到的数据碎片问题很有作用 模块中一些重要的属性方法:模块中一些重要的属性方法:n_classes_:决策树中的类数量。classes_:返回决策树中的所有种类标签。feature_importances_:feature 的重要性,值越大,越重要。fit(X,y,sample_mask=None,X_argsorted=None,check_input=True,sample_weight=None)将数据集 x,和标签集 y 送入分类器进行训练,这里要注意一个参数是:sample_weight,它和样本的数量一样长,所携带的是每个样本的权重。get_params(deep
37、=True)得到决策树的各个参数。set_params(*params)调整决策树的各个参数。predict(X)送入样本 X,得到决策树的预测。可以同时送入多个样本。transform(X,threshold=None)返回 X 的较重要的一些 feature,相当于裁剪数据。score(X,y,sample_weight=None)返回在数据集 X,y 上的测试分数,正确率。使用建议使用建议 当我们数据中的 feature 较多时,一定要有足够的数据量来支撑我们的算法,不然的话很容易overfitting PCA 是一种避免高维数据 overfitting 的办法。从一棵较小的树开始探索,
38、用 export 方法打印出来看看。善用 max_depth 参数,缓慢的增加并测试模型,找出最好的那个 depth。善用 min_samples_split 和 min_samples_leaf 参数来控制叶子节点的样本数量,防止 overfitting。平衡训练数据中的各个种类的数据,防止一个种类的数据 dominate。3)Sklearn.tree 实战实战 测试数据测试数据 data.txt 1.5 50 thin 1.5 60 fat 1.6 40 thin 1.6 60 fat 1.7 60 thin 1.7 80 fat 1.8 60 thin 1.8 90 fat 1.9 70
39、 thin 1.9 80 fat Python 实战代码实战代码#-*-coding:utf-8-*-import numpy as np from sklearn import tree from sklearn.metrics import precision_recall_curve from sklearn.metrics import classification_report from sklearn.cross_validation import train_test_split#数据读入 data=labels=with open(C:UsersAllenDesktopdata
40、.txt)as ifile:for line in ifile:tokens=line.strip().split()data.append(float(tk)for tk in tokens:-1)labels.append(tokens-1)x=np.array(data)labels=np.array(labels)y=np.zeros(labels.shape)#标签转化为0,1 ylabels=fat=1#拆分训练数据和测试数据 x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2)#使用信息熵作为划分标准,
41、对决策树进行训练 clf=tree.DecisionTreeClassifier(criterion=entropy)print clf#DecisionTreeClassifier(class_weight=None,criterion=entropy,max_depth=None,#max_features=None,max_leaf_nodes=None,min_samples_leaf=1,#min_samples_split=2,min_weight_fraction_leaf=0.0,#presort=False,random_state=None,splitter=best)cl
42、f.fit(x_train,y_train)#把决策树写入文件 with open(tree.dot,w)as f:f=tree.export_graphviz(clf,out_file=f)#digraph Tree#node shape=box;#0 label=X1=75.0nentropy=0.9544nsamples=8nvalue=3,5;#1 label=X0 1 labeldistance=2.5,labelangle=45,headlabel=True;#2 label=entropy=0.0nsamples=2nvalue=0,2;#1-2;#3 label=entropy
43、=0.0nsamples=3nvalue=3,0;#1-3;#4 label=entropy=0.0nsamples=3nvalue=0,3;#0-4 labeldistance=2.5,labelangle=-45,headlabel=False;#系数反映每个特征的影响力。越大表示该特征在分类中起到的作用越大 print(clf.feature_importances_)#测试结果的打印 answer=clf.predict(x_train)print(x_train)print(answer)print(y_train)print(np.mean(answer=y_train)#准确率与
44、召回率#准确率:某个类别在测试结果中被正确测试的比率#召回率:某个类别在真实结果中被正确预测的比率#测试结果:array(0.,1.,0.,1.,0.,1.,0.,1.,0.,0.)#真实结果:array(0.,1.,0.,1.,0.,1.,0.,1.,0.,1.)#分为thin的准确率为0.83。是因为分类器分出了6个thin,其中正确的有5个,因此分为thin的准确率为5/6=0.83。#分为thin的召回率为1.00。是因为数据集中共有5个thin,而分类器把他们都分对了(虽然把一个fat分成了thin!),召回率5/5=1。#分为fat的准确率为1.00。不再赘述。#分为fat的召回率
45、为0.80。是因为数据集中共有5个fat,而分类器只分出了4个(把一个fat分成了thin!),召回率4/5=0.80。#本例中,目标是尽可能保证找出来的胖子是真胖子(准确率),还是保证尽可能找到更多的胖子(召回率)。precision,recall,thresholds=precision_recall_curve(y_train,clf.predict(x_train)answer=clf.predict_proba(x):,1 print(classification_report(y,answer,target_names=thin,fat)5.5 决策数算法决策数算法 C4.5 1.
46、属性选择度量属性选择度量 C4.5 算法用信息增益率来选择属性,即选用信息增益比选择最佳特征 2.信息增益比率度量信息增益比率度量 信息增益比率度量是用 ID3 算法中的增益度量 Gain(D,X)和分裂信息度量 SplitInformation(D,X)来共同定义的。分裂信息度量 SplitInformation(D,X)就相当于特征 X(取值为 x1,x2,xn,各自的概率为 P1,P2,.,Pn,Pk就是样本空间中特征 X 取值为 Xk的数量除上该样本空间总数)的熵。SplitInformation(D,X)=-P1 log2(P1)-P2 log2(P)-,.,-Pn log2(Pn)
47、GainRatio(D,X)=Gain(D,X)/SplitInformation(D,X)3.对连续分布特征的处理对连续分布特征的处理 C4.5 先把连续属性转换为离散属性再进行处理。如果有 N 条样本,那么我们有 N-1 种离散化的方法:vj 的分到右子树。计算这 N-1 种情况下最大的信息增益率。1)对特征的取值进行升序排序 2)两个特征取值之间的中点作为可能的分裂点,将数据集分成两部分,计算每个可能的分裂点的信息增益(InforGain)。优化算法就是只计算分类属性发生改变的那些特征取值。3)选择修正后信息增益(InforGain)最大的分裂点作为该特征的最佳分裂点 4)计算最佳分裂点
48、的信息增益率(Gain Ratio)作为特征的 Gain Ratio。4.相比相比 ID3 算法的改进算法的改进 使用信息增益比例信息增益比例而非信息增益信息增益作为分裂标准 处理含有带缺失值的样本处理含有带缺失值的样本方法为将这些值并入最常见的某一类中或以最常用的值代替 处理连续值连续值属性 规则的产生:规则集存储于一个二维数组中,每一行代表决策树的一个规则 交互验证:训练开始之前,预留一部分数据,训练之后,使用这部分数据对学习的结果进行验证 5.6 叶子裁剪叶子裁剪 1.剪枝的原因和目的剪枝的原因和目的 解决决策树对训练样本的过拟合问题 2.决策树决策树常用剪枝方法常用剪枝方法 预剪枝预剪
49、枝(Pre-Pruning)和后剪枝后剪枝(Post-Pruning)3.预剪枝:预剪枝:预剪枝是根据一些原则及早的停止树增长,如树的深度达到用户所要的深度、节点中样本个数少于用户指定个数、不纯度指标下降的最大幅度小于用户指定的幅度等。4.后剪枝:后剪枝:通过在完全生长的树上剪去分枝实现的,通过删除节点的分支来剪去树节点,可以使用的后剪枝方法有多种,比如:代价复杂性剪枝、最小误差剪枝、悲观误差剪枝代价复杂性剪枝、最小误差剪枝、悲观误差剪枝等等 修剪方式有:1)用叶子节点来替换子树,叶节点的类别由子树下面的多类决定 2)用子树最常用的分支来替代子树 对数据集排序以每个数据为阈值划分数据集计算各划
50、分的信息增益根据最大增益选择阈值使用阈值对数据集进行划分5.7 决策树算法决策树算法 CART 参考:参考:http:/ 1.分类与会归树(calssification and regression tree,CART)是在给定输入随机变量 X 条件下输出随机变量 Y 的条件概率分布的学习方法。CART 假设决策树是二叉树,内部结点特征的取值为是和否。这样的决策树等同于递归地二分每个特征,将输入控件即特征空间划分为有限个单元,并在这些单元上确定预测地概率分布。2.决策树的生成就是递归地构建二叉决策树的过程,对回归树回归树用平方误差最小化准则平方误差最小化准则,对分类树分类树用GINI 指标(基