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

国际学校网站建设深圳哪家做网站

国际学校网站建设,深圳哪家做网站,wordpress加文字水印,现代风格装修效果图梯度提升回归树: 梯度提升回归树是区别于随机森林的另一种集成方法#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.w-s-a.com/news/643852/

相关文章:

  • 投票网站怎么制作电商网站模板html
  • 攀枝花移动网站建设抖音广告投放平台
  • 什么是网站设计第一装修网
  • 公司网站建设一条织梦门户网站源码
  • 网站改版中su域名注册
  • 做网站有没有前途济南产品网站建设外包
  • 网站备案咨询做静态网站多少钱
  • 软件开发和网站建设一样吗太原今天最新通知
  • 网站推广如何做的表白制作网站
  • 网站风格分析免费织梦网站源码
  • 大连手机自适应网站建设织梦做音乐网站
  • 烟台网站建设优化网页设计师证
  • 手机微网站建设多少钱个人网站 wordpress
  • 做外贸是不是必须有网站wordpress网络图片
  • 赣县企业网站建设用dw做网站的基本步骤
  • 辽源网站建设微信小程序公众平台
  • 多媒体网站设计开发是指什么常宁网站建设
  • 淄博网站推广优化17岁在线观看免费高清完整版
  • 企业形象网站开发业务范畴wordpress最好最全的教程
  • 企业网站的建立意义网站首页制作网站
  • 网站制作过程内容深圳最好的活动策划公司
  • 深圳网站关键词排名查询公司网站怎么做啊
  • 微网站 制作平台广州电商聚集地
  • 建设外国商城网站网站服务器 虚拟主机
  • 天河网站建设开发电子商务公司名字大全
  • 站长推荐为何用wdcp建立网站连不上ftp
  • 云南旅行社网站开发学编程多久可以写游戏辅助
  • 推广网站的步骤网站备案号中信息有变
  • 优秀企业建站织梦能不能做门户网站
  • 广东省建设局官方网站wordpress 自动安装 插件怎么用