机器学习一(线性回归)

线性回归问题

回归问题

定义:因变量(待预测的值target、y)与一个或多个数值型的自变量(影响因素x)之间的关系,是一种解决连续值的问题。

简单线性回归

定义:只有一个自变量,即简单的一次函数。

公式:
y = k x + b y = kx + b y=kx+b

多元线性回归

定义:由多个自变量拟合而成的待线性解决问题。

三种类型的公式,意义是一样的,根绝个人选择略有差异,但是在计算的时候一般用线性代数来进行矩阵运算。

公式1:
y ^ = w 1 x 1 + w 2 x 2 + . . . . + w n x n + b \hat{y} =w_1x_1 + w_2x_2+....+w_nx_n+b y^=w1x1+w2x2+....+wnxn+b
公式2:
y ^ = w 1 x 1 + w 2 x 2 + . . . . + w n x n + w 0 \hat{y} =w_1x_1 + w_2x_2+....+w_nx_n+w_0 y^=w1x1+w2x2+....+wnxn+w0
公式3:(线性代数表示)
y ^ = W T X \hat{y} =W^TX y^=WTX

正规方程

定义:通过最小二乘法可讲误差方程转换成有确定解的代数方程组(方程组的数目=未知数的个数),从而可求解出未知数。

例如:
y 1 = w 1 x 1 1 + w 2 x 1 2 + . . . . . w n x 1 n y 2 = w 1 x 2 1 + w 2 x 2 2 + . . . . . w n x 2 n . . . . y n = w 1 x n 1 + w 2 x n 2 + . . . . . w n x n n y_1 = w_1x_11+w_2x_12+.....w_nx_1n\\ y_2 = w_1x_21+w_2x_22+.....w_nx_2n\\ ....\\ y_n = w_1x_n1+w_2x_n2+.....w_nx_nn y1=w1x11+w2x12+.....wnx1ny2=w1x21+w2x22+.....wnx2n....yn=w1xn1+w2xn2+.....wnxnn

最小二乘法

定义:通过最小化误差的平方和寻找数据的最佳函数匹配。

公式1:h(x)是预测值,也称为模型、算法、方程,y是真实值(下同)
J ( θ ) = 1 2 ∑ i = 0 n ( h θ ( x i ) − y i ) 2 J ( θ ) 是损失函数的值 θ 是线性回归模型的参数(通常包括斜率和截距) h θ ( x i ) 表示模型对第 i 个训练样本的预测值 y i 第 i 个训练样本的实际目标值 J(\theta)=\frac{1}{2}\sum_{i=0}^{n}(h_\theta(x_i)-y_i)^2\\ J(\theta)是损失函数的值\\ \theta是线性回归模型的参数(通常包括斜率和截距)\\ h_\theta(x_i)表示模型对第 i 个训练样本的预测值\\ y_i第 i 个训练样本的实际目标值 J(θ)=21i=0n(hθ(xi)yi)2J(θ)是损失函数的值θ是线性回归模型的参数(通常包括斜率和截距)hθ(xi)表示模型对第i个训练样本的预测值yii个训练样本的实际目标值
公式2:
J ( θ ) = 1 2 ( X θ − y ) T ( X θ − y ) J(\theta)=\frac{1}{2}(X\theta-y)^T(X\theta-y) J(θ)=21(y)T(y)
如何求解h(x)中的权重参数w?或者说如何求解θ?

公式:
θ / W = ( X T X ) − 1 X T y \theta/W=(X^TX)^{-1}X^Ty θ/W=(XTX)1XTy

最小二乘法推导的相关知识

误差

ε i = ∣ y i − y ^ ∣ = ∣ y i − W T X i ∣ y i : 实际值 y ^ : 预测值 \varepsilon_{i}=|y_{i}-\hat{y}|=|y_{i}-W^TX_{i}|\\ y_{i}:实际值\\ \hat{y}:预测值 εi=yiy^=yiWTXiyi:实际值y^:预测值

注:在机器学习中,假设误差符合均值为0,方差为定值的高斯分布。

最大似然估计

定义:求估计量的方法,明确地使用概率模型,其目标是寻找能够以较高概率产生观察数据的系统发生树。是一类完全基于统计的系统发生树重建方法的代表。

有存放取样公式:
P = C m n ( a A ) n ( A − a A ) m − n n : 取样次数 m : 总次数 a : 抽取的样本个数 A : 样本总数 P=C_{m}^{n}(\frac{a}{A})^n(\frac{A-a}{A})^{m-n}\\ n:取样次数 m:总次数 a:抽取的样本个数 A:样本总数 P=Cmn(Aa)n(AAa)mnn:取样次数m:总次数a:抽取的样本个数A:样本总数

高斯分布-概率密度函数

公式:
正态分布 N ( μ , δ 2 )的概率密度函数 f ( x ) = 1 2 π δ e − ( x − μ ) 2 2 δ 2 正态分布N(\mu,\delta^2)的概率密度函数\\ f(x)=\frac{1}{\sqrt{2\pi}\delta}e^{-\frac{(x-\mu)^2}{2\delta^2}} 正态分布Nμ,δ2)的概率密度函数f(x)=2π δ1e2δ2(xμ)2
图像如下:

在这里插入图片描述

公式转换:
P = f ( x ∣ μ , δ 2 ) = 1 2 π δ e − ( x − μ ) 2 2 δ 2 P=f(x|\mu,\delta^2)=\frac{1}{\sqrt{2\pi}\delta}e^{-\frac{(x-\mu)^2}{2\delta^2}} P=f(xμ,δ2)=2π δ1e2δ2(xμ)2
带入误差均为为零可得下式:
P = f ( x ∣ 0 , δ 2 ) = 1 2 π δ e − ε 2 2 δ 2 P=f(x|0,\delta^2)=\frac{1}{\sqrt{2\pi}\delta}e^{-\frac{\varepsilon^2}{2\delta^2}} P=f(x∣0,δ2)=2π δ1e2δ2ε2
有误差总似然,带入ε,即下式:
ε = ∣ y i − W T X i ∣ 则可得 P = ∏ i = 0 n f ( x ∣ 0 , δ 2 ) = ∏ i = 0 n 1 2 π δ e − ( y i − W T X i ) 2 2 δ 2 W T 为未知变量,即方程系数,其余为常量 \varepsilon=|y_{i}-W^TX_{i}|\\ 则可得\\ P=\prod_{i=0}^{n} f(x|0,\delta^2)=\prod_{i=0}^{n}\frac{1}{\sqrt{2\pi}\delta}e^{-\frac{(y_{i}-W^TX_{i})^2}{2\delta^2}}\\ W^T为未知变量,即方程系数,其余为常量 ε=yiWTXi则可得P=i=0nf(x∣0,δ2)=i=0n2π δ1e2δ2(yiWTXi)2WT为未知变量,即方程系数,其余为常量
由于累乘对人还是计算机都不是很友好,故通过对数运算,将累乘转换成累加:
log ⁡ e ( P W ) = log ⁡ w ( ∏ i = 0 n 1 2 π δ e ( − ( y i − W T X i ) 2 2 δ 2 ) ) log ⁡ e ( P W ) = ∑ i = 0 n log ⁡ e ( 1 2 π δ e ( − ( y i − W T X i ) 2 2 δ 2 ) ) log ⁡ e ( P W ) = ∑ i = 0 n ( log ⁡ e 1 2 π δ − 1 2 δ 2 ( y i − W T X i ) 2 ) 求解最大似然估计,故需要下式最小,即: L ( W ) = 1 2 ∑ i = 0 n ( y i − W T X i ) 2 \log_{e}(P_{W})=\log_{w}(\prod_{i=0}^{n}\frac{1}{\sqrt{2\pi}\delta}e^(-\frac{(y_i-W^TX_{i})^2}{2\delta^2}))\\ \log_{e}(P_{W})=\sum_{i=0}^{n}\log_{e}(\frac{1}{\sqrt{2\pi}\delta}e^(-\frac{(y_i-W^TX_{i})^2}{2\delta^2}))\\ \log_{e}(P_{W})=\sum_{i=0}^{n}(\log_{e}\frac{1}{\sqrt{2\pi}\delta}-\frac{1}{2\delta^2}(y_{i}-W^TX_{i})^2)\\ 求解最大似然估计,故需要下式最小,即:\\ L(W) = \frac{1}{2}\sum_{i=0}^{n}(y^i-W^TX_{i})^2 loge(PW)=logw(i=0n2π δ1e(2δ2(yiWTXi)2))loge(PW)=i=0nloge(2π δ1e(2δ2(yiWTXi)2))loge(PW)=i=0n(loge2π δ12δ21(yiWTXi)2)求解最大似然估计,故需要下式最小,即:L(W)=21i=0n(yiWTXi)2
L(W)即是最小二乘法的表达式。

正规方程的推导

根据最小二乘法公式本身推算得出正规方程

首先根据最小二乘法的线性代数表示可得下式:
J ( θ ) = 1 2 ( X θ − y ) T ( X θ − y ) 化简可得 J ( θ ) = 1 2 ( θ T X T X θ − θ T X T y − y T X θ + y T y ) J(\theta)=\frac{1}{2}(X\theta-y)^T(X\theta-y)\\ 化简可得\\ J(\theta)=\frac{1}{2}(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta+y^Ty) J(θ)=21(y)T(y)化简可得J(θ)=21(θTXTθTXTyyT+yTy)
对其求导可得下式:
J ’ ( θ ) = 1 2 ( X T X θ + ( θ T X T X ) T − X T y − ( y T X ) T ) J ’ ( θ ) = 1 2 ( X T X θ + X T X θ − X T y − X T y ) J ’ ( θ ) = 1 2 ( 2 X T X θ − 2 X T y ) J ’ ( θ ) = X T ( X θ − y ) J^{’}(\theta)=\frac{1}{2}(X^TX\theta+(\theta^TX^TX)^T-X^Ty-(y^TX)^T)\\ J^{’}(\theta)=\frac{1}{2}(X^TX\theta+X^TX\theta-X^Ty-X^Ty)\\ J^{’}(\theta)=\frac{1}{2}(2X^TX\theta-2X^Ty)\\ J^{’}(\theta)=X^T(X\theta-y) J(θ)=21(XT+(θTXTX)TXTy(yTX)T)J(θ)=21(XT+XTXTyXTy)J(θ)=21(2XT2XTy)J(θ)=XT(y)
因为我们要求函数J的最小值,因此其导数要为0,可得下式
J ’ ( θ ) = 0 = X T ( X θ − y ) 故可得 θ = ( X T X ) − 1 X T y J^{’}(\theta)=0=X^T(X\theta-y)\\ 故可得\\ \theta=(X^TX)^{-1}X^Ty J(θ)=0=XT(y)故可得θ=(XTX)1XTy

测试正规方程

内容:

气温会随着海拔高度的升高而降低,,我们可以通过测量不同海拔高度的气温来预测海拔高度和气温的关系。我们假设海拔高度和气温的关系可以使用如下公式表达:v(气温)= w * x(海拔)+b,提供了在9个不同高度测量的气温值,请你根据今天学习的线性回归(正轨方程)方法预测w和b的值。根据这个公式,我们预测一下在8000米的海拔,气温会是多少?

heighttemperature
012.83
50010.19
10005.50
15002.85
2000-0.70
2500-4.06
3000-7.12
3500-10.06
4000-13.21
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

height = np.array([[0],[500],[1000],[1500],[2000],[2500],[3000],[3500],[4000]])
temperature = np.array([12.83, 10.19, 5.50, 2.85, -0.70, -4.06, -7.12, -10.06, -13.21])
display(height,temperature)

# 法一
# 计算数据点的数量
n = len(height)
# 计算斜率 m
m = (n * np.sum(height * temperature) - np.sum(height) * np.sum(temperature)) / (n * np.sum(height**2) - (np.sum(height))**2)
# 计算截距 b
b = (np.sum(temperature) - m * np.sum(height)) / n
# 使用计算得出的斜率和截距进行预测
height_to_predict = 8000
temperature1 = m * height_to_predict + b
print("预测高度为8000时的温度:", temperature1)


# 法二
model = LinearRegression()
# 注意:LinearRegression 模型在拟合时要求输入特征矩阵是二维的
model.fit(height,temperature)
temperature2 = model.predict([[8000]])
# temperature2 = -39.832


# 错解:不符合最小二乘法,他是y=kx+b,而不是单一的计算权重w
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

height = np.array([[0],[500],[1000],[1500],[2000],[2500],[3000],[3500],[4000]])
temperature = np.array([12.83, 10.19, 5.50, 2.85, -0.70, -4.06, -7.12, -10.06, -13.21])
display(height,temperature)
W = np.linalg.inv(height.T.dot(height)).dot(height.T).dot(temperature)
temperature1 = W * 8000
# temperature1 = -16.64156863

#  ————————————改错——————————
import numpy as np

height = np.array([0, 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000])
temperature = np.array([12.83, 10.19, 5.50, 2.85, -0.70, -4.06, -7.12, -10.06, -13.21])

# 创建一个新的矩阵 X,包括高度和截距
X = np.column_stack((height, np.ones_like(height)))

# 使用矩阵运算计算 W
W = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(temperature)

# W 的第一个值即为斜率 m,第二个值即为截距 b
m = W[0]
b = W[1]

print("斜率 m:", m)
print("截距 b:", b)
y = 8000 * m + b
# 注意:np.column_stack() 函数用于将给定的一维数组以列的形式堆叠起来,创建一个二维数组。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值