在这篇文章中,我将介绍一些关于回归的问题,分别为回归的概念、回归的分类、不同回归的区别以及其应用等这四部分。
一、回归的概念
首先我们先认识回归,回归是一种预测建模任务,主要目的是根据已知的数据预测连续值的输出。简而言之,回归分析用于理解和建立输入变量(自变量)与输出变量(因变量)之间的关系。
二、回归的分类
接下来,我将讲述关于回归的分类。回归可以有多种分类,但在这里我只说三种回归,分别是线性回归(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生成的图像:
综上便是关于回归中的一些问题。
此上