我是靠谱客的博主 甜蜜猎豹,最近开发中收集的这篇文章主要介绍GBRT(梯度提升回归树)python实现前言一、什么是梯度提升回归树是什么?二、使用步骤总结,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
GBRT(梯度提升回归树)python实现
文章目录
- GBRT(梯度提升回归树)python实现
- 前言
- 一、什么是梯度提升回归树是什么?
- 二、使用步骤
- 1.不多说直接上代码
- 2.建立模型
- 总结
前言
随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的梯度提升回归树(GBRT)所以我爬了一个二手房网站,获取了一些二手房房屋信息,然后通过机器学习进行分析。
一、什么是梯度提升回归树是什么?
梯度提升回归树是一种集成方法,通过合并多个决策树来构建一个更为强大的模型。这也就表明了提升树是迭代多颗回归树来共同决策的,后面的每一颗决策树都在不断地修正前面的决策树
二、使用步骤
1.不多说直接上代码
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold #k折交叉验证
from sklearn.model_selection import GridSearchCV #网格搜索
from sklearn.metrics import make_scorer
import os
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
#这个地方数据来源 我去掉了
df = data[['地址','价格','所属地区','房屋朝向','所在楼层','装修情况','套内面积','是否配备电梯','交易权属','多少人关注','房子总面积','建筑年代','楼型']]
中间这部分数据处理就省略了。。。
主要是,这个需要把数据类型转化为float类型,数值化0,1变量,用one-hot编码就OK
df.drop(['所在楼层','房屋朝向','装修情况','所属地区','楼型','是否配备电梯','交易权属','地址'],axis=1,inplace=True)
y = df['价格'].values.tolist()
x = df.drop(['价格'],axis=1)
x = x.values.tolist()
corrDf = df.corr() #这里多写了一点,是相关系数,运行起来较慢可以删除
print(corrDf['价格'].sort_values(ascending =False))
train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=0.15,random_state=0)
2.建立模型
def performance_metric(y_true, y_predict):
from sklearn.metrics import r2_score
score = r2_score(y_true,y_predict)
return score
def fit_model(x, y):
cross_validator = KFold(n_splits=3,shuffle=True, random_state=500) #交叉验证
from sklearn.ensemble import GradientBoostingRegressor
regressor = GradientBoostingRegressor(loss='ls',random_state=500,max_features=None,min_samples_leaf=10, min_impurity_split=10,learning_rate=0.2)
params = {'max_depth':range(1,30)} #决策树最大深度
scoring_fnc = make_scorer(performance_metric) # 评分函数
grid = GridSearchCV(regressor,params,cv=cross_validator,scoring=scoring_fnc)
# 基于输入数据 [x,y],进行网格搜索
grid = grid.fit(x, y)
# 返回网格搜索后的最优模型
return grid.best_estimator_
模型建立这个地方,我用了一个网格搜索,用来确定决策树的深度到达多少时候,返回模型精确度最高的那个。运行时间也会变长
model = fit_model(train_x,train_y)
def model_imge(model):
#joblib.dump(model,'./keep_model/model.pkl')
pre_y = model.predict(test_x)
#计算决策系数r方
r2 = performance_metric(test_y,pre_y)
print(r2)
plt.figure(figsize=(10,9),dpi=100)
plt.plot(test_y,label='实际值')
plt.plot(pre_y,label='预测值')
plt.legend()
plt.title('GBRT模型实际值与预测值对比')
plt.show()
model_imge(model)
这个地方就是画图,观察真实值和预测值的对比情况,r2也就是模型的精确度了,我这个模型写的不好只有0.8几。
总结
梯度提升回归树模型总的来说是非常不错的,优势劣势也是比较明显的,许多建模比赛等等都用到了这个,他的优势主要是比较精确,毕竟在提升过程中是在不断修正前面的决策树的,劣势就是调太麻烦了,建议使用网格搜索,但是时间花费太长,个人觉得最好是用GPU来跑,啊哈哈,这也是我的第一篇博客了。。。
最后
以上就是甜蜜猎豹为你收集整理的GBRT(梯度提升回归树)python实现前言一、什么是梯度提升回归树是什么?二、使用步骤总结的全部内容,希望文章能够帮你解决GBRT(梯度提升回归树)python实现前言一、什么是梯度提升回归树是什么?二、使用步骤总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复