当前位置: 首页 > news >正文

建设银行江西分行官方网站辣条网站建设书

建设银行江西分行官方网站,辣条网站建设书,北京微信网站开发,下载app下载梯度提升回归树: 梯度提升回归树是区别于随机森林的另一种集成方法#xff0c;它的特点在于纠正与加强#xff0c;通过合并多个决策树来构建一个更为强大的模型。该模型即可以用于分类问题#xff0c;也可以用于回归问题中。在该模型中#xff0c;有三个重要参数分别为 n_…梯度提升回归树: 梯度提升回归树是区别于随机森林的另一种集成方法它的特点在于纠正与加强通过合并多个决策树来构建一个更为强大的模型。该模型即可以用于分类问题也可以用于回归问题中。在该模型中有三个重要参数分别为 n_estimators(子树数量)、learning_rate(学习率)、max_depth(最大深度)。 n_estimators  子树数量:  通常用来设置纠正错误的子树数量梯度提升树通常使用深度很小(1到 5之间)的子树即强预剪枝来进行构造强化树。并且这样占用的内存也更少预测速度也更快。learning_rate  学习率:  通常用来控制每颗树纠正前一棵树的强度。较高的学习率意味着每颗树都可以做出较强的修正这样的模型普遍更复杂。max_depth  最大深度:  通常用于降低每颗树的复杂度从而避免深度过大造成过拟合的现象。梯度提升模型的 max_depth 通常都设置得很小一般来讲不超过5。 梯度提升决策树是监督学习中 最强大也是最常用 的模型之一。 该算法无需对数据进行缩放就可以表现得很好而且也适用于二元特征与连续特征同时存在的数据集。 缺点是需要进行仔细调参且训练时间可能较长通常不适用于高维稀疏数据。 单一KNN算法:         # knn近邻算法: K-近邻算法KNN) from sklearn.neighbors import KNeighborsClassifier knn KNeighborsClassifier() knn.fit(X_train,y_train)KNN集成算法:  from sklearn.neighbors import KNeighborsClassifier from sklearn.ensemble import BaggingClassifier # 100个算法集成算法准确提升到了73.3% knn KNeighborsClassifier() # bag中100个knn算法 bag_knn BaggingClassifier(base_estimatorknn, n_estimators100, max_samples0.8,max_features0.7) bag_knn.fit(X_train,y_train) print(KNN集成算法得分是, bag_knn.score(X_test,y_test)) 逻辑斯蒂回归集成算法: from sklearn.linear_model import LogisticRegression from sklearn.ensemble import BaggingClassifier bag BaggingClassifier(base_estimatorLogisticRegression(),n_estimators500,max_samples0.8, max_features0.5) bag.fit(X_train,y_train) 决策树集成算法: from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import BaggingClassifier bag BaggingClassifier(base_estimatorDecisionTreeClassifier(),n_estimators100,max_samples1.0,max_features0.5) bag.fit(X_train,y_train) 梯度提升回归算法: from sklearn.ensemble import GradientBoostingRegressor gbdt GradientBoostingRegressor(n_estimators3,loss ls, # 最小二乘法learning_rate0.1) gbdt.fit(X,y) # 训练 1、集成算法 1.1、不同集成算法 集成算法流程概述 同质学习器也叫算法model模型 随机森林同质学习器内部的100个模型都是决策树 bagging套袋法 随机森林 极端森林 boosting提升法 GBDT AdaBoost 1.2、bagging 1.3、自建集成算法同质 1、导包数据创建 import numpy as np from sklearn.neighbors import KNeighborsClassifier from sklearn.ensemble import BaggingClassifier from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.tree import DecisionTreeClassifier X,y datasets.load_wine(return_X_y True) X_train,X_test,y_train,y_test train_test_split(X,y,random_state 1024) 2、KNN集成算法 算法原理 # 一个算法准确率 62% knn KNeighborsClassifier() knn.fit(X_train,y_train) print(单一KNN算法得分是,knn.score(X_test,y_test)) # 0.6222222222222222# 100个算法集成算法准确提升到了73.3% knn KNeighborsClassifier() # bag中100个knn算法 bag_knn BaggingClassifier(base_estimatorknn,n_estimators100,max_samples0.8,max_features0.7) bag_knn.fit(X_train,y_train) print(KNN集成算法得分是,bag_knn.score(X_test,y_test)) # 0.7555555555555555 3、逻辑斯蒂回归集成算法 import warnings warnings.filterwarnings(ignore) lr LogisticRegression() lr.fit(X_train,y_train) print(单一逻辑斯蒂算法得分是,lr.score(X_test,y_test)) # 0.9333333333333333# 偶尔效果会好 bag BaggingClassifier(base_estimatorLogisticRegression(),n_estimators500,max_samples0.8, max_features0.5) bag.fit(X_train,y_train) print(逻辑斯蒂集成算法得分是, bag.score(X_test,y_test)) # 0.9333333333333333 4、决策树自建集成算法 clf DecisionTreeClassifier() clf.fit(X_train,y_train) print(单棵决策树得分是,clf.score(X_test,y_test)) # 0.9555555555555556 bag BaggingClassifier(base_estimatorDecisionTreeClassifier(),n_estimators100,max_samples1.0,max_features0.5) bag.fit(X_train,y_train) print(决策树集成算法得分是,bag.score(X_test,y_test)) # 0.9777777777777777 1.4、boosting 2、GBDT 2.1、梯度提升树概述 gradient Boosting DecisionTree  一一 GBDT Boosting :提升的一点点靠近最优答案 残差 残差的意思就是 A的预测值 A的残差 A的实际值 残差 实际值 - 预测值 预测值 实际值 - 残差 2.2、梯度提升树应用 1、使用全量数据构建梯度提升树0.1434 from sklearn.ensemble import GradientBoostingRegressor import numpy as np import pandas as pd # 加载数据 data_train pd.read_csv(zhengqi_train.txt, sep\t) data_test pd.read_csv(zhengqi_test.txt, sep\t) X_train data_train.iloc[:,:-1] y_train data_train[target] X_test data_test# GBDT模型训练预测 gbdt GradientBoostingRegressor() gbdt.fit(X_train,y_train) y_pred gbdt.predict(X_test) np.savetxt(GBDT_full_feature_result.txt, y_pred) 2、使用部分数据构建梯度提升树0.1486 from sklearn.linear_model import ElasticNet from sklearn.ensemble import GradientBoostingRegressor import numpy as np import pandas as pd # 加载数据 data_train pd.read_csv(zhengqi_train.txt, sep\t) data_test pd.read_csv(zhengqi_test.txt, sep\t) X_train data_train.iloc[:,:-1] y_train data_train[target] X_test data_test# 先使用ElaticNet模型进行数据筛选 model ElasticNet(alpha 0.1, l1_ratio0.05) model.fit(X_train, y_train) cond model.coef_ ! 0 X_train X_train.iloc[:,cond] X_test X_test.iloc[:,cond] print(删除数据后形状是,X_train.shape)# GBDT模型训练预测 gbdt GradientBoostingRegressor() gbdt.fit(X_train,y_train) y_pred gbdt.predict(X_test) np.savetxt(GBDT_drop_feature_result.txt, y_pred) 2.3、梯度提升树原理 1、创建数据并使用梯度提升回归树进行预测 import numpy as np from sklearn.ensemble import GradientBoostingRegressor import matplotlib.pyplot as plt from sklearn import tree import graphviz### 实际问题年龄预测回归问题 # 简单的数据算法原理无论简单数据还是复杂数据都一样 # 属性一表示花销属性二表示上网时间 X np.array([[600,0.8],[800,1.2],[1500,10],[2500,3]]) y np.array([14,16,24,26]) # 高一、高三大四工作两年 # loss ls 最小二乘法 learning_rate 0.1 gbdt GradientBoostingRegressor(n_estimators3,loss ls,# 最小二乘法learning_rate0.1)#learning_rate 学习率 gbdt.fit(X,y)#训练 y_ gbdt.predict(X) # 预测 2、计算残差 # 目标值真实值算法希望预测越接近真实模型越好 print(y) # 求平均这个平均值就是算法第一次预测的基准初始值 print(y.mean()) # 残差真实值和预测值之间的差 residual y - y.mean() residual # 残差越小越好 # 如果残差是0算法完全准确的把数值预测出来 3、绘制三棵树 第一棵树 # 第一颗树分叉时friedman-mse (就是均方误差) 26 print(均方误差,((y - y.mean())**2).mean()) dot_data tree.export_graphviz(gbdt[0,0],filledTrue) graph graphviz.Source(dot_data) # 梯度下降降低残差 residual residual - learning_rate*residual residual # 输出array([-5.4, -3.6, 3.6, 5.4]) 第二棵树 # 第二颗树 dot_data tree.export_graphviz(gbdt[1,0],filledTrue) graph graphviz.Source(dot_data) # 梯度下降降低残差 residual residual - learning_rate*residual residual # 输出array([-4.86, -3.24, 3.24, 4.86]) 第三棵树 # 第三颗树 dot_data tree.export_graphviz(gbdt[2,0],filledTrue) graph graphviz.Source(dot_data) # 梯度下降降低残差 residual residual - learning_rate*residual residual # 输出array([-4.374, -2.916, 2.916, 4.374]) 4、使用残差计算最终结果 # 使用残差一步步计算的结果 y_ y - residual print(使用残差一步步计算最终结果是\n,y_) # 使用算法预测 gbdt.predict(X) # 两者输出结果一样 2.4、梯度提升回归树的最佳裂分条件计算 1、第一棵树分裂情况如下 # 计算未分裂均方误差 lower_mse ((y - y.mean())**2).mean() print(未分裂均方误差是,lower_mse) best_split {} for index in range(2):for i in range(3):t X[:,index].copy()t.sort()split t[i:i 2].mean()cond X[:,index] splitmse1 round(((y[cond] - y[cond].mean())**2).mean(),3)mse2 round(((y[~cond] - y[~cond].mean())**2).mean(),3)p1 cond.sum()/cond.sizemse round(mse1 * p1 mse2 * (1- p1),3)print(第%d列 % (index),裂分条件是,split,均方误差是,mse1,mse2,mse)if mse lower_mse:best_split.clear()lower_mse msebest_split[第%d列%(index)] splitelif mse lower_mse:best_split[第%d列%(index)] split print(最佳分裂条件是,best_split) # 输出未分裂均方误差是 26.0 第0列 裂分条件是 700.0 均方误差是 0.0 18.667 14.0 第0列 裂分条件是 1150.0 均方误差是 1.0 1.0 1.0 第0列 裂分条件是 2000.0 均方误差是 18.667 0.0 14.0 第1列 裂分条件是 1.0 均方误差是 0.0 18.667 14.0 第1列 裂分条件是 2.1 均方误差是 1.0 1.0 1.0 第1列 裂分条件是 6.5 均方误差是 27.556 0.0 20.667 最佳分裂条件是 {第0列: 1150.0, 第1列: 2.1}2、第二棵树分裂情况如下 # 梯度下降降低残差 residual residual - learning_rate*residual # 计算未分裂均方误差 lower_mse round(((residual - residual.mean())**2).mean(),3) print(未分裂均方误差是,lower_mse) best_split {} for index in range(2):for i in range(3):t X[:,index].copy()t.sort()split t[i:i 2].mean()cond X[:,index] splitmse1 round(((residual[cond] - residual[cond].mean())**2).mean(),3)mse2 round(((residual[~cond] - residual[~cond].mean())**2).mean(),3)p1 cond.sum()/cond.sizemse round(mse1 * p1 mse2 * (1- p1),3)print(第%d列 % (index),裂分条件是,split,均方误差是,mse1,mse2,mse)if mse lower_mse:best_split.clear()lower_mse msebest_split[第%d列%(index)] splitelif mse lower_mse:best_split[第%d列%(index)] split print(最佳分裂条件是,best_split) # 输出未分裂均方误差是 21.06 第0列 裂分条件是 700.0 均方误差是 0.0 15.12 11.34 第0列 裂分条件是 1150.0 均方误差是 0.81 0.81 0.81 第0列 裂分条件是 2000.0 均方误差是 15.12 0.0 11.34 第1列 裂分条件是 1.0 均方误差是 0.0 15.12 11.34 第1列 裂分条件是 2.1 均方误差是 0.81 0.81 0.81 第1列 裂分条件是 6.5 均方误差是 22.32 0.0 16.74 最佳分裂条件是 {第0列: 1150.0, 第1列: 2.1}3、第三棵树分裂情况如下 # 梯度下降降低残差 residual residual - learning_rate*residual # 计算未分裂均方误差 lower_mse round(((residual - residual.mean())**2).mean(),3) print(未分裂均方误差是,lower_mse) best_split {} for index in range(2):for i in range(3):t X[:,index].copy()t.sort()split t[i:i 2].mean()cond X[:,index] splitmse1 round(((residual[cond] - residual[cond].mean())**2).mean(),3)mse2 round(((residual[~cond] - residual[~cond].mean())**2).mean(),3)p1 cond.sum()/cond.sizemse round(mse1 * p1 mse2 * (1- p1),3)print(第%d列 % (index),裂分条件是,split,均方误差是,mse1,mse2,mse)if mse lower_mse:best_split.clear()lower_mse msebest_split[第%d列%(index)] splitelif mse lower_mse:best_split[第%d列%(index)] split print(最佳分裂条件是,best_split) # 输出未分裂均方误差是 17.059 第0列 裂分条件是 700.0 均方误差是 0.0 12.247 9.185 第0列 裂分条件是 1150.0 均方误差是 0.656 0.656 0.656 第0列 裂分条件是 2000.0 均方误差是 12.247 0.0 9.185 第1列 裂分条件是 1.0 均方误差是 0.0 12.247 9.185 第1列 裂分条件是 2.1 均方误差是 0.656 0.656 0.656 第1列 裂分条件是 6.5 均方误差是 18.079 0.0 13.559 最佳分裂条件是 {第0列: 1150.0, 第1列: 2.1}
http://www.hkea.cn/news/14583871/

相关文章:

  • 网站开发内容包括哪些网站建设 壹起航
  • 中移建设 公司 网站献县做网站价格
  • 网站关键词快速排名技术关于网站建设的工作计划
  • 腾讯官方网站做书签网站风格对比信息表
  • 用阿里云服务器做自己购物网站海报模板免费网站
  • 汉中北京网站建设搜索引擎入口官网
  • 做区域分析的地图网站深圳北站设计方案
  • 杭州网站开发工程师美丽深圳微信公众号二维码
  • 网站设计深圳市徐州房产信息网
  • 不良网站举报中心官网个人网站自助建站
  • 网站建设的基本流程包括什么怎么做网站前段
  • 打电话说帮忙做网站深圳东门步行街地铁站
  • 网站怎么建设可以发图评论html网站开发相关书籍
  • 北京市住房与城乡建设部网站服务器创建wordpress
  • 房地产建设网站的意义深圳企业网络推广运营技巧
  • 热转印 东莞网站建设设计最简单的企业网站
  • 网站里弹窗怎么做开发h5网站开发
  • 设计网站首页多少钱怎么做自己的网站平台
  • 成都市住房与城乡建设厅网站外包公司 网站建设 深圳
  • 类似视频教程网站的wordpress主题wordpress的网站后台
  • 建设网站公司名称大全大美工设计网站官网
  • 自己做网站很难装修网站排名前十
  • 简单又快的科学小制作广州优化网站排名
  • 180天做180个网站网站的mysql数据库放到服务器上服务器需要安装mysql吗?
  • 网站建站开发今天的新闻联播内容
  • 建设企业网站个人网银wordpress有多大的数据量
  • 庆阳工程建设网站湖南做网站的公司
  • 吧网站做软件的软件下载医疗设计网站建设
  • 从百万到千万 网站怎么优化wordpress调用ja
  • 网站设计要求有哪些电子商务网站建设技巧