机器学习从0入门-线性回归

2023-08-25 12:26:26 浏览数 (2)

小白学机器学习1:线性回归

机器学习有许多不同的算法,每个算法都有其特定的应用场景和优缺点。然而,最简单的机器学习算法可能是线性回归

线性回归是一种用于预测连续数值输出的监督学习算法,它通过建立一个线性方程来描述输入变量与输出变量之间的关系。该算法的目标是使预测值与真实值之间的差异最小化。

线性回归通常用于解决简单的预测问题,例如根据房屋面积和其他特征来预测房屋价格,或根据历史销售数据来预测未来销售量。它是许多其他机器学习算法的基础,因此是深入学习机器学习的重要一步。

线性回归基本原理

线性回归是一种经典的机器学习算法,其基本原理是利用输入变量和输出变量之间的线性关系来建立一个线性模型,从而进行预测。线性回归的目标是最小化预测值与真实值之间的差异(即残差),通常使用最小二乘法来实现。

以下是线性回归算法的基本步骤:

  1. 收集数据:收集包含输入变量和输出变量的数据集。
  2. 准备数据:对数据进行清理、预处理和特征选择等操作。
  3. 建立模型:根据输入变量和输出变量之间的线性关系建立一个线性模型,通常表示为 y = w_0 w_1x_1 w_2x_2 … w_n*x_n,其中 y 是输出变量,w 是权重系数,x 是输入变量。
  4. 训练模型:通过最小化残差的平方和来训练模型,即找到一组最优的权重系数 w,使预测值与真实值之间的误差最小化。
  5. 预测结果:使用训练好的模型对新的输入数据进行预测,并输出对应的输出变量。
  6. 模型评估:评估模型的性能和准确度,通常使用平均绝对误差、均方误差等指标来评估模型的性能。

线性回归算法是一种简单但广泛使用的机器学习算法,可以用于解决许多实际问题,例如预测房价、销售量等。

线性回归的线性体现在哪里?

线性回归的线性体现在于它的模型是一个线性方程,即因变量(也称为响应变量)y 是自变量(也称为解释变量)x1, x2, …, xn 的线性组合,其方程形式为:

y = w_0 w_1x_1 w_2x_2 … w_nx_n ε

其中,w_0, w_1, w_2, …, w_n 是模型的参数,分别表示截距和自变量的系数;ε 是误差项,表示模型无法解释的随机噪声。该方程描述了自变量与因变量之间的线性关系,即当自变量的值发生变化时,因变量的值按照一定的比例发生相应的变化。这种线性关系可以通过求解模型参数来确定,使得模型的预测值与真实值之间的误差最小化。

需要注意的是,线性回归模型的线性体现在于自变量的系数是线性的,而自变量本身并不一定要是线性的。在实际应用中,我们可以将自变量进行多项式展开、取对数、加入交互项等操作,从而扩展模型的表达能力,但这并不会改变模型的线性性质。

如何使得预测值和真实值的差异最小化?

使预测值和真实值的差异最小化是线性回归算法的核心目标,常用的方法是最小二乘法(Ordinary Least Squares,OLS)。在最小二乘法中,通过最小化**残差(预测值和真实值之间的差异)**的平方和来确定最优的权重系数。

最小二乘法可以用以下公式表示:

min_{w} ||y - Xw||^2_2

其中,y 表示真实值,X 表示输入变量的矩阵,w 表示权重系数,||.|| 表示向量的 L2 范数。

具体地,我们定义残差为:

e_{i}=y_{i}-hat{y}{i}=y{i}-left(w x_{i} bright)

其中,y_i 是第 i 个样本的真实值,hat{y_i} 是对第 i 个样本的预测值,wx_i b 是拟合直线的表达式。

然后,我们使用最小二乘法来求解最佳拟合直线的参数 wb。最小二乘法的基本思想是,找到最佳的 wb,使得残差的平方和最小化:

L(w, b)=sum_{i=1}^{n}left(y_{i}-left(w x_{i} bright)right)^{2}

最小二乘法可以使用矩阵运算进行计算,求解出最优的权重系数,从而得到线性回归模型。

除了最小二乘法,还有其他方法可以最小化预测值和真实值之间的差异,包括:

  • 梯度下降法(Gradient Descent):通过迭代的方式,沿着残差的梯度方向更新权重系数,逐步降低预测值和真实值之间的差异。
  • 正则化(Regularization):为了避免模型过拟合,可以在最小化残差的基础上,添加一个正则化项,限制权重系数的大小。常用的正则化方法包括 L1 正则化和 L2 正则化。
  • 岭回归(Ridge Regression):在最小二乘法的基础上,加入 L2 正则化项,使得模型更加稳定,适用于处理高维数据。

这些方法都可以用于最小化预测值和真实值之间的差异,得到更准确的线性回归模型。

用python从0实现线性回归算法

下面是用 Python 从零实现简单线性回归的示例代码:

代码语言:javascript复制
pythonCopy code
import numpy as np

class LinearRegression:
    def __init__(self):
        self.slope = None
        self.intercept = None

    def fit(self, X, y):
        n = len(X)
        sum_x = np.sum(X)
        sum_y = np.sum(y)
        sum_xy = np.sum(X * y)
        sum_x_squared = np.sum(X ** 2)

        self.slope = (n * sum_xy - sum_x * sum_y) / (n * sum_x_squared - sum_x ** 2)
        self.intercept = (sum_y - self.slope * sum_x) / n

    def predict(self, X):
        return self.slope * X   self.intercept

在上述代码中,我们定义了一个名为 LinearRegression 的类。在该类中,我们定义了两个方法:

  • fit(X, y):用于拟合线性回归模型。输入参数 X 和 y 分别为输入特征和目标变量。在该方法中,我们计算了输入特征 X 和目标变量 y 的总和、它们的乘积的总和、以及输入特征 X 的平方的总和。然后,我们使用这些参数计算出线性回归的斜率和截距。
  • predict(X):用于预测目标变量的值。输入参数 X 为输入特征。在该方法中,我们使用已经拟合好的斜率和截距来预测目标变量的值。

使用这个 LinearRegression 类的示例如下:

代码语言:javascript复制
pythonCopy code
# 构造数据集
X = np.array([1, 2, 3, 4, 5])
y = np.array([2.5, 3.5, 4.5, 5.5, 6.5])

# 拟合线性回归模型
model = LinearRegression()
model.fit(X, y)

# 预测目标变量的值
y_pred = model.predict(X)
print(y_pred)

在上述代码中,我们首先构造了一个简单的数据集,包括输入特征 X 和目标变量 y。然后,我们使用上述定义的 LinearRegression 类来拟合线性回归模型,并预测目标变量的值。

实战:基于线性回归预测房价

同时使用交叉验证和网格搜索来实现线性回归模型的 Python 实现:基于线性回归的波士顿房价预测

代码语言:javascript复制
# 导入必要的库和数据集
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split, GridSearchCV, KFold
from sklearn.metrics import mean_squared_error

boston = load_boston()

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2, random_state=42)

# 创建线性回归模型
model = LinearRegression()

# 定义超参数范围和交叉验证方法
param_grid = {
    'normalize': [True, False],
    'fit_intercept': [True, False]
}

cv = KFold(n_splits=5, shuffle=True, random_state=42)

# 使用交叉验证和网格搜索进行超参数选择
grid_search = GridSearchCV(model, param_grid, cv=cv, scoring='neg_mean_squared_error')
grid_search.fit(X_train, y_train)

# 输出最佳超参数和最佳均方误差
print('最佳超参数:', grid_search.best_params_)
print('最佳均方误差:', -grid_search.best_score_)

# 在测试集上进行预测并计算均方误差
y_pred = grid_search.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print('测试集均方误差:', mse)

在上述代码中,我们定义了超参数范围和交叉验证方法,并使用 GridSearchCV 函数对超参数进行搜索。需要注意的是,我们使用了 KFold 函数来定义交叉验证方法,并将其作为 GridSearchCV 函数的 cv 参数。

在搜索完成后,我们输出了最佳超参数和最佳均方误差,并在测试集上进行了预测和评估。

回归模型的评价指标有哪些?

在回归问题中,常用的评价指标有以下几个:

  1. 均方误差(Mean Squared Error,MSE):它是预测值与真实值之差的平方和的均值,是回归问题中最常用的评价指标之一。其公式为:MSE=frac{1}{n}sum_{i=1}{n}(y_i-hat{y}_i)2,其中 n 是样本数,y_i 是真实值,hat{y}_i 是预测值。
  2. 均方根误差(Root Mean Squared Error,RMSE):它是均方误差的平方根,与均方误差相比,RMSE 更能体现预测值与真实值之间的差距。其公式为:RMSE=sqrt{MSE}
  3. 平均绝对误差(Mean Absolute Error,MAE):它是预测值与真实值之差的绝对值的平均值,其公式为:MAE=frac{1}{n}sum_{i=1}^{n}|y_i-hat{y}_i|
  4. 决定系数(Coefficient of Determination,R^2):它是回归方程所能解释的总方差占总方差的比例,它的取值范围在 0 到 1 之间。其公式为:R2=1-frac{sum_{i=1}{n}(y_i-hat{y}*i)2}{sum*{i=1}{n}(y_i-bar{y})^2},其中 bar{y} 是真实值的均值。

在实际问题中,不同的评价指标可以从不同的角度评估模型的好坏,需要根据具体的应用场景来选择适合的评价指标。例如,在房价预测问题中,MSE 和 RMSE 更能体现预测值与真实值之间的差距,而 MAE 更能反映模型的稳定性。

为什么回归更常用mse作为评价指标?

MSE特点

回归模型的均方误差(Mean Squared Error,MSE)是衡量模型预测误差的一种常用指标,可以用来评估回归模型的性能。MSE是实际值与预测值之差的平方和的平均值。

具体来说,假设我们有n个样本,第i个样本的真实值为y_i,预测值为hat{y_i},则MSE的计算公式为:

MSE = frac{1}{n} sum_{i=1}^{n} (y_i - hat{y_i})^2

其中,sum_{i=1}^{n} (y_i - hat{y_i})^2是所有样本预测误差的平方和,frac{1}{n}是平均值的计算。

MSE越小,表示模型预测效果越好,即预测值与真实值的差距越小。它具有以下优势:

  1. 数学性质好:MSE 是预测值与真实值之差的平方和的均值,具有良好的数学性质,便于理论研究和优化算法的设计。
  2. 对异常值不敏感:MSE 对于异常值的影响较小,即使存在极端的预测误差,也不会对整体的评价结果产生过大的影响。
  3. 易于计算和解释:MSE 的计算方法简单,易于理解和解释,能够直观地反映模型的预测误差大小。
  4. 可以用于优化模型:许多机器学习算法都是通过最小化MSE来优化模型参数的,如线性回归、岭回归等。

尽管MSE具有以上优势,但在某些情况下也可能存在一些问题。例如,MSE 对于预测误差的量纲比较敏感,可能会导致评价结果受到量纲的影响。此外,在某些实际应用中,预测误差的大小对于问题的解释和决策并不一定具有直接的意义,因此可能需要使用其他的评价指标来辅助模型的评估。

如何从数学的统计的角度看MSE?

从数学和统计角度,MSE(均方误差)是评估回归模型性能的一种常用指标。MSE的优点是简单易用,容易计算和解释。下面从数学和统计角度分别对MSE进行分析:

  1. 数学角度

从数学角度来看,MSE是实际值和预测值之间差异的平方的平均值,因此可以看作是真实值和预测值之间差异的度量。MSE越小,说明预测值和实际值之间的差异越小,预测精度越高。同时,MSE的计算可以使用标准的数学运算,因此可以很方便地进行计算和优化。

  1. 统计角度

从统计角度来看,MSE是回归模型中残差(预测值与实际值之间的差异)的平方和的平均值。因此,MSE可以用来衡量模型的拟合程度,即模型对样本数据的拟合程度。当MSE很小的时候,说明模型对数据的拟合很好,模型的预测精度很高;反之,MSE很大的时候,说明模型对数据的拟合很差,模型的预测精度很低。

需要注意的是,MSE只是衡量模型在训练数据上的预测效果,并不能保证模型在新的数据上表现也会很好。因此,我们在使用MSE来评估模型性能的时候,需要同时考虑模型的泛化能力,即模型对新数据的预测能力。

0 人点赞