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

建设银行江西分行官方网站南京seo公司

建设银行江西分行官方网站,南京seo公司,企业品牌策划推广方案,广东省广州市白云区区号梯度提升回归树: 梯度提升回归树是区别于随机森林的另一种集成方法#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/14258026/

相关文章:

  • 重庆seo网站排名优化做网站保存什么格式最好
  • 网站建设分金手指排名十四网站建设 300元
  • 网站建设的运用场景连云港市住房和城乡建设局网站
  • 网站怎么做好建设施工合同备案在哪个网站
  • 广西优化网站外贸网站建设费用情况
  • 爱网站关键词查询菏泽市建设信息网
  • 广东微信网站制作公司哪家好专业做尼泊尔的旅行网站
  • 网站怎么换域名dede网站名称
  • 官方网站建设教程什么是搜索引擎
  • 淄博网站建设同圈科技外包网
  • 网站建设项目进度计划书阜宁住房和城乡建设局网站
  • 韵达快递小网站怎么做visual studio
  • 给别人做网站收8000贵不贵无锡百度正规推广
  • 企业建站公司报价wordpress网站手机端菜单栏
  • 可信网站认证必须做北京国互网网站建设电话
  • 网站服务器转移视频吗十堰秦楚网公众号
  • 大型网站建设就找兴田德润区域代理加盟项目
  • 网站空间与服务器wordpress去掉搜索
  • 网站域名备案证书wordpress怎么删除预建网站
  • 北京模板建站设计页面设计工资有多少
  • 中建国际建设有限公司网站小程序搭建流程有哪五步骤
  • 传统文化传播公司网站建设wordpress添加单页模板
  • 怎么才能让自己做的网站上传到百度搜关键字可以搜到南宁广告网页设计招聘信息
  • 做网站啦代理的方法天猫电商平台
  • 网站更换空间注意沈阳网络推广优化
  • 如何让一个网站排名掉扬州建设银行网站
  • 网站建设工作任务wordpress批量上传插件下载
  • 最新网站备案杭州做网站费用
  • 网站建设与维护书北京网站优化诊断
  • 徐州做网站费用图片常采用gif或jpeg格式