【项目实战】Python实现LightGBM回归模型(LGBMRegressor算法)项目实战

376 篇文章 275 订阅

说明:这是一个机器学习实战项目(附带数据+代码+文档+代码讲解),如需数据+代码+文档+代码讲解可以直接到文章最后获取。

1.项目背景

       房地产不仅是国民经济的支柱产业,更和民生问题密不可分,随着房产越炒越热,人们对于房价的关注度也持续变高,因此能够较为精准地对房价进行预测也变得越来越有意义。房价作为多指标影响因子,不仅受时间,区域的影响,房屋年龄、附近地理条件、人文、交通等等因素也同样会对房价产生不同程度的影响。本项目提出一种基于集成学习的房价预测模型:LightGBM回归模型,使用LGBMRegressor算法。

2.数据获取

本次建模数据来源于网络(本项目撰写人整理而成),数据项统计如下:

上述表格罗列了部分属性进行展示。

数据详情如下(部分展示):

3.数据预处理

真实数据中可能包含了大量的缺失值和噪音数据或人工录入错误导致有异常点存在,非常不利于算法模型的训练。数据清洗的结果是对各种脏数据进行对应方式的处理,得到标准的、干净的、连续的数据,提供给数据统计、数据挖掘等使用。数据预处理通常包含数据清洗、归约、聚合、转换、抽样等方式,数据预处理质量决定了后续数据分析挖掘及建模工作的精度和泛化价值。以下简要介绍数据预处理工作中主要的预处理方法:

3.1 用Pandas工具查看数据

使用Pandas工具的head()方法查看前五行数据: 

从上图可以看到,总共有81个字段:特征变量79个,其中Id只是一个索引,建模时我们要去掉它;另外,此数据集中有很多缺失数据。

关键代码:

3.2计算每个特征缺失值的百分比

使用Pandas工具的isna() mean()方法计算每个特征缺失数据的百分比:计算出数据缺失超过50%的特征变量:

从上图可以看到,总共有5个特征变量数据缺失超过80%,接下来本项目中将会删掉这些特征变量,不参与后面的建模。

关键代码:

3.3区分数值型特征和分类型特征

通过Pandas工具的select_dtypes()方法来选择区分数值型特征和分类型特征,分类型特征需要进行相应的处理,以满足机器建模的需要。

分类型特征如下: 

 数值型特征如下:

关键代码如下:

 3.4特征变量空值情况统计

 

 通过上图可以看到,一些字段存在空值:针对

'BsmtQual','BsmtCond','BsmtExposure','BsmtFinType1','BsmtFinType2','GarageType','GarageFinish','GarageQual','FireplaceQu','GarageCond' 这些字段用”None”值填充。

针对'MSZoning', 'Utilities', 'Exterior1st', 'Exterior2nd', 'MasVnrType', 'Electrical', 'KitchenQual','Functional', 'SaleType' 这些字段用本数据项最频繁的数值进行填充。

关键代码如下:

4.探索性数据分析

4.1 Utilities特征分布分析

用Pandas工具的value_counts().plot()方法进行统计绘图,输出结果如下:

 图形化展示如下:

 从上面两个图中可以看到,分类为AllPub的有1459条,分类为NoSeWa的有1条,数据偏差非常大。

4.2 Street特征分布分析

 

从上面两个图中可以看到,分类为Pave的有1454条,分类为Grvl的有6条,数据偏差非常大。

4.3 Condition2特征分布分析

 

从上面两个图中可以看到,分类为Norm的有1445条,为其它类型的非常少,数据偏差非常大。

4.4 RoofMatl特征分布分析

 

从上面两个图中可以看到,分类为CompShg的有1434条,为其它类型的非常少,数据偏差非常大。

4.5 Heating特征分布分析

 

从上面两个图中可以看到,分类为GasA的有1428条,为其它类型的非常少,数据偏差非常大。

4.6 房屋年龄的描述性统计分析

首先通过YrSold和YearBuilt构造出房屋的年龄,然后通过Pandas工具的describe()方法进行描述性统计分析:

从上图可以看到房屋年龄最小不到1年,最大136年,平均年龄在36年左右。

4.7构造 TotalBsmtBath TotalBath TotalSA特征

通过Pandas工具的head()方法进行查看如下:

 

4.8分类特征的处理

特征的处理分为两类:一种是有序的特征,针对这种特征直接进行数值的映射;另一种是编码类别特征,针对这种特征进行One Hot编码处理;处理结果如下:

5.特征工程

5.1 建立特征数据和标签数据

SalePrice为标签数据,除 SalePrice之外的为特征数据。关键代码如下:

 

5.2 数据集拆分

训练集拆分,分为训练集和验证集,70%训练集和30%验证集。关键代码如下:

 

6.构建lightgbm回归模型

主要使用LGBMRegressor算法,用于目标回归。

6.1模型参数

关键代码如下:

7.模型评估

7.1评估指标及结果

评估指标主要包括可解释方差值、平均绝对误差、均方误差、R方值等等。

 从上表可以看出,R方为89%  可解释方差值为89%,lightgbm回归模型比较优秀,效果非常好。

关键代码如下:

7.2 模型特征重要性

由于特征比较多,选取前20个特征进行绘图展示: 

 

从上图可以看到特征变量对此模型的重要性依次为:TotalSA、LotArea、1stFlrSF、GarageArea、TotalBsmtSF、GrLivArea、BsmtFinSF1、BsmtUnfSF、LotFrontage、OpenPorchSF、MasVnrArea、GarageYrBlt等等。

7.3 真实值与预测值对比图

 

 从上图可以看出真实值和预测值波动基本一致,模型拟合效果非常棒。

8.结论与展望

综上所述,本文采用了lightgbm回归模型,最终证明了我们提出的模型效果良好。可用于日常金融中房屋销售价格的预测。

# 本次机器学习项目实战所需的资料,项目资源如下:
 
# 项目说明:
 
# 获取方式一:
 
# 项目实战合集导航:
 
https://docs.qq.com/sheet/DTVd0Y2NNQUlWcmd6?tab=BB08J2
 
# 获取方式二:

链接:https://pan.baidu.com/s/1em73VZMHvXAazD70tr4xKw 
提取码:22n6
  • 17
    点赞
  • 187
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
LightGBM是一种基于梯度提升决策树(Gradient Boosting Decision Tree)的机器学习算法,通常用于回归和分类任务。而Spark是一个分布式计算框架,用于处理大规模数据集并进行并行计算。如果你想在Spark中使用LightGBM进行回归模型的训练和预测,可以按照以下步骤进行操作: 1. 首先,确保你已经安装了Spark和LightGBM库。 2. 导入所需的库和模块: ```python import lightgbm as lgb from pyspark.sql import SparkSession from pyspark.ml.feature import VectorAssembler from pyspark.ml import Pipeline ``` 3. 创建SparkSession对象: ```python spark = SparkSession.builder.appName("LightGBM Regression").getOrCreate() ``` 4. 加载训练数据集和测试数据集,并进行必要的预处理: ```python train_data = spark.read.format("csv").option("header", "true").load("path/to/train_data.csv") test_data = spark.read.format("csv").option("header", "true").load("path/to/test_data.csv") # 进行特征向量化 feature_cols = train_data.columns[:-1] # 假设最后一列是目标变量 assembler = VectorAssembler(inputCols=feature_cols, outputCol="features") train_data = assembler.transform(train_data).select("features", train_data.columns[-1]) test_data = assembler.transform(test_data).select("features", test_data.columns[-1]) ``` 5. 创建LightGBM回归模型对象,并设置相应的参数: ```python lgb_params = { "objective": "regression", "metric": "rmse", "num_leaves": 31, "learning_rate": 0.05, # 其他参数... } lgb_regressor = lgb.LGBMRegressor(**lgb_params) ``` 6. 将LightGBM模型包装成Spark ML的Estimator,并创建一个Pipeline: ```python estimator = lgb_regressor._to_java() pipeline = Pipeline(stages=[estimator]) ``` 7. 在训练数据上拟合模型: ```python model = pipeline.fit(train_data) ``` 8. 使用训练好的模型进行预测: ```python predictions = model.transform(test_data) ``` 这样,你就可以使用LightGBM回归模型在Spark中进行训练和预测了。需要注意的是,以上代码只是一个示例,具体的数据加载、特征工程等步骤可能需要根据你的实际情况进行调整。另外,还可以根据需要调整LightGBM的参数来获得更好的性能和预测效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖哥真不错

您的鼓励,将是我最大的坚持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值