机器学习之分类-决策树随机森林
决策树
原理(信息论)
信息熵
- 信息:消除随机不定性的东西
- 信息熵公式,单位bit
H ( X ) = − ∑ i = 1 n ( P ( x i ) log b P ( x i ) ) H(X)=-\sum^{n}_{i=1}(P(x_i)\log_{b}P(x_i)) H(X)=−i=1∑n(P(xi)logbP(xi))
信息增益
- 特征A对训练数据集D的信息增益g(D,A)定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差,即
g ( D , A ) = H ( D ) − H ( D ∣ A ) H ( D , A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) g(D,A)=H(D)-H(D|A)\\ H(D,A)=\sum^n_{i=1}\frac{|D_i|}{|D|}H(D_i) g(D,A)=H(D)−H(D∣A)H(D,A)=i=1∑n∣D∣∣Di∣H(Di)
- 特征A对训练数据集D的信息增益g(D,A)定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差,即
决策树的划分依据:信息增益
- 其他
- ID3: 信息增益 最大准则
- C4.5: 信息增益比 最大准则
- CART: 基尼系数 最小准备 在sklearn中可以选择划分的默认原则
- 优势:划分更加细致
- 其他
优缺点
- 优点
- 简单的理解和解释,树木可视化
- 缺点
- 可能创建过于复杂的树 ,容易过拟合
- 改进:剪枝,随机森林
- 优点
API
class sklearn.tree.DecisionTreeClassifier(criterion='gini',max_depth=None, random_state=None)
# criterion:默认'gini',可以选择信息熵增益 ‘entropy’
代码示例 : 鸢尾花预测
from sklearn.tree import DecisionTreeClassifier from sklearn.datasets import load_iris from sklearn import tree from sklearn.model_selection import train_test_split iris=load_iris() x_train,x_test,y_train,y_test = train_test_split(iris.data, iris.target) # 决策树并不需要对数据进行标准化 estimator = DecisionTreeClassifier(max_depth=3) estimator.fit(x_train,y_train) y_predict = estimator.predict(x_test) print(y_test==y_predict) print(y_predict) score=estimator.score(x_test,y_test) print('score=',score)
决策树可视化
from matplotlib import pyplot as plt
#...
fig=plt.figure()
tree.plot_tree(estimator)
plt.show()
集成学习方法之随机森林
原理
- 随机森林
- 包含多个决策树的分类器
- 随机
- 训练集随机
- BootStrap 随机有放回的抽样
- 特征随机
- 从M个特征中随机你抽取m个特征(M>>m)
- 训练集随机
- 总结
- 具有极好的准确率
- 能够有效地运行在大数据集上,而且不需要降维
API
sklearn.ensemble.RandomForestClassifier()
n_estimators
决策树的数量criteria
特征选择方法,默认ginimax_features='auto'
每个决策树的最大特征数量auto
max_features=sqrt(n_features)sqrt
max_features=sqrt(n_features)log2
max_features=log2(n_features)None
max_features=n_features
bootstrap=True
使用放回抽样min_samples
节点划分最少样本数min_samples_leaf
叶子节点的最小样本数
示例
使用随机森林和网格搜索预测鸢尾花
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
data=load_iris()
x_train,x_test,y_train,y_test =train_test_split(data.data,data.target)params = {'n_estimators':[10,50,100,200,1000],
'max_depth':[3,5,8,11]}
clf = RandomForestClassifier()
clf = GridSearchCV(clf,param_grid=params,cv=10)
clf.fit(x_train,y_train)
y_predict = clf.predict(x_test)
score=clf.score(x_test,y_test)
print(y_test==y_predict)
print(score)
print(clf.best_params_,clf.best_score_)
机器学习之分类-决策树随机森林相关推荐
- 机器学习实战之分类算法(K-近邻/朴素贝叶斯/决策树/随机森林)
机器学习分类算法 1. 机器学习算法简介 1.1 按照学习方式分类 1.2 区别 1.3 关于监督学习中的分类与回归区别 1.4 机器学习开发流程 2. 数据集介绍与划分 2.1 sklearn数据集 ...
- 【算法精讲】集成分类与随机森林
ONE 集成分类 01 什么是集成分类 集成分类是集成学习的一种,先讲下集成学习是什么. 所谓集成学习,引用一句谚语"三个臭皮匠顶个诸葛亮"最恰当不过. 集成学习就是将多个弱学习器 ...
- 决策树随机森林GBDTXGBoost学习笔记以及代码实现
文章目录 1. 引入 1.1 决策树 1.2 随机森林 1.3 GBDT(Gradient Boosting Decision Tree)梯度提升决策树 1.4 XGBoost(eXtreme Gra ...
- 机器学习基础算法之随机森林
英文原文<The Random Forest Algorithm> 专知 编译<机器学习基础算法之随机森林> [导读]在当今深度学习如此火热的背景下,其他基础的机器学习算法显得 ...
- 机器学习算法篇(随机森林树)
随机森林树: 1.定义: 随机森林只利用多颗决策树对样本进行训练并预测的一种分类器,可回归可分类:随机森林是基于多颗决策树的集成算法,常见决策树算法主要分为: ID3(利用信息增益进行特征选择),C4 ...
- 机器学习工具篇_sklearn_随机森林
1.集成算法概述 Q:随机森林 是一种集成算法 不是一种单独的机器 学习算法 Q:集成算法的目标 考虑多个评估器的建模结果,汇总之后 得到一个综合的结果,以此来获得更好的回归或者分类表现 Q:集成评估 ...
- 《菜菜的机器学习sklearn课堂》随机森林应用泛化误差调参实例
随机森林 随机森林 - 概述 集成算法概述 sklearn中的集成算法 随机森林分类器 RandomForestClassifier 重要参数 控制基评估器的参数 n_estimators:基评估器的 ...
- 机器学习-集成学习:随机森林(Random Forest)
内容参考:https://github.com/NLP-LOVE/ML-NLP/tree/master/Machine%20Learning/3.1%20Random%20Forest 略做 ...
- 机器学习——决策树+随机森林
目录 决策树 认识决策树 决策树的生成 信息的单位--比特 信息熵 决策树的划分依据之一--信息增益 例题--银行贷款分析 决策树的其他分类依据 案例--泰坦尼克号乘客生存分类 决策树的结构.本地保存 ...
最新文章
- Javascript原型链
- android 九宫格绘制,Android draw9patch.bat 九宫格绘制工具使用
- mysql5.7.17主从_MySQL 5.7主从不停机添加新从库
- vue-cli-plugin-element的使用
- 微信小程序获取用户手机号--官方示例
- 1、Locust压力测试环境搭建
- 关于Spring的事务Transactional,锁同步,并发线程
- HTTP 错误 404.3 – Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。...
- HALCON学习之旅(一)
- HDU 1251 统计难题
- 基于JAVA+SpringMVC+Mybatis+MYSQL的大学生兼职网站
- c#如何根据字符串长度获得宽度
- 计算机信息管理专业教学改革,计算机信息管理专业实践教学改革探索
- matlab处理波动的数据,波动数据时间序列的分析与处理
- 苹果手机访问html文件夹,iPhone如何访问Windows的共享文件夹
- python全栈测试开发工程师_Python测试开发全栈核心课程 互联网测试工程师必修课...
- 谷歌AI中国中心成立,人工智能势不可挡?
- Eclipse基础知识
- GO+Selenium批量关注各大网站实战 2 (今日头条,批量关注)
- Moasure魔尺 | 精装礼盒装开箱过程
热门文章
- 我的世界java版地图结构_地图物品格式 - Minecraft Wiki,最详细的官方我的世界百科...
- STL中list类的自己简单实现
- Vue项目实战之人力资源平台系统(十)图片上传和打印员工信息
- vs2010创建Dll例子,并解决运行错误:应用程序正常初始化(0xc000000d)失败。请单击“确定”,终止应用程序。
- buuctf 逆向Transform
- 看完这组照片,你还敢说自己会PS吗?
- 早起的鸟儿有虫吃,早起的虫儿被鸟吃
- 预告 | 2021数字经济领航者峰会,零数科技CEO林乐受邀出席并做主题演讲
- concat拼接的坑 mysql_详解MySQL拼接函数CONCAT的使用心得
- jdbc执行sql出现错误: mismatched input ‘,’ excepting ‘.‘ 应该如何解决?