GBRT(梯度提升回归树)python实现

GBRT(梯度提升回归树)python实现


前言

随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的梯度提升回归树(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来跑,啊哈哈,这也是我的第一篇博客了。。。

  • 14
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值