Skip to content

低碳生活行为影响因素预测线性回归模型开发与测试

1.导入库

python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import joblib
from xgboost import XGBRegressor
  • pandas :数据处理库,⽤于数据读取和操作
  • train_test_split :数据集划分⼯具,⽤于拆分训练集和测试集
  • LinearRegression :线性回归模型
  • mean_squared_errorr2_score :回归模型评估指标
  • joblib : Python 对象序列化模块(替代 pickle ,更适合⼤数据)
  • XGBRegressor : XGBoost 回归模型

2.数据加载与预览

python
data = pd.read_excel('大学生低碳生活行为的影响因素数据集.xlsx')
print(data.head())
  • pd.read_excel() :读取 Excel ⽂件
    • 参数:⽂件路径
  • head() :显⽰前 5 ⾏数据
  • 功能:初步检查数据结构和内容

3. 数据清洗与特征工程

python
data_cleaned = data.drop(columns=['序号', '所用时间'])
data_cleaned = pd.get_dummies(data_cleaned, drop_first=True)
  • drop() :删除指定列

    • 移除⽆关的序号和所⽤时间列
  • get_dummies() :将分类变量转换为哑变量

    • drop_first=True :避免哑变量陷阱(减少⼀列)

4.定义特征和⽬标

python
target = '5.您进行过绿色低碳的相关生活方式吗?'
X = data_cleaned.drop(columns=[target])
y = data_cleaned[target]
  • 指定⽬标变量(低碳⾏为)
  • 创建特征矩阵 X (删除⽬标列)
  • 创建⽬标向量 y

5.数据集划分

python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • train_test_split() :划分数据集
    • test_size=0.2 :测试集占 20%
    • random_state=42 :固定随机种⼦

6.线性回归模型

python
model = LinearRegression()
model.fit(X_train, y_train)
  • LinearRegression() :创建普通最小二乘线性回归模型

  • fit() :训练模型

7.模型保存

python
model_filename = '2.2.4_model.pkl'
joblib.dump(model, model_filename)
  • joblib.dump() :序列化保存模型
    • 比pickle 更⾼效,特别适合包含⼤数组的模型

8.预测与评估(线性回归)

python
y_pred = model.predict(X_test)
results = pd.DataFrame({'实际值': y_test, '预测值': y_pred})
results_filename = '2.2.4_results.txt'
results.to_csv(results_filename, index=False, sep='\t')

with open('2.2.4_report.txt', 'w') as f:
  f.write(f'均方误差: {mean_squared_error(y_test, y_pred)}\n')
  f.write(f'决定系数: {r2_score(y_test, y_pred)}\n')
  • predict() :⽣成预测结果

  • mean_squared_error() :计算 MSE (越⼩越好)

  • r2_score() :计算 R² (越接近 1 越好)

  • 保存预测结果和评估指标

9.XGBoost 模型(对⽐改进)

python
xgb_model = XGBRegressor(
  n_estimators=1000,
  learning_rate=0.05,
  max_depth=5,
  subsample=0.8,
  colsample_bytree=0.8
)
xgb_model.fit(X_train, y_train)
  • XGBRegressor() :创建 XGBoost 回归模型
    • n_estimators=1000 : 1000 棵决策树
    • learning_rate=0.05 :收缩步⻓
    • max_depth=5 :树的最⼤深度 s
    • ubsample=0.8 :样本采样⽐例
    • colsample_bytree=0.8 :特征采样⽐例

10. XGBoost 预测与评估

python
y_pred_xg = xgb_model.predict(X_test)
results_xg_filename = '2.2.4_results_xg.txt'
results_xg = pd.DataFrame({'实际值': y_test, '预测值': y_pred_xg})
results_xg.to_csv(results_xg_filename, index=False, sep='\t')

with open('2.2.4_report_xgb.txt', 'w') as f:
  f.write(f'均方误差: {mean_squared_error(y_test, y_pred_xg)}\n')
  f.write(f'决定系数: {r2_score(y_test, y_pred_xg)}\n')
  • 相同评估流程,与线性回归结果对⽐

11.错误分析

  • 特征选择问题:可能选择了不相关或弱相关的特征作为输入,导致模型无法从这些特征中学习到有效的模式来解释目标变量的变化。

  • 异常值影响:数据集中可能存在异常值或离群点,这些点可能会扭曲模型参数估计,进而影响预测准确性。

  • 样本量不足或代表性不够:如果训练数据集的规模较小或者不能很好地代表总体分布,模型可能难以学习到普遍适用的规律。

模型太过于简单,没有学到数据特定的模式。

12.改进建议

  • 特征工程:重新审视并优化特征选择,确保所选特征对于预测低碳生活行为具有较强的关联性。

  • 处理异常值: 对数据进行更深入的探索,识别并处理任何异常值或离群点,以提高模型的鲁棒性和泛化能力。

  • 超参数调优: 对于所选模型,利用网格搜索或随机搜索等方式寻找最佳超参数配置,优化模型性能。

  • 检查数据分布: 确认数据集是否代表了真实的分布,特别是目标变量是否有足够的代表性。

选择其他模型进行多次训练测试。