加州房价--决策树与随机森林
需要新装包
'''decisionTree 写在前面
要安装http://www.graphviz.org/download/ 测试是否安装成功 dot -version 修改环境变量
pip install graphviz 提示:Successfully installed graphviz-0.20
pip install pydotplus
'''
#===================================import matplotlib.pyplot as plt
import pandas as pd
from sklearn import tree
#从sklearn.datasets中调用数据集
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import GridSearchCV
#报错--GraphViz's executables not found----C:\Program Files\Graphviz\bin环境变量,!!!!新安装完成后,记得重启!!!!!
import os
os.environ["PATH"]+=os.pathsep+"C:\Program Files\Graphviz\bin"housing = fetch_california_housing()
print(housing)
print(housing.DESCR)
print(housing.data.shape)
print(housing.target.shape)dtr= tree.DecisionTreeRegressor(max_depth=2)#树最大深度是2
# dtr.fit(housing.data[:,[6,7]],housing.target) #导致出现错误ValueError: Length
dtr.fit(housing.data, housing.target)
# print(dtr.fit,"_"*50,housing.feature_names)# 可视化显示
#运行tree.export_graphviz()方法时报错ValueError: Length of feature_names, 8 does not match number of features ,2 ,是方法里的feature_names参数出问题,feature_names定义的列不包括标签列,而且要和训练集的列数个数相同。
# print("--"*50,housing.feature_names)
#dot_data = tree.export_graphviz(dtr, out_file=None, feature_names=housing.feature_names[6:8], filled=True, impurity=False, rounded=True)dot_data = tree.export_graphviz(dtr, out_file=None, feature_names=housing.feature_names, filled=True, impurity=False, rounded=True)import pydotplus
graph = pydotplus.graph_from_dot_data(dot_data)
graph.get_nodes()[7].set_fillcolor('#FFF2DD')
print('#FFF2DD')
# graph.write_png('iris.png')
# graph.write_pdf('iris.pdf')
from IPython.display import display, Image#只在jupyter 中显示其他ide不行
#Image(graph.create_png())
# display(Image(graph.create_png()))#划分测试集和训练集
from sklearn.model_selection import train_test_split
data_train,data_test,target_train,target_test = \
train_test_split(housing.data,housing.target,test_size=0.1,random_state =42)
#决策树回归
dtr = tree.DecisionTreeRegressor(random_state=42)
dtr.fit(data_train,target_train)
dtr.score(data_test,target_test)
print(dtr.fit,"-dtr-"*50,dtr.score)#随机森林回归
from sklearn.ensemble import RandomForestRegressor
rfr = RandomForestRegressor(random_state =42)
rfr.fit(data_train,target_train)
rfr.score(data_test,target_test)
print(rfr.fit,"-rfr-"*50,rfr.score)#导入交叉验证选择参数模块
from sklearn.model_selection import GridSearchCV# #创建可选参数字典
tree_param_grid = {'min_samples_split':list((3,6,9)),'n_estimators':list((10,50,100))}
# min_samples_split:分裂内部节点需要的最少样例数.int(具体数目),float(数目的百分比)
# n_estimators:森林中数的个数。这个属性是典型的模型表现与模型效率成反比的影响因子,即便如此,你还是应该尽可能提高这个数字,以让你的模型更准确更稳定。
#创建选参对象,传入模型对象,参数字典,以及指定进行3折交叉验证
grid = GridSearchCV(RandomForestRegressor(),param_grid = tree_param_grid,cv = 3)#向选参对象传入训练集数据
grid.fit(data_train,target_train)
#grid.grid_scores_ 得分,grid.best_params_最佳参数 ,grid.best_score_最佳得分
#打印各参数组合得分
print(grid.cv_results_['mean_test_score'])
#打印最佳参数及其得分
print(grid.best_params_, grid.best_score_)
'''
决策树是一种有监督的机器学习算法,该方法可以用于解决分类和回归问题。
决策树可以简单地理解为达到某一特定结果的一系列决策。决策树相当于一个大师,通过自己在数据集中学到的知识对于新的数据进行分类。随机森林是基于树的机器学习算法,该算法利用了多棵决策树的力量来进行决策。随机森林将单个决策树的输出整合起来生成最后的输出结果。
对于一个测试数据,将它投入到随机森林中的不同决策树中,会得到不同的测试结果。
若问题是一个分类问题,则可以通过求众数来得出测试数据的类别;若问题是一个回归问题,则可以通过求平均值得出测试数据的值。
这种结合了多个单一模型的输出(也被称为弱学习)的过程被称为集成学习。
'''''' sklearn.tree.DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0,
max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)
1.criterion 标准有gini or entropy可以选择
2.splitter best or random 前者是在所有特征中找最好的切分点 后者是在部分特征中(数据量大的时候)
3.max_features None(所有),log2,sqrt,N 特征小于50的时候一般使用所有的
4.max_depth 数据少或者特征少的时候可以不管这个值,如果模型样本量多,特征也多的情况下,可以尝试限制下
5.min_samples_split 如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值
6.min_samples_leaf 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝,如果样本量不大,不需要管这个值,大些如10W可是尝试下5
7.min_weight_fraction_leaf 这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了
8.max_leaf_nodes 通过限制最大叶子节点数,可以防止过拟合,默认是”None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制具体的值可以通过交叉验证得到
9.class_weight 指定样本各类别的的权重,主要是为了防止训练集某些类别的样本过多导致训练的决策树过于偏向这些类别。这里可以自己指定各个样本的权重如果使用“balanced”,则算法会自己计算权重,样本量少的类别所对应的样本权重会高
10.min_impurity_split 这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值则该节点不再生成子节点。即为叶子节点
'''
参考:实战回归模型_兰钧的博客-CSDN博客
python做算法-决策树算法-Python实现_weixin_39640911的博客-CSDN博客
加州房价--决策树与随机森林相关推荐
- 机器学习系列(10)_决策树与随机森林回归
注:本篇文章接上一篇文章>>机器学习系列(9)_决策树详解01 文章目录 一.决策树优缺点 二.泰坦尼克号幸存者案例 三.随机森林介绍 1.随机森林的分类 2.重要参数 [1]n_esti ...
- 使用泰坦尼克号数据进行决策树、随机森林
使用泰坦尼克号数据进行决策树.随机森林 决策树分类器 随机森林 决策树分类器 sklearn.tree.DecisionTreeClassifier(criterion='gini',max_dept ...
- 独家 | 决策树VS随机森林——应该使用哪种算法?(附代码链接)
作者:Abhishek Sharma 翻译:陈超 校对:丁楠雅 本文长度为4600字,建议阅读20分钟 本文以银行贷款数据为案例,对是否批准顾客贷款申请的决策过程进行了算法构建,并对比了决策树与随机森 ...
- ML之回归预测:利用十类机器学习算法(线性回归、kNN、SVM、决策树、随机森林、极端随机树、SGD、提升树、LightGBM、XGBoost)对波士顿数据集回归预测(模型评估、推理并导到csv)
ML之回归预测:利用十类机器学习算法(线性回归.kNN.SVM.决策树.随机森林.极端随机树.SGD.提升树.LightGBM.XGBoost)对波士顿数据集[13+1,506]回归预测(模型评估.推 ...
- 【机器学习基础】(五):通俗易懂决策树与随机森林及代码实践
与SVM一样,决策树是通用的机器学习算法.随机森林,顾名思义,将决策树分类器集成到一起就形成了更强大的机器学习算法.它们都是很基础但很强大的机器学习工具,虽然我们现在有更先进的算法工具来训练模型,但决 ...
- 决策树和随机森林(上)
决策树和随机森林 信息熵 熵 联合熵 条件熵 互信息 决策树学习算法 信息增益 ID3.C4.5.CART Bagging与随机森林 概念部分 思考:两点分布的信息熵 import numpy as ...
- 2.1.决策树和随机森林
2.1.决策树和随机森林 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用 ...
- 机器学习中的不平衡分类方法(part5)--决策树与随机森林
学习笔记吗,仅供参考,有错必纠 文章目录 决策树与随机森林 基本流程 决策树定义及结构 决策树学习步骤 划分选择 信息增益 增益率 基尼基数 剪枝处理 随机森林 决策树与随机森林 决策树(decisi ...
- python实现决策树算法sklearn_python sklearn-05:决策树及随机森林
1.决策树 2.随机森林 1.决策树(decision tree) 决策树一种简单的非线性模型,用来解决回归与分类问题. 通常是重复的将训练集解释变量分割成子集的过程.决策树的节点用方块表示,用来测试 ...
- 如何解读决策树和随机森林的内部工作机制?
随机森林在过去几年里得到了蓬勃的发展.它是一种非线性的基于树的模型,往往可以得到准确的结果.但是,随机森林的工作过程大都处于黑箱状态,往往难以解读和完全理解.近日,Pivotal Engineerin ...
最新文章
- python中年大叔学编程_中年大叔学编程-Python简单操作文件
- PHPExcel处理导入导出图片,链接
- 1.2.1 算法的基本概念
- Why choose MySQL?
- Request登录案例
- android 音频播放总结 soundlPool,MediaPlay
- java 获取本机ip_linux获取本机IP
- 类的加载过程详解之过程三:Initialization(初始化)阶段
- 软考网络工程师备考经验
- 集体智慧编程(5)——优化
- eclipse ADT完整环境下载
- Vue前端页面开发之vue2.0脚手架搭建
- 什么是pid控制算法_控制算法原理及实现之PID(以飞控为例)
- GEO TCGA公共数据挖掘培训
- 如何理解图片RGB通道在python(numpy)中的数据构成
- matlab如何把cell转int_MATLAB数据类型及相互转换(一)
- 【懒懒的Python学习笔记七】
- C#精挑整理知识要点11 委托和事件(建议收藏)
- 6.easyui+ztree案例:zTree树
- 使用umiJs搭建前端项目添加背景图片