组队学习——多元线性回归

通过这个案例【棉花产量论文作业的数据.csv】了解如何解决回归分析中多元共线性的问题

db80fb59d8014e5297d85bca1a7e954e.png

1、导入数据

import pandas as pd
import numpy as np
from scipy import stats
# 设置文件路径  
file_path = '棉花产量论文作业的数据.csv'  
# 使用 pandas 的 read_csv 函数读取 CSV 文件,注意查看csv文件的编码,默认不填为utf-8编码
data = pd.read_csv(file_path,encoding='gbk')  
# 显示数据的前几行来验证读取是否成功  
print(data.head())

2、数据预处理,观察是否有缺失值

print(data.isnull().any())

3、数据预处理,查看数据是否异常

# X要素是种子费、化肥费、农药费、机械费、灌溉费
X = data.iloc[:, 2:]
# Y要素是单产
Y = data.iloc[:, 1]
print(X)
print(Y)

6b372aec54ba47b1b9f6116a05d5bf3a.png76e04abb64534b0cb5d9fdf60ce8ae86.png

发现有异常值,留给大家思考如何处理这个异常值

4、划分数据集并训练模型

# 将数据分为训练集和测试集  
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42) 

# 创建线性回归模型  
model = LinearRegression()  
  
# 训练模型  
model.fit(X_train, Y_train) 

 5、根据评价指标来查看模型效果

# 预测测试集的结果  
Y_pred = model.predict(X_test)  
  
# 评估模型  
mse = mean_squared_error(Y_test, Y_pred)  
r2 = r2_score(Y_test, Y_pred)  
  
print("Mean Squared Error:", mse)  
print("R2 Score:", r2)  
  
# 通过模型的系数和截距来查看每个X要素对Y的影响  
print("Coefficients:", model.coef_)  
print("Intercept:", model.intercept_)

 (注意,由于该题数据集数量过少导致评价指标差异有点过大,可以先忽略不计,拿例子去理解往后遇到的需要多元线性回归的题目)

针对如何以上评价指标的结果应如何改进?以下常见的有两种办法

6、计算共线性的第一种方法:相关系数矩阵

# 计算相关系数矩阵  
correlation_matrix = X.corr()  
print(correlation_matrix)

观察相关系数矩阵,如果两个变量之间的相关系数接近1或-1,则表明它们之间存在高度线性关系。

787942e53b514b1c84d7d5e3a9a6a8fa.png

结果表明:种子费和化肥费、机械费、灌溉费;化肥费和机械费、灌溉费;机械费和灌溉费;以上均有共线性

7、计算共线性的第二种方法:方差膨胀因子(Variance Inflation Factor, VIF)

from statsmodels.stats.outliers_influence import variance_inflation_factor  

# 分类数据使用独热编码 
# data['Gender'] = data['Gender'].map({'Male':0, 'Female':1}) 
# the independent variables set 
X1 = data[['种子费', '化肥费', '农药费', '机械费', '灌溉费']]
# 计算VIF  
vif_data = pd.DataFrame()  
vif_data["feature"] = X1.columns
vif_data["VIF"] = [variance_inflation_factor(X1.values, i) for i in range(X1.shape[1])]   
print(vif_data)

368d32bbe26e469084135bb22982718b.png

该题由于数据量过小,共线性太强,不适用于进行回归分析,该案例告诫同学谨慎选用线性回归分析。

留给大家思考用什么方法可以提升模型效果,可以用逐步回归模型哦

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

布灵布灵磊少

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

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

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

打赏作者

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

抵扣说明:

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

余额充值