机器学习之线性回归和逻辑回归
1. 简介
1.1 机器学习概述
机器学习是人工智能的一个重要分支,旨在通过算法让计算机系统利用数据自动学习和改进。它通过从数据中学习模式和规律,使得计算机能够进行预测、分类或者决策,而无需显式地进行编程。随着数据量的急剧增加和计算能力的提升,机器学习在各个领域如图像识别、自然语言处理和推荐系统等方面展现了强大的应用潜力。
1.2 监督学习的定义与重要性
监督学习是机器学习的一种重要范式,其核心是从标记数据(带有输入和预期输出的数据)中学习规律,以便对新数据进行预测或分类。在监督学习中,算法通过训练集中的示例来学习输入与输出之间的映射关系,从而使得算法能够对未见过的数据进行泛化。监督学习的重要性在于它能够利用已有的数据进行模型训练,并且能够对新数据进行准确的预测或分类,这使得监督学习成为了许多实际问题解决方案的基础。
1.3 线性回归和逻辑回归在监督学习中的作用
线性回归和逻辑回归是监督学习中两个基础且广泛应用的算法。
1.3.1 线性回归
线性回归是一种用于预测数值型输出的监督学习算法。其基本思想是建立一个线性模型来描述输入变量(自变量)与连续型输出变量(因变量)之间的关系。在最简单的情况下,线性回归模型假设自变量和因变量之间存在线性关系,通过拟合数据找到最佳拟合直线(或超平面),以进行预测或分析。例如,预测房屋价格、股票走势等。
线性回归的数学表达式通常为:
[ y = w_0 + w_1x_1 + w_2x_2 + \ldots + w_nx_n ]
其中,( y ) 是预测值,( w_0, w_1, \ldots, w_n ) 是模型参数,( x_1, x_2, \ldots, x_n ) 是输入特征。
1.3.2 逻辑回归
逻辑回归是一种用于解决二分类问题的监督学习算法。尽管名为“回归”,但实际上是一种分类算法,其输出是一个介于0和1之间的概率值,表示属于某一类的可能性。逻辑回归模型通过将线性模型的输出应用到一个逻辑函数(如sigmoid函数)来实现分类。
逻辑回归的数学表达式通常为:
[ P(y=1|x) = \sigma(w_0 + w_1x_1 + w_2x_2 + \ldots + w_nx_n) ]
[ P(y=0|x) = 1 - P(y=1|x) ]
其中,( \sigma ) 是sigmoid函数,( P(y=1|x) ) 是预测为正类的概率,( P(y=0|x) ) 是预测为负类的概率。
逻辑回归广泛应用于各种领域,如医学诊断、信用评分、广告点击预测等,其简单而有效的特性使其成为许多分类问题的首选算法之一。
2. 线性回归(Linear Regression)
2.1 定义与目标
线性回归是一种用于回归分析的基本方法,其主要目标是建立一个模型来预测一个连续的目标变量。回归问题的核心在于预测一个数值型的输出(目标变量),而不是分类问题中的离散类别。线性回归假设目标变量与一个或多个自变量(特征)之间存在线性关系。具体来说,线性回归试图找到一个最佳拟合直线,使得预测值与实际观测值之间的差距最小。
2.1.1 回归问题的定义
回归问题是指在给定一个或多个自变量的情况下,预测一个连续的因变量。与分类问题不同,回归问题的目标是输出一个连续的数值,而不是一个类别标签。例如,在房价预测中,给定房子的特征(如面积、房间数量等),我们希望预测房子的实际价格。这类问题通常需要通过回归模型来建立自变量与因变量之间的关系。
2.1.2 预测连续目标变量
在回归分析中,我们关注的是如何预测一个连续的目标变量。例如,预测一个学生的考试成绩、公司未来的收入或某个产品的销售量。线性回归模型通过找到一个最佳拟合的线性关系来实现这一目标。
2.2 模型概述
线性回归模型的目标是通过线性组合来预测目标变量。其基本形式为:
[ y = \beta_0 + \beta_1 x + \epsilon ]
2.2.1 线性模型的数学形式
- 截距(( \beta_0 )): 截距是回归线与y轴的交点,表示当自变量 ( x ) 为0时,因变量 ( y ) 的预测值。
- 斜率(( \beta_1 )): 斜率表示自变量 ( x ) 变化一个单位时,因变量 ( y ) 的变化量。斜率的绝对值越大,说明自变量对因变量的影响越大。
- 误差项(( \epsilon )): 误差项表示模型预测值与实际观测值之间的差距,反映了模型未能捕捉到的部分。
2.2.2 多变量线性回归
当有多个自变量时,模型的数学形式扩展为:
[ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_p x_p + \epsilon ]
其中,( x_1, x_2, \ldots, x_p ) 是多个自变量,( \beta_1, \beta_2, \ldots, \beta_p ) 是相应的回归系数。
2.3 损失函数
损失函数用于评估模型的预测效果。在线性回归中,均方误差(MSE)是最常用的损失函数,它通过计算实际观测值与预测值之间的平均平方误差来衡量模型的性能。
2.3.1 均方误差(MSE)
均方误差的公式为:
[ \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 ]
- ( y_i ) 是实际的目标值
- ( \hat{y}_i ) 是模型的预测值
- ( n ) 是样本数量
MSE 越小,表示模型的预测效果越好。均方误差对异常值较为敏感,因此在处理数据时需要考虑其影响。
2.4 模型训练
模型训练的目的是找到使损失函数最小化的参数。常用的方法包括最小二乘法和梯度下降算法。
2.4.1 最小二乘法(OLS)
最小二乘法(Ordinary Least Squares, OLS)是线性回归中最常用的参数估计方法。其基本思想是通过最小化观测值与预测值之间的均方误差来估计回归参数。
数学推导:
通过最小化下述目标函数来求解参数 ( \beta ):
[ \text{Objective Function} = \sum_{i=1}^{n} (y_i - (\beta_0 + \beta_1 x_i))^2 ]
代码示例:
import numpy as np
from sklearn.linear_model import LinearRegression
# 创建示例数据
X = np.array([[1], [2], [3]])
y = np.array([1, 2, 3])
# 实例化模型
model = LinearRegression()
# 拟合模型
model.fit(X, y)
# 打印参数
print(f"截距: {
model.intercept_}, 斜率: {
model.coef_}")
2.4.2 梯度下降算法(Gradient Descent)
梯度下降是一种迭代优化方法,通过不断更新模型参数来最小化损失函数。梯度下降算法适用于大规模数据集和复杂模型。
算法步骤:
- 初始化参数
- 计算损失函数的梯度
- 根据梯度更新参数
- 重复步骤2和3,直到收敛
代码示例:
def gradient_descent(X, y, learning_rate=0.01, epochs=1000):
m, n = X.shape
theta = np.zeros(n) # 初始化参数
for _ in range(epochs):
predictions = X @ theta
errors = predictions - y
gradients = (1 / m) * (X.T @ errors)
theta -= learning_rate * gradients
return theta
# 示例数据
X = np.array([[1], [2], [3]])
y = np.array([1, 2, 3])
# 执行梯度下降
theta = gradient_descent(X, y)
print(f"估计的参数: {
theta}")
2.5 评估指标
评估指标用于衡量回归模型的性能和预测效果。
2.5.1 决定系数(( R^2 ))
决定系数 ( R^2 ) 表示模型解释的方差比例。其计算公式为:
[ R^2 = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)2}{\sum_{i=1}{n} (y_i - \bar{y})^2} ]
- ( y_i ) 是实际的目标值
- ( \hat{y}_i ) 是模型的预测值
- ( \bar{y} ) 是目标值的均值
( R^2 ) 的值范围从0到1,值越接近1表示模型的解释能力越强。
2.5.2 调整决定系数(Adjusted ( R^2 ))
调整决定系数用于调整 ( R^2 ) 对自变量数量的敏感性。其计算公式为:
[ \text{Adjusted } R^2 = 1 - \left( \frac{1 - R^2}{n - p - 1} \right) \times (n - 1) ]
- ( n ) 是样本数量
- ( p ) 是自变量的数量
调整决定系数可以有效评估模型在多个自变量情况下的拟合效果。
2.6 假设检验
假设检验用于确定模型参数的显著性以及整体模型的有效性。
2.6.1 t检验
t检验用于检验单个回归系数是否显著不为零。t值计算公式为:
[ t = \frac{\hat{\beta}_j}{\text{SE}(\hat{\beta}_j)} ]
- ( \hat{\beta}_j ) 是回归系数的估计值
- ( \text{SE}(\hat{\beta}_j) ) 是回归系数的标准误差
2.6.2 F检验
F检验用于检验整体回归模型的显著性。其计算公式为:
[ F = \frac{\text{MSR}}{\text{MSE}} ]
- MSR 是回归平方和的均值
- MSE 是残差平方和的均值
F检验可以帮助我们判断自变量是否对因变量有整体的影响。
2.7 扩展与变体
在实际应用中,线性回归模型可能会遇到一些问题,如多重共线性或特征选择。为了解决这些问题,出现了多种线性回归的变体,如岭回归和拉索回归。
2.7.1 岭回归(Ridge Regression)
岭回
归通过在损失函数中添加L2正则化项来解决多重共线性问题。其目标函数为:
[ \text{Objective Function} = \sum_{i=1}^{n} (y_i - \hat{y}i)^2 + \lambda \sum{j=1}^{p} \beta_j^2 ]
其中,( \lambda ) 是正则化参数,用于控制正则化的强度。
代码示例:
from sklearn.linear_model import Ridge
# 创建岭回归模型
ridge_model = Ridge(alpha=1.0)
# 拟合模型
ridge_model.fit(X, y)
# 打印参数
print(f"截距: {
ridge_model.intercept_}, 斜率: {
ridge_model.coef_}")
2.7.2 拉索回归(Lasso Regression)
拉索回归通过在损失函数中添加L1正则化项来实现特征选择。其目标函数为:
[ \text{Objective Function} = \sum_{i=1}^{n} (y_i - \hat{y}i)^2 + \lambda \sum{j=1}^{p} |\beta_j| ]
L1正则化可以将部分回归系数缩小到零,从而实现特征选择。
代码示例:
from sklearn.