机器学习---监督学习之线性回归

分类和回归的区别:
分类,我们预测一个状态,
回归,我们预测一个值。

线性回归是:通过已有的数据,拟合出一条符合它的直线,用来预测其他可能出现的值。
如何拟合一条好的直线呢?

就是是如何使一条直线更加的靠近一个点呢?

技巧方法

  1. 绝对值技巧:
    先随机生成一条直线y=w1x+w2y=w1x+w2y=w1x+w2,w1是斜率,w2是截距,我们通过调整这两个参数来使这条直线逐渐靠近一个原始的点(p,q)。
    如何慢慢调整这两个参数呢?
    我们把w1+pw1+pw1+p,w2+1w2+1w2+1(特定的一种调整手段),直线调整方程为:y=(w1+)x+(w2+1)y=(w1+)x+(w2+1)y=(w1+)x+(w2+1)后来发现这样改变直线移动的幅度还是很大,我们想到设置一个α\alphaα变量控制w1和w2的变化,就是:
    把原来的w1变为:w1+pαw1+p\alphaw1+pα,
    把原来的w2变为:w2+1αw2+1\alphaw2+1α
    直线调整方程为:y=(w1+pα)x+(w2+1α)y=(w1+p\alpha)x+(w2+1\alpha)y=(w1+pα)x+(w2+1α),这样直线的变化幅度就会变小很多。

这里的p就是坐标值的p,我们改变直线斜率的时候可以不用考虑正负问题,因为p的正负决定了斜率的正负。α\alphaα我们给他起了个名字,叫学习率。

  1. 平方技巧:
    上面讲的绝对值技巧只涉及到p也就是一个点的横坐标,如果把纵坐标的变化也加进去会移动的更加精确.
    点到直线的纵坐标距离为:q−yq-yqy
    把原来的w1变为:w1+pα(q−y)w1+p\alpha(q-y)w1+pα(qy),
    把原来的w2变为:w2+1α(q−y)w2+1\alpha(q-y)w2+1α(qy)
    直线调整方程为:y=(w1+pα(q−y))x+(w2+1α(q−y))y=(w1+p\alpha(q-y))x+(w2+1\alpha(q-y))y=(w1+pα(qy))x+(w2+1α(qy)),这样直线的变化就会更加精确。

最小化函数值方法

  1. 梯度下降
    我们想继续寻找一条最合适的直线来拟合很多个点,这里会有另一个问题,衡量直线好坏的标准(误差越小。拟合的越好)。我们用所有点到直线的误差和(第4和第5个知识点)表示(误差函数)。
    那梯度下降又是干啥用的?
    我们可以把它理解为一种方法,这个方法可以帮助我们找到一个函数的最值。
    我们找谁的最值呢?
    找误差函数的最值,而且是最小值。我们使用梯度下降的方法不断的求误差函数值,直到误差函数达到最小值。
    误差值函数如下图所示:
    在这里插入图片描述
    我们选择下降最快的方向调整绿色线的曲率,也就是wi−>wi−∂∂wierrorwi->wi-\frac{\partial}{\partial w_i}errorwi>wiwierror。进行此操作直到error取值到达最小值附近。

逐个地在每个数据点应用平方(或绝对)误差,并重复这一流程很多次。叫做随机梯度下降法。
同时在每个数据点应用平方(或绝对)误差,并重复这一流程很多次。叫做批量梯度下降法。

  1. 平均绝对误差
    所有点到直线垂直距离和是:∑i=1m∣y−y^∣\sum_{i=1}^{m}|y-\hat y|i=1myy^,
    除以点的个数m,就是平均绝对误差了:error=1m∑i=1m∣y−y^∣error=\frac 1m\sum_{i=1}^{m}|y-\hat y|error=m1i=1myy^
    这个公式就是我们上图的误差函数的一个具体表示,我们可以使用梯度下降的方法求得这个公式的最小值。

  2. 平方误差
    为了不计算绝对值,我们采取对距离求平方的方法,使得误差函数依然能够衡量误差大小且不用求绝对值
    那么所有点到直线垂直距离和误差就被改成了:(y−y^)2{(y-\hat y)}^2(yy^)2,
    这时除以的个数就被改为2m了(这里为什么是2m?求导所得,至于为什么求导看第6点),均方误差就为:error=12m∑i=1m(y−y^)2error=\frac 1{2m}\sum_{i=1}^{m}{(y-\hat y)}^2error=2m1i=1m(yy^)2
    我们依然可以使用梯度下降的方法求得这个公式的最小值。

  3. 最小化误差函数
    如果看具体的例子,我们就能发现,上面讲的两个技巧方法就是平均绝对误差和均方误差的一个特例。他们讲的是同一个东西。具体推到过程可以自己尝试。

  4. 绝对值误差 VS 平方误差
    有时候只用一种误差计算方法是判断不出来误差好坏的,如下图所示

在这里插入图片描述
这幅图的平均绝对误差ABC三条直线都一样,但是计算其平方误差时,发现B的平方误差较小。因为均方误差是个2次函数。
在这里插入图片描述

  1. 高纬度
    当输入的数据有两个,输出结果为一个时,我们在进行预测的时候就不是直线的关系了,绘出图来就是三维的,两个输入一个输出,预测的方程也由直线方程变为了平面方程。有三个可变参数。
    同理,更高维的输入输出我们或许用图形表示不了,但依然可以用公式表示。

  2. 解方程
    知道方程之后,我们就可以用对方程求偏导的方式求得最值了。
    此时使用方程求解依旧会出现相关问题,当方程个数很多时,求解就会变慢。
    我们甚至需要用矩阵来求解。

  3. 线性回归注意事项

  • 有些训练的数据不是线性关系,不适合线性回归
    在这里插入图片描述
  • 如果数据集中存在异常值,最终的结果会有偏差
    在这里插入图片描述
  1. 对于明显不是直线的数据集,我们可以用多项式来拟合。
    在这里插入图片描述

  2. 正则化
    现在我们看另外一种状况,下图是两种拟合线,一种是线性拟合线,一种是多项式拟合。
    第一种有错误,第二种没错误,也就是第二种的误差更小。
    但是,如果按照划分来看,第二种明显是过拟合,不可取。
    如何在误差函数中体现过拟合呢?
    我们可以看到,第一种的参数很小,第二种的参数很多很大,所有把参数的的复杂度也算作是误差,这样简单的模型就会比复杂的模型更好了。
    在这里插入图片描述
    又如果,我们需要手动调节模型的复杂程度,这该怎么办呢?
    设置一个λ\lambdaλ乘以参数的值,λ\lambdaλ越小惩罚力度越小,越又可能是复杂的模型。
    这叫正则化。

  3. 神经网络回归
    假设我们使用分段函数来拟合数据集
    在这里插入图片描述
    就可以类比于神经网络的例子了。
    在这里插入图片描述
    此神经网络最后的Sigmoid是把原来的值转换到0到1之间使之达到分类的效果,如果不使用Sigmoid函数,就是预测值的作用了。

<think>嗯,我现在要介绍一下Python机器学习中的线性回归基础。首先,我需要确认自己对线性回归的理解是否正确。线性回归是一种用于预测连续数值的监督学习算法,对吧?它的基本思想是找到自变量和因变量之间的线性关系,然后根据这个关系进行预测。 那线性回归的数学模型是什么呢?应该是类似y = wx + b这样的形式,其中w是权重,b是置项。对于多元线性回归,可能会有多个特征,所以公式应该是y = w1x1 + w2x2 + ... + wnxn + b。这里的目标是找到最佳的w和b,使得预测值和实际值的误差最小,通常使用最小二乘法来优化。 接下来,我需要考虑如何在Python中实现线性回归。常用的库应该是scikit-learn,里面的LinearRegression类应该可以直接用。不过在使用之前,可能需要先导入必要的库,比如numpy处理数据,pandas读取数据,matplotlib进行可视化,还有sklearn本身。 数据预处理的步骤也很重要。比如,数据是否需要标准化或归一化?线性回归对特征的尺度敏感吗?我记得如果特征尺度差异大,可能会影响梯度下降的收敛速度,所以可能需要做特征缩放。不过scikit-learn的线性回归是否自动处理这些呢?可能不是,所以预处理步骤可能需要自己完成。 然后,分割数据集为训练集和测试集,用train_test_split函数。训练模型之后,评估指标通常用均方误差(MSE)或者R&sup2;分数。R&sup2;分数越接近1,说明模型拟合得越好。 有没有可能出现过拟合或者欠拟合的情况?线性回归本身比较简单,可能容易欠拟合,特别是在数据存在非线性关系的时候。这时候可能需要考虑多项式回归或者其他更复杂的模型。 举个例子,比如用波士顿房价数据集,但听说这个数据集已经被移除了,可能需要用其他数据集替代,比如加利福尼亚房价数据集。加载数据,处理数据,分割,训练,预测,评估这些步骤都要走一遍。 另外,可能需要可视化结果,比如画出回归线,或者残差图,看看预测值和实际值的差异分布。残差应该随机分布,没有明显的模式,否则可能模型有问题。 还有,线性回归的假设条件,比如线性关系、误差项的正态性、同方差性、无自相关、无多重共线性等,这些假设是否满足会影响模型的效果。如果数据不满足这些假设,可能需要做一些变换或者使用其他方法。 总之,步骤大概是:导入库,加载数据,数据预处理,分割数据集,训练模型,预测,评估,可视化,最后检查假设是否成立。可能还要讨论一下模型的系数,看看每个特征对目标变量的影响大小和方向。 在写代码示例的时候,需要注意正确导入库,处理数据,比如处理缺失值,可能需要用SimpleImputer填充,或者删除有缺失的样本。特征工程部分是否需要加入多项式特征?如果是线性回归基础的话可能不需要,但可以提到更高阶的方法。 最后,总结线性回归的优缺点,比如简单、可解释性强,但可能无法捕捉复杂关系。适用场景是当因变量和自变量之间存在线性或近似线性的关系时。</think>### 线性回归基础介绍 #### 一、核心概念 线性回归是**监督学习**中用于预测连续型变量的基础算法,核心是建立自变量(特征)$X$ 与因变量(目标值)$y$ 之间的线性关系。其数学表达式为: $$ y = w_1x_1 + w_2x_2 + \dots + w_nx_n + b $$ 其中: - $w_i$:特征权重(系数) - $b$:置项(截距) #### 二、核心步骤 1. **目标函数** 最小化预测值与真实值的**均方误差**(MSE): $$ \text{MSE} = \frac{1}{n}\sum_{i=1}^n (y_i - \hat{y}_i)^2 $$ 2. **求解方法** - **正规方程**:直接通过矩阵运算求解权重(适用于小数据集) $$ w = (X^T X)^{-1} X^T y $$ - **梯度下降**:迭代优化权重(适合大数据集) --- #### 三、Python实现(以加利福尼亚房价数据集为例) ##### 1. 导入库 ```python import numpy as np import pandas as pd from sklearn.datasets import fetch_california_housing from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score ``` ##### 2. 数据加载与预处理 ```python # 加载数据集 data = fetch_california_housing() X = data.data # 特征矩阵 (20640个样本 × 8个特征) y = data.target # 目标值 (房价中位数) # 分割数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` ##### 3. 模型训练与预测 ```python # 创建模型 model = LinearRegression() # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test) ``` ##### 4. 模型评估 ```python # 计算MSE和R&sup2;分数 mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print(f"MSE: {mse:.2f}, R&sup2;: {r2:.2f}") ``` ##### 5. 查看权重与截距 ```python print("权重:", model.coef_) # 每个特征的影响系数 print("截距:", model.intercept_) ``` --- #### 四、关键注意事项 1. **特征缩放** - 若使用梯度下降,建议通过`StandardScaler`标准化数据 2. **多重共线性** - 高度相关的特征会导致权重不稳定,可通过方差膨胀因子(VIF)检测 3. **假设检验** - 残差应满足正态性、独立性、同方差性(可通过QQ图、残差图诊断) --- #### 五、优缺点分析 | **优点** | **缺点** | |------------------------------|------------------------------| | 计算效率高,适合大数据集 | 无法捕捉非线性关系 | | 结果可解释性强(权重含义明确) | 对异常值敏感 | | 可作为复杂模型的基线模型 | 需严格满足统计假设 | --- #### 六、适用场景 - 房价预测、销售额预测等**连续值预测** - 分析特征与目标变量之间的**线性关系强度** - 作为其他算法(如正则化回归、神经网络)的基础组件 通过上述步骤,您可快速掌握线性回归的核心原理与Python实现方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值