数据+代码】LightGBM+Optuna实现回归分析

【数据+代码】LightGBM+Optuna实现回归分析

01引言

本文涵盖主题:数据预处理、数据探索性分析、LightGBM+OPTUNA模型训练和结果分析四个方面。

本文数据集采用奥迪汽车数据,使用多种算法与LightGBM+OPTUNA回归模型进行对比。
该项目的结构如下:

  • 数据清理

  • 探索性数据分析

  • ML 建模的数据准备

  • 机器学习建模:

    • 线性回归模型
    • LightGBM 与 OPTUNA
  • 结果分析

本文主要结果汇总仪表板:

图片

本期内容『数据+代码』已上传百度网盘。有需要的朋友可以关注公众号【小Z的科研日常】,后台回复关键词[LightGBM]获取

02

╱数据预处理╱

首先将数据进行读取,同时在模型部署过程中,注意到模型列中的值前面有一个空白的空间。出于此原因,决定在读取数据过程中添加 “skipinitialspace=True”。并将重新排序,先将分类变量分组,再将数字变量分组。

df=pd.read_csv('audi.csv',skipinitialspace=True)
print(df.head())

缺失值

其次观察数据集中各列特征中是否存在缺失值,并将year转换为object类型。经输出数据分析,本数据集中并无缺失值。我们需要了解,除了"里程数"之外,其他特征是否能独特地识别一辆车。

df=df[['model','year','transmission','fuelType','mileage','tax','mpg','engineSize','price']]
print(df.head(10))
print(df.info())
df['year'] = df['year'].astype(object)
df_clean = df.copy()
df_models=df.drop(['price','mileage','tax'], axis=1).drop_duplicates().sort_values(by=['model','year','fuelType'])
print(df_models.head())

经观察,mpg和发动机尺寸不是由汽车型号、年份、变速器和燃料类型唯一识别的。

为了分析数据中的数值特征,我们将首先定义一个函数,绘制所有数字特征的分布直方图和箱线图。

def num_plots_all(df):
    fig, ax = plt.subplots(2,5, figsize=(15,5), gridspec_kw={"height_ratios": (.2, .8)})
    sns.boxplot(x='mileage', data=df, ax=ax[0,0])
    ax[0,0].set_title('Mileage distribution')
    ax[0,0].set(yticks=[], xticks=[])
    ax[0,0].axis('off')
    sns.boxplot(x='tax', data=df, ax=ax[0,1])
    ax[0,1].set_title('Tax distribution')
    ax[0,1].set(yticks=[], xticks=[])
    ax[0,1].axis('off')
    sns.boxplot(x='mpg', data=df, ax=ax[0,2])
    ax[0,2].set_title('MPG distribution')
    ax[0,2].set(yticks=[], xticks=[])
    ax[0,2].axis('off')
    sns.boxplot(x='engineSize', data=df, ax=ax[0,3])
    ax[0,3].set_title('EngineSize distribution')
    ax[0,3].set(yticks=[], xticks=[])
    ax[0,3].axis('off')
    sns.boxplot(x='price', data=df, ax=ax[0,4])
    ax[0,4].set_title('Price distribution')
    ax[0,4].set(yticks=[], xticks=[])
    ax[0,4].axis('off')
    sns.histplot(x='mileage', data=df, ax=ax[1,0])
    sns.histplot(x='tax', data=df, ax=ax[1,1])
    sns.histplot(x='mpg', data=df, ax=ax[1,2])
    sns.histplot(x='engineSize', data=df, ax=ax[1,3])
    sns.histplot(x='price', data=df, ax=ax[1,4])
    plt.show()
num_plots_all(df)    

图片

从这些图中我们可以看到,数值特征呈现出所谓的 "长尾 "分布,有一些异常值。

通过查看直方图、箱线图和汇总统计,我们可以对数字特征有一个初步的了解:

  • 里程数:平均数约为2.5万,由于存在一个32.3万英里的异常值(这个数字太高了),我们将删除这个离群值,以获得一个更准确的数据表示。

  • 税收:平均数约为126,与里程数类似,这是由于该特征存在一些非常高的数值。我们需要对这些数值进行处理,以获得一个

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值