【郑州校区】机器学习第六天笔记分享 机器学习第六天:
主要内容:决策树算法
回顾机器学习第五天内容:
Pandas:Series一维数据
import pandas as pd
pd.Series(可迭代对象-list、tuple、dict、set不可行,index=[])
series1.索引
print S.index S.values
print head
Dataframe二维数据:
数据要求是二维矩阵
import pandas as pd
pd.Dataframe(矩阵数据,index=,colume=)
print dataframe1["列"]
print dataframe1.ix["行","列"]
isnull fill_na drop_na(axis=0,axis=1)
describe()---四分位数
Matplotlib:
import matplotlib.pyplot as plt
plt.plot(X,y)
#面向过程
plt.figure()
plt.sca()
plt.scatter()
plt.title()
plt.xlabel()
plt.legend()
plt.grid()
plt.show()
#面向对象
fig=plt.figure()
ax1=fig.add_subplot(221)
ax2=fig.add_subplot(222)
ax3=fig.add_subplot(223)
ax4=fig.add_subplot(224)
ax1.plot(X,y)
ax2.scatter(X,y)
ax3.hist()
ax4.boxplot()
ax1.set_title()
ax1.set_xlable()
ax1.set_ylabel()
ax1.legend()
plt.show()
Scipy:数值计算、物理应用、线性代数运算、信号的运算
机器学习:
概念:通过CPU或GPU计算利用经验改善计算机系统自身的性能。
机器学习任务分类:
是否有类标签:监督学习和非监督学习
监督学习:是否类标签是连续值的问题,分为回归和分类
分类:2分类(西瓜好坏)、3分类、多分类(手写体识别)
非监督学习:聚类:
根据特征之间的相似性或相异性将数据划分为不同的组,组内的相似性高,
组间的相异性高。
降维:主成分分析法(特征值和特征向量部分)、SVD奇异值分解法
半监督学习:基于聚类的假设,属性或特征相似的部分会通过距离聚类聚集在一起,不相似
的或者差异性比较大的会分成不同的组。
纯半监督学习、直推学习
强化学习:解决连续型决策的问题
迁移学习:
机器学习的处理问题的流程:
1.数据角度---有标签数据(无监督、有监督)
2.业务角度---是否有预测---有预测--->监督学习-->根据预测值是否连续或离散--->分类或回归
没有预测--->非监督学习
构建机器学习问题的流程:
准备数据,导入数据集
特征工程(数据预处理--对数据清洗或数据归一化(去量纲)、特征处理)
数据切分---训练集和测试集
模型训练(训练集+机器学习算法)
类标签预测--通过测试数据X灌入训练好的模型中得到一个预测值Y1
形成误差|Y-Y1|
模型训练的过程中使得模型误差变小
评价指标:误差--训练误差、测试误差、泛化误差、准确率、错误率
决策树算法学习:
监督学习模型----分类
树---树根、树枝和树叶
决策树算法的思路:
利用树的结构,将数据集中的特征(属性)划分为树中的分支节点
而数据集中类别标签对应的就是树的叶子节点。
电商数据案例:
数据集:电商数据集
样本:1024个样本
特征:机器学习的LabelEncoder编码
年龄:青年0,中年1,老年2
收入:高0、中1、低2
学生:是0、否1
信誉:良0、优1
机器学习中one-hot编码(独热编码)
青年 中年 老年
0 0 1
0 1 0
1 0 0
类别标签:
用户是否购买0or不购买1
提出需求:
如何对客户进行分类?-----用户是否购买or不购买---基于规则建树
通过分析给出销售人员一些建议--------通过定量的方法给出树中每个节点的数值,通过比例关系给出销售人员意见
解决需求:
数据+算法(分类)---->模型----->预测---->模型泛化性能更佳
第一种方法:基于规则的就建树
1.明确的是那个属性或特征是根节点或叶子节点----根据顺序选取
2.随机选择根节点的特征或叶子结点的特征
3.选择--年龄(Age)---中年1--得到叶子结点的特征
青年0--收入---学生--叶子结点
老年2--收入---学生--信誉--叶子节点
构建决策树的三要素:
1.特征选择----信息熵或信息增益gini系数来选择特征
2.决策树的生成---ID3算法(信息增益) C4.5算法(gini系数)
3.决策树的剪枝---如果决策树产生了过拟合
过拟合:数据对训练集效果好,对未知数据效果很差
---先剪枝、后剪枝
信息熵:信息的不确定性度量,熵越大不确定性越大,通常每种可能性相同的时候,熵最大的
结论:在构建决策树的过程中,希望选择信息熵比较小的,因为信息熵小对应的信息纯度越高
信息的不确定性越小,确定性越大。
第二种建树的方法:基于信息熵和信息增益建立决策树
信息熵:对信息的不确定性度量
如果每一事件发生的概率都相等(均匀分布),此时熵最大
熵最大,不确定性越大,确定性越小,信息纯度越低
熵越小,不确定性越小,确定性越大,信息纯度越高
如何根据熵建立一颗决策树?
---选择熵比较小的特征或者属性作为分支节点
---原因:因为熵小,信息纯度越高
---定义:H(x)=-sum(pilog(pi))
ID3算法:
信息增益:总体的信息熵-以某一个特征作为划分标准的信息熵
计算公式:Gain(A)=I(parent)-H(A)
总体信息熵不会改变的
H(age)代表的是以年龄为节点的信息熵的值
H(income)代表的是以收入作为划分节点的信息熵
目的:选择特征或属性进行节点划分
选取方式:选择信息增益比较大的作为分支节点
作用:通过节点来划分树结构获取信息量
假设:Gain(age)>Gian(income)>Gain("sex")
选择方式:优先选择年龄、收入、性别
ID3算法原理:
输入:数据集
输出:决策树
算法:
1.计算信息增益,选择信息增益比较大的特征作为当前的划分节点
2.在已有的特征集合中去掉已经选择过的特征
AT={A}-{a}
2.继续在剩余的节点中计算信息增益比较大的,作为下一个划分节点
4.直到所有的节点都划分为叶子节点
注意:计算信息增益时候,将所有特征或属性的信息增益计算出来了,只需要排序和选择就可以。
迭代建树的停止条件:
1.给定节点所有的样本属于同一个类别
2.没有剩余的属性用于划分,只需要通过多数表决的方法决定剩余节点
3.给定一个信息增益的阈值,通过该阈值判断是否迭代停止
给定迭代次数:在python的sklearn中下属三种情况都是参数,可以动态调整
max_depth 树的深度
min_sample_leaf根据叶子结点所包含的元素个数决定是否迭代停止
min_sample_split根据分支节点含有的样本数决定是否迭代停止
C4.5算法:
在ID3算法的基础上增加了信息增益率作为划分节点的依据
优势:规避掉信息增益比较大或小的时候会倾向于属性多的情形
对连续值处理非常好的
对决策树通过剪枝减小复杂度(过拟合)
能够对不完整数据进行处理
CART树算法:选择划分的节点是根据gini系数划分
在Python的sklearn中默认使用gini系数作为划分的准则
属于一种贪心算法
决策树算法极易产生过拟合的情况:
过拟合:数据在训练数据集上的表现比较好,但是在新数据或测试数据上表现比较差或一般的情况,称之为过拟合
解决办法:剪枝技术
分类技术:先剪枝(预剪枝)和后剪枝
为什么需要进行剪枝?
答:决策树很容易产生过拟合,需要进行剪枝降低决策树的复杂程度
根据剪枝前后的分类误差率的变化决定是否进行剪枝
先剪枝:
在实际生产中,确是比较常见的一种手段
预剪枝,在建立决策树的过程中进行剪枝
通过选择不同的信息不纯度的阈值(信息增益)
(1)如果阈值设置的过大,容易产生欠拟合(决策树没有生产完全)
(2)如果阈值设置的过小,容易产生过拟合(近似于未剪枝技术)
上述给定的a值选取的过程更多的是靠经验
后剪枝:
决策树已经形成之后,进行剪枝的一种技术
如果一个节点能够替换一颗子树,根据分类的误差率时候减少来进行评判
通过充分生长的一棵树中自底向上的进行树的剪枝
(1)用新的叶子结点替换原来的子树
新的叶子节点的类别根据数据集中少数服从多数的原则选取
(2)用子树中最常见的分支节点代替子树
**如何评判剪枝效果?MEP最小错误率剪枝技术
**选择子树或节点的时候,需要产生若干颗子树或节点计算所有子树或节点
的错误率,从中选择错误率较小的那个量
了解剪枝对应的数学原理---剪枝系数
两种剪枝技术的选择?
现在工业界中通常选择先剪枝技术,计算复杂度较小,容易实现
在理论上如果模型的泛化性能好的话,建议采用后剪枝技术,但是会带来复杂度的提升
决策树的特点:
优点:直观、便于理解
执行效率高,执行一次可以多次使用
缺点:对连续值处理不好(Cart树中提供了二分的方法)
实际分类中往往只能处理一个字段
利用电商数据集巩固ID3算法的流程
1.计算总体的信息熵
2.计算分支节点的信息熵
3.分支节点的信息增益=总体的信息熵-分支节点的信息熵
4.根据分支节点的信息增益进行大小排序,选择较大的信息增益值作为分支节点,依次递归选择分支节点
可以对不之前基于规则的建树,利用信息增益更加准确和高效
决策树实战:
1.手写体识别实战
构建机器学习处理问题的流程:
1.准备数据,导入数据集
2.数据探索性分析,EDA分析
3.特征工程(数据处理、特征的预处理)
4.数据切分:训练集+测试集,训练集占比例高的
5.模型训练(训练集+机器学习算法---决策树算法)
6.利用测试数据进行预测---通过测试数据X灌入算法中得到一个预测值Y1
7.|Y-Y1|误差,模型训练过程中使得模型的误差变小
8.模型评价:准确率、错误率、误差
准备手写体0,1,2----灰度化和二值化处理----32*32矩阵
转化为1*1024像素矩阵----灌入机器学习算法中---模型
---形成模型从而可以预测其他手写体数字
注意:在Python对应的机器学习库sklearn中已经集成好了手写体数据,只需要
导入对应库中的手写体数据即可。
2.相亲数据集实战
3.iris鸢尾花数据分类实战
4.泰坦尼克号问题实战
需要结合sklearn和pandas的内容
传智播客·黑马程序员郑州校区地址 河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
|