逼近理论及应用精解【10】

文章目录

回归

线性回归

一元线性回归
基础
  1. 方程: y = a + b x 2. 对于一组 x i 数据 ( n 个数据 ) , ( x 1 , x 2 , . . . . x n ) ,对应方程 1 y i = a + b x i ,这里的一组 x i 和 y i 就构成了样本数据 3. 均方误差(损失函数) E = ∑ i = 1 n ( y i − y ^ i ) 2 y ^ i 为根据参数 a 和 b 计算的方程 1 中的 y 而 y i 是样本数据实际的 y 值。 均方误差(损失)最小化成为我们的目标 我们可以借此找到方程中 a 和 b 两个参数 所谓的找到也只能是估计。因为: 4. 在实际中,线性关系模型没有完全理想化,即: y = a + b x + e 其中, y 是因变量, x 是自变量, a 是截距项, b 是斜率项, e 是误差项 完全理想化的时候是 e = 0 ,则 y = a + b x ,此时找到的参数 a 和 b 就是真正的参数,而不是估计或预测参数。 5. 为了实现损失最小化,也就是说力求让 e → 0 , 可以对 E 计算偏导数 minimize E = ∑ i = 1 n ( y i − ( a + b x i ) ) 2 = ∑ i = 1 n ( y i − a − b x i ) 2 对 E 分别求 a 和 b 的偏导数,并令其为零: ∂ E ∂ a = 2 ∑ i = 1 n ( y i − a − b x i ) ( − 1 ) = 0 ∂ E ∂ b = 2 ∑ i = 1 n x i ( y i − a − b x i ) ( − x i ) = 0 求解方程,得解如下: b = n ∑ x i y i − ∑ x i ∑ y i n ∑ x i 2 − ( ∑ x i ) 2 a = ∑ y i − b ∑ x i n 6. 这个到底是如何推导出来的呢?实质是求解一个二元线性方程组 ( 1 ) 2 ∑ i = 1 n ( y i − a − b x i ) ( − 1 ) = 0 = > − 2 ∑ i = 1 n ( y i − a − b x i ) = 0 = > ∑ i = 1 n ( y i − a − b x i ) = 0 = > ∑ i = 1 n y i − ∑ i = 1 n a − ∑ i = 1 n b x i = 0 = > ∑ i = 1 n a + ∑ i = 1 n b x i = ∑ i = 1 n y i = > ∑ i = 1 n a + ∑ i = 1 n x i b = ∑ i = 1 n y i = > ∑ i = 1 n a + b ∑ i = 1 n x i = ∑ i = 1 n y i = > n a + b ∑ i = 1 n x i = ∑ i = 1 n y i 到了这一步,一定明确了, a 和 b 才是自变量!!!!! ( 2 ) ∑ i = 1 n x i ( y i − ( a + b x i ) ) = 0 = > ∑ i = 1 n x i y i − ∑ i = 1 n x i a − ∑ i = 1 n b x i 2 = 0 = > ∑ i = 1 n x i a + ∑ i = 1 n b x i 2 = ∑ i = 1 n x i y i = > ∑ i = 1 n x i a + ∑ i = 1 n x i 2 b = ∑ i = 1 n x i y i = > a ∑ i = 1 n x i + b ∑ i = 1 n x i 2 = ∑ i = 1 n x i y i ( 3 ) 方程组转换为以下 { n a + b ∑ i = 1 n x i = ∑ i = 1 n y i a ∑ i = 1 n x i + b ∑ i = 1 n x i 2 = ∑ i = 1 n x i y i ( 4 ) 系数行列式 ∣ n ∑ i = 1 n x i ∑ i = 1 n x i ∑ i = 1 n x i 2 ∣ 常数项 ∣ ∑ i = 1 n y i ∑ i = 1 n x i y i ∣ ( 5 ) Δ = ∣ n ∑ i = 1 n x i ∑ i = 1 n x i ∑ i = 1 n x i 2 ∣ = n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 Δ a = ∣ ∑ i = 1 n y i ∑ i = 1 n x i ∑ i = 1 n x i y i ∑ i = 1 n x i 2 ∣ = ∑ i = 1 n y i ∑ i = 1 n x i 2 − ∑ i = 1 n x i ∑ i = 1 n x i y i Δ b = ∣ n ∑ i = 1 n y i ∑ i = 1 n x i ∑ i = 1 n x i y i ∣ = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i ( 6 ) b = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 a = ∑ i = 1 n y i ∑ i = 1 n x i 2 − ∑ i = 1 n x i ∑ i = 1 n x i y i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 另外, n a + b ∑ i = 1 n x i = ∑ i = 1 n y i = > a = ∑ y i − b ∑ x i n a 和 b 求解完毕。 1.方程:y=a+bx \\2.对于一组x_i数据(n个数据),(x_1,x_2,....x_n),对应方程1 \\y_i=a+bx_i,这里的一组x_i和y_i就构成了样本数据 \\3.均方误差(损失函数)E = \sum_{i=1}^{n}(y_i - \hat{y}i)^2 \\\hat{y}i为根据参数a和b计算的方程1中的y \\而y_i是样本数据实际的y值。 \\均方误差(损失)最小化成为我们的目标 \\我们可以借此找到方程中a和b两个参数 \\所谓的找到也只能是估计。因为: \\4.在实际中,线性关系模型没有完全理想化,即: \\y = a + bx + e \\其中,y是因变量,x 是自变量,a是截距项,b是斜率项,e是误差项 \\完全理想化的时候是e=0,则y=a+bx,此时找到的参数a和b就是真正的参数,而不是估计或预测参数。 \\5.为了实现损失最小化, 也就是说力求让e\rightarrow 0, \\可以对E计算偏导数 \\\text{minimize} \quad E = \sum{i=1}^{n} (y_i - (a + bx_i))^2=\sum{i=1}^{n} (y_i - a- bx_i)^2 \\对 E 分别求 a 和 b的偏导数,并令其为零: \\ \frac{\partial E}{\partial a} = 2\sum_{i=1}^{n}(y_i - a - bx_i)(-1) = 0 \\ \frac{\partial E}{\partial b} = 2\sum_{i=1}^{n}x_i(y_i - a -bx_i)(-x_i)= 0 \\求解方程,得解如下: \\b= \frac{n \sum x_iy_i - \sum x_i \sum y_i}{n \sum x_i^2 - (\sum x_i)^2} \\a = \frac{\sum y_i - b \sum x_i}{n} \\6.这个到底是如何推导出来的呢?实质是求解一个二元线性方程组 \\(1) 2\sum_{i=1}^{n}(y_i - a - bx_i)(-1) = 0=> \\-2\sum_{i=1}^{n}(y_i - a - bx_i) = 0=>\sum_{i=1}^{n}(y_i - a - bx_i) = 0 \\=>\sum_{i=1}^{n}y_i - \sum_{i=1}^{n}a-\sum_{i=1}^{n} bx_i= 0 \\=>\sum_{i=1}^{n}a+\sum_{i=1}^{n} bx_i=\sum_{i=1}^{n}y_i=>\sum_{i=1}^{n}a+\sum_{i=1}^{n} x_ib=\sum_{i=1}^{n}y_i \\=>\sum_{i=1}^{n}a+b\sum_{i=1}^{n}x_i =\sum_{i=1}^{n}y_i \\=>na+b\sum_{i=1}^{n}x_i =\sum_{i=1}^{n}y_i \\到了这一步,一定明确了,a和b才是自变量!!!!! \\(2)\sum_{i=1}^{n}x_i(y_i - (a +bx_i)) = 0=>\sum_{i=1}^{n}x_iy_i - \sum_{i=1}^{n}x_ia - \sum_{i=1}^{n}bx_i^2 = 0 \\=>\sum_{i=1}^{n}x_ia+\sum_{i=1}^{n}bx_i^2=\sum_{i=1}^{n}x_iy_i =>\sum_{i=1}^{n}x_ia+\sum_{i=1}^{n}x_i^2b=\sum_{i=1}^{n}x_iy_i \\=>a\sum_{i=1}^{n}x_i+b\sum_{i=1}^{n}x_i^2=\sum_{i=1}^{n}x_iy_i \\(3)方程组转换为以下 \\\begin{cases} na+b\sum_{i=1}^{n}x_i =\sum_{i=1}^{n}y_i \\a\sum_{i=1}^{n}x_i+b\sum_{i=1}^{n}x_i^2=\sum_{i=1}^{n}x_iy_i \end{cases} \\(4)系数行列式 \begin{vmatrix} n & \sum_{i=1}^{n}x_i \\ \sum_{i=1}^{n}x_i & \sum_{i=1}^{n}x_i^2 \end{vmatrix} \\常数项 \begin{vmatrix} \sum_{i=1}^{n}y_i \\\sum_{i=1}^{n}x_iy_i \end{vmatrix} \\(5)\Delta=\begin{vmatrix} n & \sum_{i=1}^{n}x_i \\ \sum_{i=1}^{n}x_i & \sum_{i=1}^{n}x_i^2 \end{vmatrix}=n \sum_{i=1}^{n}x_i^2- (\sum_{i=1}^{n}x_i )^2 \\\Delta_a=\begin{vmatrix} \sum_{i=1}^{n}y_i & \sum_{i=1}^{n}x_i \\ \sum_{i=1}^{n}x_iy_i & \sum_{i=1}^{n}x_i^2 \end{vmatrix}=\sum_{i=1}^{n}y_i \sum_{i=1}^{n}x_i^2- \sum_{i=1}^{n}x_i\sum_{i=1}^{n}x_iy_i \\\Delta_b=\begin{vmatrix} n & \sum_{i=1}^{n}y_i \\ \sum_{i=1}^{n}x_i & \sum_{i=1}^{n}x_iy_i \end{vmatrix}=n\sum_{i=1}^{n}x_iy_i-\sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i \\(6)b=\frac {n\sum_{i=1}^{n}x_iy_i-\sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i} {n \sum_{i=1}^{n}x_i^2- (\sum_{i=1}^{n}x_i )^2} \\a=\frac {\sum_{i=1}^{n}y_i \sum_{i=1}^{n}x_i^2- \sum_{i=1}^{n}x_i\sum_{i=1}^{n}x_iy_i} {n \sum_{i=1}^{n}x_i^2- (\sum_{i=1}^{n}x_i )^2} \\另外,na+b\sum_{i=1}^{n}x_i =\sum_{i=1}^{n}y_i=>a= \frac{\sum y_i - b \sum x_i}{n} \\a和b求解完毕。 1.方程:y=a+bx2.对于一组xi数据(n个数据),(x1,x2,....xn),对应方程1yi=a+bxi,这里的一组xi和yi就构成了样本数据3.均方误差(损失函数)E=i=1∑n(yi−y^i)2y^i为根据参数a和b计算的方程1中的y而yi是样本数据实际的y值。均方误差(损失)最小化成为我们的目标我们可以借此找到方程中a和b两个参数所谓的找到也只能是估计。因为:4.在实际中,线性关系模型没有完全理想化,即:y=a+bx+e其中,y是因变量,x是自变量,a是截距项,b是斜率项,e是误差项完全理想化的时候是e=0,则y=a+bx,此时找到的参数a和b就是真正的参数,而不是估计或预测参数。5.为了实现损失最小化,也就是说力求让e→0,可以对E计算偏导数minimizeE=i=1∑n(yi−(a+bxi))2=i=1∑n(yi−a−bxi)2对E分别求a和b的偏导数,并令其为零:∂a∂E=2i=1∑n(yi−a−bxi)(−1)=0∂b∂E=2i=1∑nxi(yi−a−bxi)(−xi)=0求解方程,得解如下:b=n∑xi2−(∑xi)2n∑xiyi−∑xi∑yia=n∑yi−b∑xi6.这个到底是如何推导出来的呢?实质是求解一个二元线性方程组(1)2i=1∑n(yi−a−bxi)(−1)=0=>−2i=1∑n(yi−a−bxi)=0=>i=1∑n(yi−a−bxi)=0=>i=1∑nyi−i=1∑na−i=1∑nbxi=0=>i=1∑na+i=1∑nbxi=i=1∑nyi=>i=1∑na+i=1∑nxib=i=1∑nyi=>i=1∑na+bi=1∑nxi=i=1∑nyi=>na+bi=1∑nxi=i=1∑nyi到了这一步,一定明确了,a和b才是自变量!!!!!(2)i=1∑nxi(yi−(a+bxi))=0=>i=1∑nxiyi−i=1∑nxia−i=1∑nbxi2=0=>i=1∑nxia+i=1∑nbxi2=i=1∑nxiyi=>i=1∑nxia+i=1∑nxi2b=i=1∑nxiyi=>ai=1∑nxi+bi=1∑nxi2=i=1∑nxiyi(3)方程组转换为以下{na+b∑i=1nxi=∑i=1nyia∑i=1nxi+b∑i=1nxi2=∑i=1nxiyi(4)系数行列式 n∑i=1nxi∑i=1nxi∑i=1nxi2 常数项 ∑i=1nyi∑i=1nxiyi (5)Δ= n∑i=1nxi∑i=1nxi∑i=1nxi2 =ni=1∑nxi2−(i=1∑nxi)2Δa= ∑i=1nyi∑i=1nxiyi∑i=1nxi∑i=1nxi2 =i=1∑nyii=1∑nxi2−i=1∑nxii=1∑nxiyiΔb= n∑i=1nxi∑i=1nyi∑i=1nxiyi =ni=1∑nxiyi−i=1∑nyii=1∑nxi(6)b=n∑i=1nxi2−(∑i=1nxi)2n∑i=1nxiyi−∑i=1nyi∑i=1nxia=n∑i=1nxi2−(∑i=1nxi)2∑i=1nyi∑i=1nxi2−∑i=1nxi∑i=1nxiyi另外,na+bi=1∑nxi=i=1∑nyi=>a=n∑yi−b∑xia和b求解完毕。

第6步的理论基础可见高等数学精解【1】中的二阶行列式,其实就是利用了克莱姆法则

但是还存在如下这样的简化计算公式,又是如何得到的?
b = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 a = ∑ y i − b ∑ x i n = y ˉ − b x ˉ b = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{n} (x_i - \bar{x})^2} \\a= \frac{\sum y_i - b \sum x_i}{n} =\bar y-b\bar x b=∑i=1n(xi−xˉ)2∑i=1n(xi−xˉ)(yi−yˉ)a=n∑yi−b∑xi=yˉ−bxˉ

1.接着上面的基础继续推导
b = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 = 1 n ( n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i ) 1 n ( n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 ) = ∑ i = 1 n x i y i − 1 n ∑ i = 1 n y i ∑ i = 1 n x i ∑ i = 1 n x i 2 − 1 n ( ∑ i = 1 n x i ) 2 = ∑ i = 1 n x i y i − y ˉ ∑ i = 1 n x ∑ i = 1 n x i 2 − x ˉ ∑ i = 1 n x i = ∑ i = 1 n x i y i − n x ˉ y ˉ ∑ i = 1 n x i 2 − n ( x ˉ ) 2 a = ∑ y i − b ∑ x i n = y ˉ − b x ˉ b=\frac {n\sum_{i=1}^{n}x_iy_i-\sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i} {n \sum_{i=1}^{n}x_i^2- (\sum_{i=1}^{n}x_i )^2}=\frac {\frac1 n (n\sum_{i=1}^{n}x_iy_i-\sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i)} {\frac 1 n (n \sum_{i=1}^{n}x_i^2- (\sum_{i=1}^{n}x_i )^2)} \\=\frac {\sum_{i=1}^{n}x_iy_i-\frac 1 n\sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i} {\sum_{i=1}^{n}x_i^2- \frac 1 n(\sum_{i=1}^{n}x_i )^2} \\=\frac {\sum_{i=1}^{n}x_iy_i-\bar y \sum_{i=1}^{n}x} {\sum_{i=1}^{n}x_i^2- \bar x \sum_{i=1}^{n}x_i} \\=\frac {\sum_{i=1}^{n}x_iy_i-n\bar x \bar y} {\sum_{i=1}^{n}x_i^2-n (\bar x)^2} \\a= \frac{\sum y_i - b \sum x_i}{n} =\bar y-b\bar x b=n∑i=1nxi2−(∑i=1nxi)2n∑i=1nxiyi−∑i=1nyi∑i=1nxi=n1(n∑i=1nxi2−(∑i=1nxi)2)n1(n∑i=1nxiyi−∑i=1nyi∑i=1nxi)=∑i=1nxi2−n1(∑i=1nxi)2∑i=1nxiyi−n1∑i=1nyi∑i=1nxi=∑i=1nxi2−xˉ∑i=1nxi∑i=1nxiyi−yˉ∑i=1nx=∑i=1nxi2−n(xˉ)2∑i=1nxiyi−nxˉyˉa=n∑yi−b∑xi=yˉ−bxˉ

按照上述公式julia计算系数

julia 复制代码
# 生成随机数据 
using Random 
using Statistics
Random.seed!(123)  
x = rand(30) *50 
y = 5*x .+ randn(30)
  
# 定义线性回归函数  
function linear_regression(x, y)  
    n = length(x)  
    x_mean = mean(x)  
    y_mean = mean(y)  
    b = (sum(x.*y) -n*x_mean*y_mean)/ (sum(x.^2) -n*(x_mean^2))
    a = y_mean - b * x_mean  
    return a, b  
end  
  
# 计算回归系数  
a, b = linear_regression(x, y)  
println("y=$a+$b*x")
bash 复制代码
y=0.06200648282067789+4.994947056080488*x

b = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 = ∑ i = 1 n x i y i − n x ˉ y ˉ ∑ i = 1 n x i − n x ˉ 2 = ∑ i = 1 n x i y i − n x ˉ y ˉ ∑ i = 1 n x i 2 − n ( x ˉ ) 2 a = ∑ y i − b ∑ x i n = y ˉ − b x ˉ b = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{n} (x_i - \bar{x})^2} =\frac {\sum_{i=1}^{n} x_iy_i-n\bar x \bar y} {\sum_{i=1}^{n} x_i -n\bar{x}^2} \\=\frac {\sum_{i=1}^{n}x_iy_i-n \bar x \bar y} {\sum_{i=1}^{n}x_i^2-n (\bar x)^2} \\a= \frac{\sum y_i - b \sum x_i}{n} =\bar y-b\bar x b=∑i=1n(xi−xˉ)2∑i=1n(xi−xˉ)(yi−yˉ)=∑i=1nxi−nxˉ2∑i=1nxiyi−nxˉyˉ=∑i=1nxi2−n(xˉ)2∑i=1nxiyi−nxˉyˉa=n∑yi−b∑xi=yˉ−bxˉ

斜率的公式

在线性回归 y = β 0 + β 1 x y=\beta_0+\beta_1x y=β0+β1x中,斜率( β 1 \beta_1 β1)的公式是通过最小二乘法推导出来的,它表示了自变量 x x x和因变量 y y y之间的线性关系的强度和方向。斜率公式的标准形式为:

β 1 = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 \beta_1 = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{n} (x_i - \bar{x})^2} β1=∑i=1n(xi−xˉ)2∑i=1n(xi−xˉ)(yi−yˉ)

其中:

  • n n n 是数据点的数量。
  • x i x_i xi 和 y i y_i yi 是第 i i i 个数据点的自变量和因变量值。
  • x ˉ \bar{x} xˉ 和 y ˉ \bar{y} yˉ 分别是 x x x 和 y y y 的均值,即 x ˉ = 1 n ∑ i = 1 n x i \bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i xˉ=n1∑i=1nxi 和 y ˉ = 1 n ∑ i = 1 n y i \bar{y} = \frac{1}{n} \sum_{i=1}^{n} y_i yˉ=n1∑i=1nyi。

这个公式可以通过对残差平方和 S ( β 0 , β 1 ) S(\beta_0, \beta_1) S(β0,β1) 求偏导数并令其为零来推导出来,但在实际应用中,我们通常直接使用这个公式来计算斜率。

斜率 β 1 \beta_1 β1 的解释是:当 x x x 增加一个单位时, y y y 平均增加 β 1 \beta_1 β1 个单位(在假设其他因素不变的情况下)。如果 β 1 > 0 \beta_1 > 0 β1>0,则 x x x 和 y y y 之间存在正相关关系;如果 β 1 < 0 \beta_1 < 0 β1<0,则存在负相关关系;如果 β 1 = 0 \beta_1 = 0 β1=0,则 x x x 和 y y y 之间没有线性关系(尽管它们之间可能存在其他类型的关系)。

注意:虽然这个公式是线性回归中斜率的标准计算方法,但它假设了误差项满足某些统计假设(如独立同分布、正态分布等)。在实际应用中,如果这些假设不成立,可能需要采用其他方法或模型来进行分析。

克莱姆法则(Cramer's Rule)

又译克拉默法则,是线性代数中一个关于求解线性方程组的定理。它最早由瑞士数学家加布里埃尔·克莱姆(Gabriel Cramer)于1750年在其著作《线性代数分析导言》中提出并证明。该法则主要适用于变量和方程数目相等的线性方程组,即n元线性方程组,为这类方程组的求解提供了一种特殊的方法。

一、克莱姆法则的基本内容

下面内容来自于文心一言的自动生成内容

克莱姆法则的基本思想是,如果线性方程组的系数矩阵的行列式不为零,那么方程组有唯一解,并且解可以通过计算行列式的比值来得到。具体来说,对于n元线性方程组:
{ a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 ⋮ a n 1 x 1 + a n 2 x 2 + ⋯ + a n n x n = b n \begin{cases} a_{11}x_1 + a_{12}x_2 + \cdots + a_{1n}x_n = b_1 \\ a_{21}x_1 + a_{22}x_2 + \cdots + a_{2n}x_n = b_2 \\ \vdots \\ a_{n1}x_1 + a_{n2}x_2 + \cdots + a_{nn}x_n = b_n \end{cases} ⎩ ⎨ ⎧a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2⋮an1x1+an2x2+⋯+annxn=bn

如果系数矩阵A的行列式|A|≠0,则方程组有唯一解,且解为:

x i = D i D , i = 1 , 2 , ⋯   , n x_i = \frac{D_i}{D}, \quad i=1,2,\cdots,n xi=DDi,i=1,2,⋯,n

其中,D是系数矩阵A的行列式, D i D_i Di是将系数矩阵A的第i列替换为常数项向量b后得到的新矩阵的行列式。

二、克莱姆法则的适用条件
  • 方程组和未知数数量相等:克莱姆法则仅适用于变量和方程数目相等的线性方程组,即n元线性方程组。
  • 系数矩阵行列式不为零:只有当系数矩阵的行列式不为零时,克莱姆法则才能给出方程组的唯一解。如果行列式为零,则方程组可能无解、有无数解或有唯一解但不能通过克莱姆法则求解。
三、克莱姆法则的优缺点

优点

  • 克莱姆法则给出了方程组解与系数的明确关系,具有理论上的重要性。
  • 在某些特殊情况下,如系数矩阵较为简单时,克莱姆法则的求解过程可能相对直观。

缺点

  • 计算量较大:对于n元线性方程组,需要计算n+1个n阶行列式,计算量随n的增加而迅速增加。
  • 数值稳定性差:克莱姆法则在数值计算上可能不稳定,特别是对于系数矩阵接近奇异或病态的情况。
  • 实际应用受限:由于计算量大和数值稳定性差的问题,克莱姆法则在实际应用中通常不如其他数值方法(如高斯消元法、LU分解等)高效和稳定。
四、总结

克莱姆法则是线性代数中一个重要的定理,它为求解n元线性方程组提供了一种特殊的方法。然而,由于其计算量大和数值稳定性差的问题,克莱姆法则在实际应用中受到了一定的限制。在实际问题中,通常需要根据具体情况选择合适的数值方法来求解线性方程组。

导数与极值的问题

下面内容来自于文心一言的自动生成内容

  • 偏导数为0的点在多变量函数(如二元函数、三元函数等)
    这些点通常被称为驻点、临界点或平稳点,类似于单变量函数中的情况。

对于一个二元函数 f ( x , y ) f(x, y) f(x,y),其偏导数 ∂ f ∂ x \frac{\partial f}{\partial x} ∂x∂f 和 ∂ f ∂ y \frac{\partial f}{\partial y} ∂y∂f 分别表示函数在 x x x 方向和 y y y 方向上的变化率。当这两个偏导数在某个点 ( x 0 , y 0 ) (x_0, y_0) (x0,y0) 处都等于0时,即:

∂ f ∂ x ( x 0 , y 0 ) = 0 , ∂ f ∂ y ( x 0 , y 0 ) = 0 \frac{\partial f}{\partial x}(x_0, y_0) = 0, \quad \frac{\partial f}{\partial y}(x_0, y_0) = 0 ∂x∂f(x0,y0)=0,∂y∂f(x0,y0)=0

我们称该点 ( x 0 , y 0 ) (x_0, y_0) (x0,y0) 为函数 f ( x , y ) f(x, y) f(x,y) 的一个驻点或临界点。

需要注意的是,与单变量函数类似,偏导数为0的点并不一定是极值点或最值点。它们可能是局部最大值点、局部最小值点、鞍点(即在一个方向上是局部最大值,在另一个方向上是局部最小值)或拐点(在二维空间中,拐点通常与二阶偏导数及其混合偏导数的符号变化有关)。

为了确定一个驻点是否是极值点(以及是局部最大值点还是局部最小值点),通常需要进一步分析该点处的二阶偏导数(即Hessian矩阵)或进行更高阶的测试(如泰勒展开)。然而,即使进行了这些分析,有时也可能无法确定一个驻点的确切性质,特别是当函数在该点附近的行为非常复杂时。

在三维或更高维度的函数中,偏导数为0的点同样称为驻点或临界点,并且需要类似的分析来确定它们的性质。不过,随着维度的增加,分析和计算的复杂性也会显著增加。

  • 二次二元函数偏导数

对于二次二元函数 f ( x , y ) = a x 2 + b x y + c y 2 + d x + e y + f f(x, y) = ax^2 + bxy + cy^2 + dx + ey + f f(x,y)=ax2+bxy+cy2+dx+ey+f,其中 a , b , c , d , e , f a, b, c, d, e, f a,b,c,d,e,f 是常数,并且 a ≠ 0 a \neq 0 a=0 或 c ≠ 0 c \neq 0 c=0 以确保它是真正的二次函数(否则它可能退化为一次函数或常数函数)。

首先,我们求该函数关于 x x x 和 y y y 的偏导数:

∂ f ∂ x = 2 a x + b y + d \frac{\partial f}{\partial x} = 2ax + by + d ∂x∂f=2ax+by+d

∂ f ∂ y = b x + 2 c y + e \frac{\partial f}{\partial y} = bx + 2cy + e ∂y∂f=bx+2cy+e

然后,我们令这两个偏导数都等于0,以找到可能的驻点(或临界点):

2 a x + b y + d = 0 2ax + by + d = 0 2ax+by+d=0

b x + 2 c y + e = 0 bx + 2cy + e = 0 bx+2cy+e=0

这是一个包含两个方程的线性方程组,其解(如果存在的话)将是 x x x 和 y y y 的值,对应于函数 f ( x , y ) f(x, y) f(x,y) 的驻点。

为了解这个方程组,我们可以使用消元法、代入法或矩阵方法。这里,我简要说明一下消元法:

  1. 从第一个方程中解出 x x x(或 y y y,但这里我们选择解出 x x x):

x = − b y + d 2 a x = -\frac{by + d}{2a} x=−2aby+d

  1. 将这个结果代入第二个方程中,消去 x x x:

b ( − b y + d 2 a ) + 2 c y + e = 0 b\left(-\frac{by + d}{2a}\right) + 2cy + e = 0 b(−2aby+d)+2cy+e=0

  1. 解这个关于 y y y 的一元一次方程,找到 y y y 的值。

  2. 将找到的 y y y 值代回原方程(或解出的 x x x 表达式)中,找到对应的 x x x 值。

注意,方程组可能有唯一解、无穷多解(当且仅当方程组对应的矩阵行列式为0且方程组不矛盾时)或无解(当方程组矛盾时)。在二次二元函数的情况下,通常我们期望找到有限数量的驻点(可能是0个、1个、2个或更多,取决于具体的函数和系数)。

然而,对于二次二元函数来说,还有一个重要的性质是它可以表示为矩阵形式,并且其驻点(如果存在)可以通过求解该矩阵的特征值和特征向量来找到。但这种方法通常更高级,且在这里不展开详述。

最后,需要强调的是,即使找到了驻点,也需要进一步分析(如通过二阶偏导数构成的Hessian矩阵的行列式符号)来确定这些点是否是极值点(局部最大值、局部最小值)或鞍点。

julia实现
julia 复制代码
# 生成随机数据 
using Random 
using Statistics
Random.seed!(123)  
x = rand(30) *50 
y = 5*x .+ randn(30)
  
# 定义线性回归函数  
function linear_regression(x, y)  
    n = length(x)  
    x_mean = mean(x)  
    y_mean = mean(y)  
    b = sum((x .- x_mean) .* (y .- y_mean)) / sum((x .- x_mean) .^ 2)  
    a = y_mean - b * x_mean  
    return a, b  
end  
  
# 计算回归系数  
a, b = linear_regression(x, y)  
println("y=$a+$b*x")
bash 复制代码
y=0.06200648282066368+4.9949470560804885*x

最小二乘法原理

下面内容来自文心一言的自动生成

最小二乘法(Least Squares Method)是一种数学优化技术,它通过最小化误差的平方和来寻找数据的最佳函数匹配。以下是对最小二乘法的详细解释:

最小二乘法的原理

最小二乘法的主要思想是通过确定未知参数(通常是一个参数矩阵),来使得真实值和预测值的误差(也称残差)平方和最小。其计算公式为:

E = ∑ i = 1 n ( y i − y ^ i ) 2 其中, y i 是真实值, y ^ i 是对应的预测值。 在线性回归中,我们通常使用均方误差( M e a n S q u a r e d E r r o r , M S E )作为损失函数, 均方误差可以看作是最小二乘法中的 E 除以 m ( m 为样本个数)。 E = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 \\其中,y_i是真实值,\hat{y}_i是对应的预测值。 \\在线性回归中,我们通常使用均方误差(Mean Squared Error, MSE)作为损失函数, \\均方误差可以看作是最小二乘法中的 E 除以 m(m为样本个数)。 E=i=1∑n(yi−y^i)2其中,yi是真实值,y^i是对应的预测值。在线性回归中,我们通常使用均方误差(MeanSquaredError,MSE)作为损失函数,均方误差可以看作是最小二乘法中的E除以m(m为样本个数)。

线性回归中的最小二乘法

在线性回归问题中,我们通常使用最小二乘法来求解回归系数。对于一维特征的样本,拟合函数可以表示为:

h θ ( x ) = θ 0 + θ 1 x h_\theta(x) = \theta_0 + \theta_1x hθ(x)=θ0+θ1x

损失函数则为:
J ( θ 0 , θ 1 ) = ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) 2 = ∑ i = 1 m ( y ( i ) − θ 0 − θ 1 x ( i ) ) 2 要使损失函数最小,可以对损失函数求偏导,并令偏导等于 0 ,解出 θ 0 和 θ 1 。 J(\theta_0, \theta_1) = \sum_{i=1}^{m}(y^{(i)} - h_\theta(x^{(i)}))^2 = \sum_{i=1}^{m}(y^{(i)} - \theta_0 - \theta_1x^{(i)})^2 \\要使损失函数最小,可以对损失函数求偏导,并令偏导等于0,解出 \theta_0 和 \theta_1。 J(θ0,θ1)=i=1∑m(y(i)−hθ(x(i)))2=i=1∑m(y(i)−θ0−θ1x(i))2要使损失函数最小,可以对损失函数求偏导,并令偏导等于0,解出θ0和θ1。

对于多维特征的样本,同样可以采用这种方式来求解。此时,拟合函数和损失函数的形式会更为复杂,但基本原理相同。

最小二乘法的优点与局限性

优点

  1. 原理简单,易于理解和实现。
  2. 在线性回归问题中,最小二乘法能够得到唯一的最优解(在参数无约束的情况下)。
  3. 适用于大规模数据处理,因为最小二乘法的计算过程相对简单。

局限性

  1. 对异常值较为敏感,因为最小二乘法是通过最小化所有误差的平方和来求解的,所以单个异常值可能会对结果产生较大影响。
  2. 在非线性回归问题中,最小二乘法可能无法得到最佳解。此时,需要考虑其他非线性优化方法。

最小二乘法(Least Squares Method)是一种数学优化技术,它通过最小化误差的平方和来寻找数据的最佳函数匹配。以下是最小二乘法的具体算法,特别是针对线性回归问题的详细解释:

最小二乘法算法过程
一、线性回归模型

在线性回归中,我们假设模型为线性关系,即:

y = β 0 + β 1 x + ϵ y = \beta_0 + \beta_1x + \epsilon y=β0+β1x+ϵ

其中, y 是因变量, x 是自变量, β 0 是截距项, β 1 是斜率项, ϵ 是误差项。 其中,y是因变量,x 是自变量,\beta_0是截距项,\beta_1是斜率项,\epsilon是误差项。 其中,y是因变量,x是自变量,β0是截距项,β1是斜率项,ϵ是误差项。

二、目标函数

最小二乘法的目标是找到 β 0 和 β 1 的值,使得真实值 y i 和预测值 y ^ i = β 0 + β 1 x i 之间的误差平方和最小。 最小二乘法的目标是找到\beta_0和 \beta_1的值,使得真实值 y_i和预测值\hat{y}_i = \beta_0 + \beta_1x_i之间的误差平方和最小。 最小二乘法的目标是找到β0和β1的值,使得真实值yi和预测值y^i=β0+β1xi之间的误差平方和最小。即:

minimize S = ∑ i = 1 n ( y i − ( β 0 + β 1 x i ) ) 2 \text{minimize} \quad S = \sum_{i=1}^{n} (y_i - (\beta_0 + \beta_1x_i))^2 minimizeS=i=1∑n(yi−(β0+β1xi))2

三、求解算法

为了找到最小化 S S S 的 β 0 和 β 1 \beta_0 和 \beta_1 β0和β1,我们可以使用以下方法:

  1. 偏导数为零法

    对 S S S 分别求 β 0 \beta_0 β0 和 β 1 \beta_1 β1的偏导数,并令其为零:

    ∂ S ∂ β 0 = − 2 ∑ i = 1 n ( y i − ( β 0 + β 1 x i ) ) = 0 \frac{\partial S}{\partial \beta_0} = -2\sum_{i=1}^{n}(y_i - (\beta_0 + \beta_1x_i)) = 0 ∂β0∂S=−2i=1∑n(yi−(β0+β1xi))=0

    ∂ S ∂ β 1 = − 2 ∑ i = 1 n x i ( y i − ( β 0 + β 1 x i ) ) = 0 \frac{\partial S}{\partial \beta_1} = -2\sum_{i=1}^{n}x_i(y_i - (\beta_0 + \beta_1x_i)) = 0 ∂β1∂S=−2i=1∑nxi(yi−(β0+β1xi))=0

    解这两个方程,可以得到 β 0 \beta_0 β0和 β 1 \beta_1 β1 的值。

  2. 矩阵解法

    对于多元线性回归(即有多个自变量的情况),我们可以使用矩阵形式来表示和求解。设 Y Y Y是因变量向量, X X X是设计矩阵(包括自变量和常数项), β \beta β是参数向量, e e e 是误差向量。则模型可以表示为:

Y = X β + e Y = X\beta + e Y=Xβ+e

通过最小化误差平方和 ( e T e ) ,我们可以得到参数估计 ( β ^ = ( X T X ) − 1 X T Y ) 通过最小化误差平方和 (e^Te),我们可以得到参数估计 (\hat{\beta} = (X^TX)^{-1}X^TY) 通过最小化误差平方和(eTe),我们可以得到参数估计(β^=(XTX)−1XTY)。

四、算法步骤
  1. 收集数据:收集自变量 (x) 和因变量 (y) 的观测值。

  2. 构建设计矩阵:对于线性回归,设计矩阵 (X) 包括自变量和常数项(用于表示截距项)。

  3. 计算参数 :使用上述方法(偏导数为零法或矩阵解法)计算回归参数 β 0 \beta_0 β0和 β 1 \beta_1 β1(或对于多元线性回归,计算 β ^ \hat{\beta} β^)。

  4. 评估模型:使用得到的回归方程进行预测,并评估模型的性能(如使用均方误差等指标)。

在回归分析中,最小二乘法是一种广泛使用的技术,用于估计模型参数,使得模型预测值与真实观测值之间的差的平方和最小。

四、计算公式

以下是一般线性模型( y = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n + ϵ y = \beta_0 + \beta_1x_1 + \beta_2x_2 + \cdots + \beta_nx_n + \epsilon y=β0+β1x1+β2x2+⋯+βnxn+ϵ)中使用最小二乘法的基本步骤和计算公式:

    1. 目标函数

我们的目标是找到一组参数 β 0 , β 1 , ... , β n \beta_0, \beta_1, \ldots, \beta_n β0,β1,...,βn,使得目标函数(也称为残差平方和)最小化:

S ( β ) = ∑ i = 1 m ( y i − ( β 0 + β 1 x i 1 + β 2 x i 2 + ⋯ + β n x i n ) ) 2 S(\beta) = \sum_{i=1}^{m} \left( y_i - (\beta_0 + \beta_1x_{i1} + \beta_2x_{i2} + \cdots + \beta_nx_{in}) \right)^2 S(β)=i=1∑m(yi−(β0+β1xi1+β2xi2+⋯+βnxin))2

其中, m m m是观测值的数量, y i y_i yi是第 i i i个观测的响应变量, x i j x_{ij} xij是第 i i i个观测的第 j j j个预测变量(或自变量), β j \beta_j βj是对应的系数(或参数)。

    1. 正规方程

为了找到使 S ( β ) S(\beta) S(β)最小的 β \beta β值,我们可以对 S ( β ) S(\beta) S(β)关于每个 β j \beta_j βj求偏导,并令其为0。这将产生一组线性方程(称为正规方程或法方程):

∂ S ( β ) ∂ β j = 0 \frac{\partial S(\beta)}{\partial \beta_j} = 0 ∂βj∂S(β)=0

解这组方程,我们可以得到 β \beta β的估计值。对于简单的线性模型( y = β 0 + β 1 x + ϵ y = \beta_0 + \beta_1x + \epsilon y=β0+β1x+ϵ),正规方程简化为:

β 1 = n ∑ x i y i − ∑ x i ∑ y i n ∑ x i 2 − ( ∑ x i ) 2 \beta_1 = \frac{n \sum x_iy_i - \sum x_i \sum y_i}{n \sum x_i^2 - (\sum x_i)^2} β1=n∑xi2−(∑xi)2n∑xiyi−∑xi∑yi

β 0 = ∑ y i − β 1 ∑ x i n \beta_0 = \frac{\sum y_i - \beta_1 \sum x_i}{n} β0=n∑yi−β1∑xi

其中, n n n是数据点的数量, x i x_i xi和 y i y_i yi分别是第 i i i个观测的自变量和因变量值。

    1. 矩阵形式

对于更一般的线性模型,我们可以将问题转化为矩阵形式来求解。定义设计矩阵 X X X(其中行对应观测,列对应预测变量,包括常数项1用于截距),响应向量 y y y,和参数向量 β \beta β,正规方程可以表示为:

X T X β = X T y X^TX\beta = X^Ty XTXβ=XTy

解这个方程,我们得到:

β = ( X T X ) − 1 X T y \beta = (X^TX)^{-1}X^Ty β=(XTX)−1XTy

这是最小二乘解的矩阵形式,它可以直接通过线性代数方法求解。

  • 注意

1.当 X T X X^TX XTX是可逆的(即,设计矩阵 X X X的列是线性独立的),上述方程有唯一解。

  1. 在实际应用中,可能会遇到 X T X X^TX XTX不可逆的情况(如,预测变量之间存在多重共线性),此时需要使用正则化技术(如岭回归或LASSO)或其他方法来处理。

  2. 最小二乘法假设误差项 ϵ \epsilon ϵ是独立同分布的,并且具有零均值和常数方差。这些假设对于最小二乘估计的性质至关重要。

五、注意事项
  1. 异常值处理:最小二乘法对异常值较为敏感,因此在应用前需要进行异常值检测和处理。

  2. 多重共线性:当自变量之间存在高度相关性时,可能会导致回归系数不稳定或难以解释。此时需要进行多重共线性检验和处理。

  3. 非线性关系:如果数据之间存在非线性关系,则线性回归模型可能无法很好地拟合数据。此时需要考虑使用非线性回归模型或其他方法。

  4. 模型假设检验:在应用最小二乘法进行线性回归时,需要检验模型的假设条件(如误差项的正态性、独立性等)是否满足。

回归理论概述

下面内容来自文心一言的自动生成

机器学习中的回归是一种预测数值型目标变量的监督学习算法。与分类问题不同

  • 回归问题的目标是预测一个连续的值,而不是一个离散的类别标签。
  • 回归模型通过学习输入变量(也称为特征或自变量)与输出变量(也称为目标变量或因变量)之间的关系来工作。
回归的基本概念
  • 输入变量(X):影响目标变量的因素,可以是单个或多个。
  • 输出变量(Y):需要预测的数值,也称为响应变量或目标变量。
  • 训练集:包含输入变量和对应输出变量的数据集,用于训练回归模型。
  • 测试集:用于评估训练好的回归模型性能的数据集,不包含在训练过程中。
回归模型的类型
  1. 线性回归

    • 最简单的回归形式,假设输入变量和目标变量之间存在线性关系。
    • 模型可以表示为: Y = β 0 + β 1 X 1 + β 2 X 2 + . . . + β n X n + ϵ Y = \beta_0 + \beta_1X_1 + \beta_2X_2 + ... + \beta_nX_n + \epsilon Y=β0+β1X1+β2X2+...+βnXn+ϵ,其中 β i \beta_i βi 是系数, ϵ \epsilon ϵ 是误差项。
    • 可通过最小二乘法等方法求解系数。
  2. 多项式回归

    • 当线性关系不足以描述数据时,可以使用多项式回归。
    • 通过在回归方程中引入输入变量的幂次项来建模非线性关系。
  3. 岭回归(Ridge Regression)

    • 一种用于处理多重共线性数据的技术,通过向损失函数中添加L2正则化项来减少模型复杂度。
  4. 套索回归(Lasso Regression)

    • 类似于岭回归,但使用L1正则化项,可以自动进行特征选择,将不重要特征的系数收缩到0。
  5. 弹性网回归(Elastic Net Regression)

    • 岭回归和套索回归的结合,同时包含L1和L2正则化项。
  6. 决策树回归

    • 使用决策树模型进行回归预测,通过递归地将数据集分割成更小的子集来拟合模型。
  7. 随机森林回归

    • 基于多棵决策树的集成学习方法,通过平均或多数投票的方式提高预测的准确性和稳定性。
  8. 梯度提升回归树(GBRT, Gradient Boosting Regression Trees)

    • 通过构建多个弱学习器(通常是决策树),并将它们组合成一个强学习器来进行预测。
回归模型的评估
  • 均方误差(MSE, Mean Squared Error):预测值与真实值之差的平方的平均值,常用于评估回归模型的性能。
  • 均方根误差(RMSE, Root Mean Squared Error):MSE的平方根,与数据单位相同,更易于解释。
  • 平均绝对误差(MAE, Mean Absolute Error):预测值与真实值之差的绝对值的平均值,对异常值不如MSE敏感。
  • R²分数(R-squared):表示模型预测值与实际观测值之间的拟合程度,最佳值为1,值越小表示模型性能越差。

回归模型的选择和评估取决于具体问题的性质、数据的特性以及模型的假设条件。在实际应用中,通常需要通过交叉验证等方法来选择最优的模型。

线性回归

下面内容来自文心一言的自动生成

线性回归是机器学习中最基础也是应用最广泛的算法之一。它主要用于预测一个或多个自变量(特征)与因变量(目标)之间的线性关系。线性回归模型假设目标变量是输入特征的线性组合,并可能包括一个常数项(截距项)。

基本概念
  • 自变量(X):也称为特征或输入变量,是我们要用来预测因变量的值。在线性回归中,可以有一个或多个自变量。
  • 因变量(Y):也称为目标变量或输出变量,是我们想要预测的值。
  • 线性关系:指的是自变量和因变量之间存在一种直线关系,即当自变量变化时,因变量也按照一定比例变化,但这种变化是线性的。
线性回归模型

线性回归模型的一般形式可以表示为:

Y = β 0 + β 1 X 1 + β 2 X 2 + ⋯ + β n X n + ϵ Y = \beta_0 + \beta_1X_1 + \beta_2X_2 + \dots + \beta_nX_n + \epsilon Y=β0+β1X1+β2X2+⋯+βnXn+ϵ

其中:

  • Y Y Y 是因变量(目标变量)。
  • X 1 , X 2 , ... , X n X_1, X_2, \dots, X_n X1,X2,...,Xn 是自变量(特征)。
  • β 0 , β 1 , ... , β n \beta_0, \beta_1, \dots, \beta_n β0,β1,...,βn 是模型的参数,也称为系数。 β 0 \beta_0 β0 是截距项,表示当所有自变量都为零时,因变量的预期值。 β 1 , ... , β n \beta_1, \dots, \beta_n β1,...,βn 表示各自变量对因变量的影响程度。
  • ϵ \epsilon ϵ 是误差项,表示模型预测值与实际值之间的差异,通常假设它遵循正态分布,且均值为0。
参数估计

在线性回归中,我们需要通过数据来估计模型的参数 β 0 , β 1 , ... , β n \beta_0, \beta_1, \dots, \beta_n β0,β1,...,βn。最常用的参数估计方法是最小二乘法(Least Squares Method)。最小二乘法通过最小化误差项的平方和来找到最佳的参数估计值,即求解以下优化问题:

minimize ∑ i = 1 m ( y i − ( β 0 + β 1 x i 1 + ⋯ + β n x i n ) ) 2 \text{minimize} \quad \sum_{i=1}^{m} (y_i - (\beta_0 + \beta_1x_{i1} + \dots + \beta_nx_{in}))^2 minimizei=1∑m(yi−(β0+β1xi1+⋯+βnxin))2

其中 m m m 是样本数量, y i y_i yi 是第 i i i 个样本的实际目标值, x i j x_{ij} xij 是第 i i i 个样本的第 j j j 个特征值。

julia实现线性回归

下面内容来自文心一言的自动生成

在Julia中实现线性回归,可以通过多种方式完成,包括但不限于使用专门的库(如Flux.jl、GLM.jl等)或从头开始编写代码。以下是几种常见的方法:

1. 使用GLM.jl库

GLM.jl是Julia中用于广义线性模型(Generalized Linear Models)的一个包,它支持线性回归等多种模型。以下是使用GLM.jl进行线性回归的基本步骤:

  1. 安装GLM.jl:首先,需要确保GLM.jl包已经安装在你的Julia环境中。如果未安装,可以通过Julia的包管理器进行安装。

  2. 准备数据:准备输入特征(X)和目标变量(y)。这些数据可以是Julia中的向量或矩阵。

  3. 定义模型 :使用GLM.jl的lm函数或fit函数来定义线性回归模型。lm函数通常与@formula宏一起使用,以定义模型公式(如y ~ x)。

  4. 拟合模型 :调用lmfit函数来拟合模型,并获取模型对象。

  5. 分析模型 :使用GLM.jl提供的函数(如coefr2等)来分析模型结果,如获取回归系数、R方值等。

  6. 使用GLM.jl库

GLM.jl是Julia中用于广义线性模型(Generalized Linear Models)的一个包,它支持线性回归等多种模型。以下是使用GLM.jl进行线性回归的基本步骤:

安装GLM.jl:首先,需要确保GLM.jl包已经安装在你的Julia环境中。如果未安装,可以通过Julia的包管理器进行安装。

准备数据:准备输入特征(X)和目标变量(y)。这些数据可以是Julia中的向量或矩阵。

定义模型:使用GLM.jl的lm函数或fit函数来定义线性回归模型。lm函数通常与@formula宏一起使用,以定义模型公式(如y ~ x)。

拟合模型:调用lm或fit函数来拟合模型,并获取模型对象。

分析模型:使用GLM.jl提供的函数(如coef、r2等)来分析模型结果,如获取回归系数、R方值等。

julia 复制代码
using GLM, DataFrames

# 构造样本数据
x = [0.5, 1.0, 1.5, 2.0]
y = [1.0, 2.0, 2.5, 3.5]
df = DataFrame(x=x, y=y)

# 进行线性回归拟合
model = lm(@formula(y ~ x), df)

# 打印模型信息
println("R-squared: $(r2(model))")
println("Estimation coefficients: ")
println(coef(model))
2. 使用Flux.jl库

Flux.jl是Julia中的一个深度学习框架,它支持构建和训练包括线性回归在内的各种神经网络模型。以下是使用Flux.jl实现线性回归的基本步骤:

  1. 安装Flux.jl:确保Flux.jl包已安装在Julia环境中。

  2. 导入所需包 :使用using Flux等语句导入Flux.jl及其相关函数。

  3. 准备数据集:准备输入特征和目标变量。

  4. 定义模型 :使用Flux.jl的ChainDense层来定义线性回归模型。

  5. 定义损失函数和优化器:定义用于训练模型的损失函数(如均方误差MSE)和优化器(如梯度下降)。

  6. 训练模型 :使用Flux.jl提供的训练函数(如Flux.train!)来训练模型。

  7. 进行预测:使用训练好的模型进行预测。

julia 复制代码
using Flux
using Flux: @epochs, mse

# 准备数据集
X = [1.0, 2.0, 3.0, 4.0, 5.0]' # 注意这里使用了转置,使其成为列向量
y = [2.0, 3.0, 4.0, 5.0, 6.0]'

# 定义模型
model = Chain(Dense(1, 1))

# 定义损失函数
loss(x, y) = mse(model(x), y)

# 定义优化器
optimizer = Descent(0.1)

# 训练模型
@epochs 1000 Flux.train!(loss, params(model), [(X, y)], optimizer)

# 进行预测
prediction = model(X)
3. 从头开始编写代码

如果不使用任何外部库,也可以从头开始编写代码来实现线性回归。这通常涉及使用最小二乘法来求解回归系数。

julia 复制代码
# 生成随机数据
Random.seed!(123)
x = rand(100)
y = 2*x .+ randn(100)

# 定义线性回归函数

function linear_regression(x, y)
    n = length(x)
    x_mean = mean(x)
    y_mean = mean(y)
    b = sum((x .- x_mean) .* (y .- y_mean)) / sum((x .- x_mean) .^ 2)
    a = y_mean - b * x_mean
    return a, b
end

# 计算回归系数
a, b = linear
相关推荐
测绘工程师2 天前
【高等数学&学习记录】导数概念
学习·高等数学
BlackPercy12 天前
【高等数学】奇点与留数
python·高等数学
MowenPan19951 个月前
高等数学 7.6高阶线性微分方程
笔记·学习·高等数学
MowenPan19951 个月前
高等数学 6.2 定积分在几何学上的应用
笔记·学习·高等数学
BlackPercy1 个月前
【高等数学】多元微分学 (一)
机器学习·高等数学
MowenPan19951 个月前
高等数学 5.5 反常积分的审敛法 Γ函数
笔记·学习·高等数学
魔力之心1 个月前
物理学基础精解【66】
高等数学·物理学
魔力之心1 个月前
物理学基础精解【61】
高等数学·物理学
魔力之心1 个月前
优化理论及应用精解【29】
算法·支持向量机·优化算法·高等数学