【sklearn】回归模型常规建模流程

模型训练pipeline

基于数十种统计类型特征,构建LR回归模型。代码逻辑包含:样本切分、特征预处理、模型训练、模型评估、特征重要性的可视化。

步骤一:导入所需库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.metrics import mean_squared_error, r2_score

步骤二:读取数据

data = pd.read_csv('data.csv')

步骤三:数据预处理

# 去除缺失值
data.dropna(inplace=True)

# 划分自变量和因变量
X = data.iloc[:, :-1]
y = data.iloc[:, -1]

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# 构建pipeline
pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('poly', PolynomialFeatures(degree=2, include_bias=False)),
    ('reg', LinearRegression())
])

# 训练模型
pipeline.fit(X_train, y_train)

# 预测结果
y_pred = pipeline.predict(X_test)

步骤四:模型评估

# 均方误差
mse = mean_squared_error(y_test, y_pred)

# R2值
r2 = r2_score(y_test, y_pred)

print('MSE: %.3f' % mse)
print('R2 score: %.3f' % r2)

步骤五:特征重要性的可视化

# 获取特征重要性
importance = pipeline.named_steps['reg'].coef_

# 将特征重要性与对应特征名对应
feature_names = pipeline.named_steps['poly'].get_feature_names(X.columns)
feature_importance = pd.DataFrame({'Feature': feature_names, 'Importance': importance})
feature_importance = feature_importance.sort_values('Importance', ascending=False)

# 绘制水平条形图
plt.figure(figsize=(10, 8))
plt.barh(feature_importance['Feature'], feature_importance['Importance'])
plt.title('Feature importance')
plt.xlabel('Importance')
plt.ylabel('Feature')
plt.show()
### RNN与线性回归模型的区别 #### 模型结构差异 RNN(循环神经网络)属于一种特殊的神经网络架构,专门用于处理序列数据。其特点在于具有记忆功能,即当前时刻的输出不仅取决于当前输入还依赖于之前时间步的信息[^2]。而线性回归模型则是最基础的一种统计学模型之一,旨在寻找特征变量\(X\)和目标变量\(Y\)间的最佳拟合直线,表达形式简单直接\[ Y=\beta_0+\sum_{i=1}^{n}\beta_i X_i \][^3]。 #### 数据类型适应性不同 由于内部机制的存在,使得RNN非常适合用来解决涉及时间序列预测、自然语言处理等问题;相反,对于那些不涉及到顺序信息的任务,则更适合采用线性回归这样的传统方法来建模分析[^4]。 #### 参数数量及训练难度比较 相较于简单的线性回归而言,即使是最基本版本的RNN也拥有更多的参数待优化,并且因为引入了复杂的梯度计算过程,在实际应用过程中可能会遇到诸如梯度消失/爆炸之类的挑战。因此,通常情况下,后者更容易收敛并获得较好的泛化性能。 --- ### RNN与线性回归模型的联系 尽管两者看似截然不同,但在某些特定场景下它们确实存在着一定的关联: - 当面对非常规的数据集时——比如仅有少量样本点或是几乎不存在任何模式规律可循的情况下,简化版的RNN可能退化成类似于加权求和的形式,这实际上就接近于广义上的线性组合方式; - 另外值得注意的是,无论是哪种类型的机器学习算法,最终目的都是为了找到最优解从而更好地完成给定任务。所以从这个角度出发,可以说所有的这些技术手段都遵循着相同的宗旨去探索未知世界。 ```python import torch.nn as nn class SimpleRNN(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(SimpleRNN, self).__init__() self.rnn = nn.RNN(input_size=input_size, hidden_size=hidden_size, batch_first=True) self.fc = nn.Linear(hidden_size, output_size) def forward(self, x): out, _ = self.rnn(x) out = self.fc(out[:, -1, :]) return out from sklearn.linear_model import LinearRegression model_lr = LinearRegression() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值