SKlearn 深度学习
Sklearn简述
scikit-learn , 又写作 sklearn ,是一个开源的基于python语言的机器学习工具包,它通过 NumPy, SciOy 和 Matplotlib 等 Python 数值计算库实现搞笑的算法应用,并涵盖了几乎所有的主流机器学习算法。
http://scikit-learn.org/stable/index.html
实际工程应用中,Python 手写代码实现算法耗时耗力,要求过高,sklearn 开源帮助我们,调用 API,实现算法,我们只需要 分析采集数据,根据数据选择合适算法,在工具包中调用算法,调整算法参数,获取所需信息。
决策树
1、概述
1.1 基本概念和解决问题
决策树(Decison Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并利用树状图的结构来呈现这些规则,以解决分类和回归问题。 决策树算法易于理解,适用于各种数据, 在解决各种问题时,均有良好表现。
在树中:(以分类树为例)
最上方的问题节点叫做根节点,在得到结论前的每个阶段都是中间节点,得到的每一个结论(类别:class ) 叫做叶子节点。
根节点: 只有出边,无进边,包含最初的,针对特征的提问。
中间节点:既有进边,也有出边,进边仅有一条,出边可有多条,都是针对特征的提问。
叶子节点:只有进边,无出,每个叶子节点都是一个类别标签。
子节点与父节点 : 在两个相连的节点中,更接近根节点的是父节点,另一个是子节点。
决策树中,算法核心解决两个问题:
1)如何从数据汇表中找出最佳节点和最佳分枝
2)如何让决策树停止生长(防止过拟合)
1.2 sklearn 中决策树
- 模块 sklearn.tree
sklearn 中鄋的决策树的类都在 tree 这个模块下
tree | 描述 |
---|---|
tree.DecisionTreeClassifier | 分类树 |
tree.DecisionTreeRegressor | 回归树 |
tree.export_graphviz | 将生成的决策树导出为 DOT 格式,画图专用 |
tree.ExraTreeClassifier | 高随机版本的 分类树 |
tree.ExtraTreeRegressor | 高随机版本的 回归树 |
- sklearn 建模基本流程
- 实例化 决策树 模型
- 通过模型接口,训练模型
- 导入测试集,从模型接口中 提取信息
from sklearn import tree # 导入模块
clf = tree.DecisionTreeClassifier() # 实例化 决策树
clf = clf.fit(X_train, Y_train) # 输入训练集,训练模型
# X 为数据,Y 为分类结果
result = clf.score(X_test, Y_test) # 导入测试集,输出测试分数
2. DecisionTreeClassifier 分类树
2.1 重要参数
2.1.1 criterion
为了将表格转化为一棵树,决策树需要找出最佳节点和最佳分枝方法,对分类树而言,衡量此 “最佳” 的指标成为 “不纯度”。 不纯度越低,决策树对训练集的拟合效果越好。现在使用的决策树宣发,在分枝方法上的核心大多围绕某个不纯度相关指标优化上。
不纯度基于节点计算,树中每个节点均会有一个不纯度,且子节点的不纯度一定低于父节点,在同一棵决策树上,叶子节点的不纯度一定最低。
criterion 参数规定计算不纯度的方法。
- “entropy” 使用 信息熵(Entropy)
- “gini” 使用 基尼系数(Gini impurity)
t 代表给定节点,i 代表标签的任意一种分类,p(i|t) 代表 标签分类 i 在 t 节点上,所占比例。
当使用 “entropy” 信息熵时,sklearn 实际计算为 基于信息熵的信息增益 : 父节点信息熵与子节点信息熵之差。
比起基尼系数,信息熵对不纯度更加敏感,对不纯度惩罚最强。但在 实际使用中,信息熵和基尼系数效果基本相同。
由于存在对数,信息熵的计算比基尼系数缓慢。 另外,由于信息熵对不纯度更加敏感,所以使用信息熵作为指标时,决策树的生长会更加 “精细” —— 对于高位度数据或者噪音极多的数据,信息熵易发生过拟合,基尼系数在此情况下,效果较为良好。但是,当模型在训练集和测试集上,均表现较差时,即:拟合程度不足时,一般常用信息熵。
当然,具体情况,具体分析
2.1.2 建立树:
from sklearn import tree # 导入树
from sklearn.datasets import load_wine # 导入 sklearn 自带的红酒数据集
from sklearn.medel_selection import train_test_split # 导入训练集和测试集分类模块