关于回归的一些问题

在这篇文章中,我将介绍一些关于回归的问题,分别为回归的概念、回归的分类、不同回归的区别以及其应用等这四部分。

一、回归的概念

首先我们先认识回归,回归是一种预测建模任务,主要目的是根据已知的数据预测连续值的输出。简而言之,回归分析用于理解和建立输入变量(自变量)与输出变量(因变量)之间的关系。

二、回归的分类

接下来,我将讲述关于回归的分类。回归可以有多种分类,但在这里我只说三种回归,分别是线性回归(Linear Regression)、岭回归(Ridge Regression)以及Lasso回归。

2.1.1 线性回归的数学模型

在线性回归中,其数学模型可以为这样:

 y​=wx+b

其中,y是预测值,x是输入的特征向量,w是权重向量,b则是偏置项也就是误差项。

通过观察这个模型,其实不难发现他就是一条直线的的表达式,W是斜率,b是截距。

2.1.2 线性回归的应用

线性回归的模型虽然简单,但确也时常用到,比如:IS-LM模型。其实,线性回归在房价预测、股票预测以及销售额预测等上都经常会被用到。

2.1.3 线性回归的优缺点

线性回归的优点:简单易懂、计算效率高等:缺点:对异常值敏感、对缺失数据敏感、缺乏特征选择能力等

2.1.4 线性回归的python实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 生成模拟数据
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# 数据分割
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)

# 预测
y_pred = model.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f"模型权重(斜率): {model.coef_[0][0]}")
print(f"模型截距: {model.intercept_[0]}")
print(f"均方误差(MSE): {mse}")
print(f"决定系数(R^2): {r2}")

# 可视化
plt.scatter(X_test, y_test, color='blue', label='Actual Data')
plt.plot(X_test, y_pred, color='red', linewidth=2, label='Predicted Line')
plt.title('Simple Linear Regression')
plt.xlabel('Feature X')
plt.ylabel('Target y')
plt.legend()
plt.show()

代码中,我们先随机生成[0,1)的数据然后×2,最为X,然后经过类似的处理形成y。接着,利用sklearn库中的分割函数将之分给成4份数据。然后再利用sklearn进行模型的训练与预测,最后评估与画图。图如下:

2.2.1 岭回归的数学模型

首先我将给出岭回归(Ridge Regression)的数学模型:

这个模型根据“+”分为两部分,前一部分是平方损失部分,而后一部分则是L2惩罚项,用来惩罚大的权重值α>0 是正则化参数,控制正则化的强度。其中的L2惩罚项(也称为岭正则化)是岭回归中的一项关键组成部分。L2正则化通过对模型权重的平方进行惩罚,来减小模型的复杂度,从而降低过拟合的风险。简言之,L2惩罚项就是系数平方之和。(补充一提惩罚项的含义:在损失函数中加入一个额外项,用于限制模型的复杂度,以防止过拟合)

2.2.2 岭回归的应用

接下来是关于岭回归的应用部分。它可以用于生物医学上:进行基因预测疾病风险,以及在金融上,用于预测信贷违约的概率等。再或者举个具体的例子,我们要预测某一座房子的价格,那么我们可以通过以下这些个特征来预测:房屋的面积,是否为学区房,房龄多少,房子周围是否有地铁站等。

2.2.3 岭回归的优缺点

首先是岭回归的优点:可以防止过拟合、具有灵活性(通过调整正则化参数 α,可以根据具体问题灵活控制模型的复杂度,找到一个最佳的平衡点)、可以处理多重共线性等。

然后是缺点:岭函数的所有特征都被保留(这可能导致模型仍然包含一些无关紧要的特征,增加了模型的复杂度)、参数的选择过于依赖α的值、对数据预处理的严格要求等。

2.2.4 岭函数的python实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

# 生成模拟数据
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建岭回归模型
ridge_reg = Ridge(alpha=1.0)  # alpha 是正则化强度

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

# 预测
y_pred = ridge_reg.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

# 输出模型系数和截距
print("Coefficients:", ridge_reg.coef_)
print("Intercept:", ridge_reg.intercept_)

# 输出评估指标
print("Mean Squared Error (MSE):", mse)
print("R-squared (R^2):", r2)

# 可视化
plt.scatter(X_test, y_test, color='blue', label='Actual Data')
plt.plot(X_test, y_pred, color='red', linewidth=2, label='Predicted Line')
plt.title('Ridge Regression')
plt.xlabel('Feature X')
plt.ylabel('Target y')
plt.legend()
plt.show()

代码中我们设置一个随机数种子,以确保之后可以重现数据,之后进行类似于线性回归的操作,不过不同的是在这个里面我们需要设置alpha的值,初始为1.0,之后根据具体情况可以微调。

最后代码出来的matplotlib的图像是这样的:

2.3.1 Lasso回归的数学模型

Lasso回归的目标是最小化以下损失函数:

在Lasso回归中,使用的是L1惩罚项,而它也就是系数的绝对值之和。

2.3.2 Lasso回归的应用

Lasso回归可用于基因表达分析、传感器的数据处理以及市场营销计算等。

2.3.3 Lasso回归的优缺点

首先先说Lasso的优点:它可以防止过拟合通过L1惩罚项、可以处理多重共线性等。

然后是它的缺点:它对于α具有敏感性、对于噪声就具有敏感性、Lasso在特征选择反面具有一定的随即性等。

2.3.4 Lasso回归的python代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

# 生成模拟数据
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建岭回归模型
lasso_reg = Lasso(alpha=1.0)  # alpha 是正则化强度

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

# 预测
y_pred = lasso_reg.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

# 输出模型系数和截距
print("Coefficients:", lasso_reg.coef_)
print("Intercept:", lasso_reg.intercept_)

# 输出评估指标
print("Mean Squared Error (MSE):", mse)
print("R-squared (R^2):", r2)

# 可视化
plt.scatter(X_test, y_test, color='blue', label='Actual Data')
plt.plot(X_test, y_pred, color='red', linewidth=2, label='Predicted Line')
plt.title('Lasso Regression')
plt.xlabel('Feature X')
plt.ylabel('Target y')
plt.legend()
plt.show()

以下是代码的matplotlib生成的图像:

 

综上便是关于回归中的一些问题。

此上

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值