实践——机器学习——基于线性回归模型的应用案例

实验任务:

本次任务是基于measurements.xlsx数据集,利用回归模型预测汽车的耗油量,数据集共有388个样本,11个特征,1个标签 (consume,消耗量(L / 100km)),特征与标签的表示如下:

列名

说明

distance

行车距离(km

consume

消耗量(L / 100km

speed

平均速度(km / h

temp_inside

车内温度(°C

temp_outside

车外温度(°C

specials

是否发生了什么特别的事

gas_type

使用的汽油类型

AC

是否开空调

rain

是否下雨

sun

是否阳光明媚

refill_liters

补充的公升

refill_gas

补充的汽油类型

具体要求:

  1. 导入数据:将数据集读取为Pandas的DataFrame格式。
  2. 数据探索性分析:可包括但不限于:查看数据的信息、数据维度、特征取值、特征的分布情况,特征之间的相关性等。
  3. 数据预处理:
  •  查看是否有缺失值,若有,请填充缺失值;
  •  去除“specials”,“refill_liters”,“refill_gas”特征属性;
  • 对特征“gas_type” (采用pandas的get_dummies) 进行one-hot编码;
  • 分离标签y和特征X。
  1. 划分数据集:将数据集划分为训练集和测试集,其中,训练集为 X_train(75%),训练集标签为 y_train,测试集为 X_test,测试集标签 y_test (可自定义名称)。
  2. 数据建模:
  • 分别使用LinearRegression、Ridge和Lasso等构建模型(Ridge和Lasso中可选择不同的参数alpha比较效果);
  • 输出回归系数,得到预测结果。
  1. 模型效果评估:输出MSE 、决定系数R2等,比较不同模型的效果。

实践代码

导入数据
data = pd.read_excel('./measurements.xlsx')
data = pd.DataFrame(data)
数据探索性分析
#  剔除无用信息specials, refill_liters, refill_gas. 
data = data.drop(['specials','refill_liters','refill_gas'], axis=1)

# 查看关键信息是否拥有缺失值
print(data.isnull().sum())

#  处理缺失值temp_inside——均值填充
mean = math.ceil(data.iloc[:, 3].mean())  # 均值向上取整
data = data.fillna(mean)

#  gas_trpe进行one-hot编码, 替换结果gas_0为E10, gas_1为E85
# print(data['gas_type'])
df = pd.get_dummies(data, columns=['gas_type'], prefix='gas_type')
df = df.replace(True, 1)
df = df.replace(False, 0)

#  再检查是否有缺失值
print()
print(df.isnull().sum())
划分数据集
#  分析题目, 划分自变量x1~x9, 因变量y
y = df.iloc[:, 1]
x = df.drop(['consume'], axis=1)

#  划分测试集、训练集
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=33, test_size=0.25)
数据建模LinearRegression
#  初始化学习器实例
lr = LinearRegression()
#  使用训练集训练模型参数
lr.fit(x_train, y_train)
#  使用测试集预测得到预测结果
yl_predict = lr.predict(x_test)
#  模型评估
l_mse = mse(y_test, yl_predict)
l_r2 = r2(y_test, yl_predict)
#  结果展示
print(f"LinearRegression 预测结果:\n{yl_predict}")
print(f"\nLinearRegression 回归系数:\n{lr.coef_}")
数据建模Ridge
#  枚举得到Ridge模型最优alpha值
ap = np.arange(0.01, 100, 0.1)
best_rr_mse = 10000
best_rr_r2 = -1
best_alpha_rr = 0
for alpha in ap:
    rr = Ridge(alpha=alpha)
    rr.fit(x_train, y_train)
    yr_predict = rr.predict(x_test)
    rr_mse = mse(y_test, yr_predict)
    rr_r2 = r2(y_test, yr_predict)
    if rr_mse < best_rr_mse and rr_r2 > best_rr_r2:
        best_rr_r2 = rr_r2
        best_rr_mse = rr_mse
        best_alpha_rr = alpha

#  得到最优Ridge模型
rr = Ridge(alpha=best_alpha_rr)
rr.fit(x_train, y_train)
yr_predict = rr.predict(x_test)

#  结果展示
print(f"Ridge 预测结果:\n{yr_predict}")
print(f"\nRidge 回归系数:\n{rr.coef_}")
数据建模Lasso
ap = np.arange(0.01, 100, 0.1)
best_lsr_mse = 10000
best_lsr_r2 = -1
best_alpha_lsr = 0
for alpha in ap:
    lsr = Lasso(alpha=alpha)
    lsr.fit(x_train, y_train)
    lsr_predict = lsr.predict(x_test)
    lsr_mse = mse(y_test, yr_predict)
    lsr_r2 = r2(y_test, yr_predict)
    if lsr_mse < best_lsr_mse and lsr_r2 > best_lsr_r2:
        best_lsr_r2 = lsr_r2
        best_lsr_mse = lsr_mse
        best_alpha_lsr = alpha

#  得到最优 Lasso 模型
lsr = Lasso(alpha=best_alpha_lsr)
lsr.fit(x_train, y_train)
lsr_predict = lsr.predict(x_test)

#  结果展示
print(f"Lasso 预测结果:\n{lsr_predict}")
print(f"\nLasso 回归系数:\n{lsr.coef_}")
print(f"模型\t\t\tMSE\t\t\tR^2\nLinearRegression\t{l_mse}\t{l_r2}\nRidge\t\t\t{rr_mse}\t{rr_r2}\nLasso\t\t\t{lsr_mse}\t{lsr_r2}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小何爱编程2024

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值