【机器学习】线性回归

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【机器学习】线性回归

线性回归(上)Linear Regression


引言:看看就行


ef6e01484e3d6f6dd25c32b84eaaa534_4103cddb024d4d5e9327376baf5b4e6f.png


39643b2ec788123e21ed11368b5c7787_dfc56d3e034b40589b8ccbff526fad5e.png


线性回归要做的是就是找到一个数学公式能相对较完美地把所有自变量组合(加减乘除)起来,得到的结果和目标接近


线性回归概念


image.png

线性模型来拟合特征组与标签之间的关系的方法,就称为线性回归


有监督的学习中,求解线性回归模型中的参数w,b问题称为线性回归问题。


算法求解步骤


Part1.建立模型基本形式


数据集一共有p个数据点,每个数据点有n个描述的维度image.png 其中image.png

是第image.png个数据点。线性模型试图学习到一个通过属性的线性组合来进行预测的函数

8bb49b35df1d245e23629b3aefabe03a_1c2fed6683774a99a7bf8fa50d3bf1f3.png


image.png


Part2.选定距离衡量方程


我们的目标:模型预测出来的值和真实值无限接近,即:image.png

这里解释一下为什么只能无限接近,因为我们只能拿某一类事件所有数据中抽样出来的部分数据进行学习,抽样出来数据不可能涵盖事件所有的可能性,所以最终只能学习到总体的规律

问题:如何衡量预测的准确性,即衡量f(x)与真实值y之间的差异

image.png

1.误差平方和SSE判别(线性回归就采取这个)


image.png

解释:由于误差有正有负,故可以用方法和来抵消正负。

其他的还有欧式距离判别曼哈顿距离判别马氏距离判别等等


Part3.学习模型参数


image.png

所以有了如下一图:

0749d9e1a4f4ea2572f0e644bf62fdf5_bc5fa65cf20344deaddeabcf883eacc2.png

这样,我们只需要求解这个方程就能得到w和b的值。

首先,我们先将方程用矩阵表示:

image.png

求最小,可以将两边对W求偏导,化简得到方程,令其为零,j解其方程就可以得到W。具体求解过程:详解正规方程

image.png

评价指标:image.png

模型建好了,我们需要设计相关的指标来检验模型的表现。有人会问,最小二乘法不就是评价指标吗,和这里的评价指标有什么区别?


从概念上讲,两者都是评价指标没什么区别。但是从使用场景上讲,我们在上文提到的最小二乘法,是我们在用训练数据集训练建模时,为了调整模型参数而确定的评价指标,目的是为了优化模型参数。而这里我们要讲的评价指标,是衡量模型建立好以后,使用别的数据集时(测试数据集、真实数据集)这组模型参数的表现效果,目的是为了选择模型参数


这里给出准确定义:评价指标是针对将相同的数据,输入不同的算法模型,或者输入不同参数的同一种算法模型,而给出这个算法或者参数好坏的定量指标


1.均方误差(SSE)

2.均方误差根(标准误差RMSE)

3.平方绝对误差(MAE)

4.R-square(决定系数)

 对于回归类算法而言,只探索数据预测是否准确是不足够的。除了数据本身的数值大小之外,我们还希望模型能够捕捉到数据的”规律“,比如数据的分布规律,单调性等等,而是否捕获了这些信息并无法使用MSE或者MAE来衡量


数学理解:分母理解为原始数据的离散程度,分子为预测数据和原始数据的误差,二者相除可以消除原始数据离散程度的影响

image.png

  • 上面分子就是我们训练出的模型预测的误差和
  • 下面分母就是瞎猜的误差和。(通常取观测值的平均值)
  • 如果结果是0,就说明我们的模型跟瞎猜差不多
  • 如果结果是1。就说明我们模型无错误
  • 介于0~1之间,越接近1,回归拟合效果越好,一般认为超过0.8的模型拟合优度比较高


ps:

1caacd657c822f43b4c94b0d2e42fa63_278583898c774367b84925e067b166ce.png


其中红色线是我们的真实标签,而蓝色线是我们的拟合模型。这是一种比较极端,但的确可能发生的情况。这张图前半部分的拟合非常成功,看上去真实标签和预测结果几乎重合,但后半部分的拟合却非常糟糕,模型向着与真实标签完全相反的方向去了


对于这样的一个拟合模型,如果我们使用MSE来对它

进行判断,它的MSE会很小,因为大部分样本其实都被完美拟合了,少数样本的真实值和预测值的巨大差异在被均分到每个样本上之后,MSE就会很小。但这样的拟合结果必然不是一个好结果,因为一旦新样本是处于拟合曲线的后半段的,预测结果必然会有巨大的偏差。所以,我们希望找到新的指标,除了判断预测的数值是否正确之外,还能够判断我们的模型是否拟合了足够多的,数值之外的信息


线性回归(下)Linear Regression


正规方程(最小二乘法)的局限性


image.png


多项式回归


问题:

 如果特征标签之间的关系近似线性关系,就可以用一个线性模型来拟合这种回归关系,该拟合方法就是线性回归方法。但是,有些实际问题中,标签与特征之间的关系并非是线性的,而是呈多项式关系。在这种情形下,标签与特征之间的关系就称为多项式关系。如何拟合?


解决方法:

用线性回归的一个变型----多项式回归来拟合标签和特征的关系

以一个一元二次多项式引入:

image.png

只有一个特征x,包含3个单项式。

如果把每一个单项式看成是一个特征,即如果把image.png均看成特征,则上面的一元二次多项式,也可以看作关于这3个特征的线性模型。


ps:多项式回归,x的首位已经是1

image.png

一个n元d次多项式:

b2047f15d9c15bbd2784b4c16845719f_7d772ebcd48e4bd4bc0ce6f70a48b00b.png


那么,如何确定单项式的个数呢?


image.png

n元d次多项式转image.png元线性模型例题


f76670c42ebfd2eb17856637e83bff6b_a5f0f6e55285474bbaeb39a1428d008e.png

6322cfa690cc71ab9605b4d7cd15b403_3fb536ebbae14929b4e226e7aa08a545.png



实例:


1 import numpy as np
2 from sklearn.preprocessing import PolynomialFeatures
3 from machine_learning.linear_regression.lib.linear_regression import LinearRegression
4 import matplotlib.pyplot as plt
5
6 def generate_samples(m):
7 X = 2 * np.random.rand(m, 1) # 样本空间[0,2], X m*1矩阵
8 y = X**2 – 2 * X + 1 + np.random.normal(0, 0.1, (m, 1)) #标签y m*1列向量
9 return X, y
10
11 np.random.seed(0)
12 X, y = generate_samples(100)
13 poly = PolynomialFeatures(degree=2) #声明2次多项式化 实例
14 X_poly = poly.fit_transform(X) #将X 2次多项式化
15 model = LinearRegression() #声明 线性回归模型 实例
16 model.fit(X_poly, y) #训练 线性回归模型
17 print(model.w) #输出模型参数w
18 plt.scatter(X, y) #画训练数据的散点图
19 X_test = np.linspace(0, 2, 300).reshape(300, 1) #生成 [0,2]之间300个测试数据
20 X_test_poly = poly.fit_transform(X_test) #将X_test 2次多项式化
21 y_pred = model.predict(X_test_poly) #测试
22 plt.plot(X_test, y_pred) #画 300个数据的标签的连线,构成模型的函数图像
23 plt.show(


114f2536c41aee08c38289b721efe42f_31f91870a2be4deba2411c4953c7b419.png


岭回归


  • 问题:
  • 过度拟合
  • 解决方式:
  • 岭回归(在目标函数后追加惩罚)


image.png

1 import numpy as np
2
3 class RidgeRegression: #岭回归 线性回归的L2正则化模型
4 def __init__(self, Lambda): #正则化系数λ
5 self.Lambda = Lambda
6
7 def fit(self, X, y): #训练
8 m, n = X.shape
9 r = m * np.diag(self.Lambda * np.ones(n)) # mλI , r=n*n矩阵,对角线上元素值为 mλ
10 self.w = np.linalg.inv(X.T.dot(X) + r).dot(X.T).dot(y) #定理3.3 w* 计算
11
12 def predict(self, X): #预测
13 return X.dot(self.w

e44d16dbf32a1a8be3c350fa754dbd10_6049760eecd449d1a50c94756e289cdc.png


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
17天前
|
机器学习/深度学习 人工智能 算法
探索机器学习:从线性回归到深度学习
本文将带领读者从基础的线性回归模型开始,逐步深入到复杂的深度学习网络。我们将通过代码示例,展示如何实现这些算法,并解释其背后的数学原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。让我们一起踏上这段激动人心的旅程吧!
|
1月前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的线性回归模型
本文深入探讨了机器学习中广泛使用的线性回归模型,从其基本概念和数学原理出发,逐步引导读者理解模型的构建、训练及评估过程。通过实例分析与代码演示,本文旨在为初学者提供一个清晰的学习路径,帮助他们在实践中更好地应用线性回归模型解决实际问题。
|
1月前
|
机器学习/深度学习 自然语言处理 算法
深入理解机器学习算法:从线性回归到神经网络
深入理解机器学习算法:从线性回归到神经网络
|
7月前
|
机器学习/深度学习 算法 TensorFlow
机器学习算法简介:从线性回归到深度学习
【5月更文挑战第30天】本文概述了6种基本机器学习算法:线性回归、逻辑回归、决策树、支持向量机、随机森林和深度学习。通过Python示例代码展示了如何使用Scikit-learn、statsmodels、TensorFlow库进行实现。这些算法在不同场景下各有优势,如线性回归处理连续值,逻辑回归用于二分类,决策树适用于规则提取,支持向量机最大化类别间隔,随机森林集成多个决策树提升性能,而深度学习利用神经网络解决复杂模式识别问题。理解并选择合适算法对提升模型效果至关重要。
253 4
|
7月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习】解释什么是线性回归?
【5月更文挑战第15天】【机器学习】解释什么是线性回归?
|
1月前
|
机器学习/深度学习 数据采集 算法
探索机器学习中的线性回归
【10月更文挑战第25天】本文将深入浅出地介绍线性回归模型,一个在机器学习领域中广泛使用的预测工具。我们将从理论出发,逐步引入代码示例,展示如何利用Python和scikit-learn库实现一个简单的线性回归模型。文章不仅适合初学者理解线性回归的基础概念,同时也为有一定基础的读者提供实践指导。
|
2月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
探索机器学习:从线性回归到深度学习
在这篇文章中,我们将一起踏上一场激动人心的旅程,穿越机器学习的广阔天地。我们将从最基本的线性回归开始,逐步深入到复杂的深度学习模型。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深入的理解。让我们一起探索这个充满无限可能的世界吧!
|
2月前
|
机器学习/深度学习 API
机器学习入门(七):线性回归原理,损失函数和正规方程
机器学习入门(七):线性回归原理,损失函数和正规方程
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
探索机器学习:从线性回归到深度学习
【9月更文挑战第4天】在这篇文章中,我们将深入探讨机器学习的世界,从基础的线性回归模型开始,逐步深入到复杂的深度学习网络。我们将通过实际的代码示例,揭示这些模型背后的数学原理,以及如何在现实世界的问题中应用它们。无论你是初学者还是有经验的数据科学家,这篇文章都将为你提供新的视角和深入的理解。
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
探索机器学习的奥秘:从线性回归到深度学习
【8月更文挑战第26天】本文将带领读者走进机器学习的世界,从基础的线性回归模型开始,逐步深入到复杂的深度学习网络。我们将探讨各种算法的原理、应用场景以及实现方法,并通过代码示例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的知识和技能。让我们一起揭开机器学习的神秘面纱,探索这个充满无限可能的领域吧!