当前位置:   article > 正文

人工智能与机器学习原理精解【2】

人工智能与机器学习原理精解【2】

机器学习基础

一般化流程

  • 定义问题
  • 收集数据
  • 设计特征
  • 训练模型
  • 测试模型
  • 应用模型

回归

线性回归

一元线性回归
基础

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,这里的一组xiyi就构成了样本数据3.均方误差(损失函数)E=i=1n(yiy^i)2y^i为根据参数ab计算的方程1中的yyi是样本数据实际的y值。均方误差(损失)最小化成为我们的目标我们可以借此找到方程中ab两个参数所谓的找到也只能是估计。因为:4.在实际中,线性关系模型没有完全理想化,即:y=a+bx+e其中,y是因变量,x是自变量,a是截距项,b是斜率项,e是误差项完全理想化的时候是e=0,则y=a+bx,此时找到的参数ab就是真正的参数,而不是估计或预测参数。5.为了实现损失最小化,也就是说力求让e0,可以对E计算偏导数minimizeE=i=1n(yi(a+bxi))2=i=1n(yiabxi)2E分别求ab的偏导数,并令其为零:aE=2i=1n(yiabxi)(1)=0bE=2i=1nxi(yiabxi)(xi)=0求解方程,得解如下:b=nxi2(xi)2nxiyixiyia=nyibxi6.这个到底是如何推导出来的呢?实质是求解一个二元线性方程组(1)2i=1n(yiabxi)(1)=0=>2i=1n(yiabxi)=0=>i=1n(yiabxi)=0=>i=1nyii=1nai=1nbxi=0=>i=1na+i=1nbxi=i=1nyi=>i=1na+i=1nxib=i=1nyi=>i=1na+bi=1nxi=i=1nyi=>na+bi=1nxi=i=1nyi到了这一步,一定明确了,ab才是自变量!!!!!(2)i=1nxi(yi(a+bxi))=0=>i=1nxiyii=1nxiai=1nbxi2=0=>i=1nxia+i=1nbxi2=i=1nxiyi=>i=1nxia+i=1nxi2b=i=1nxiyi=>ai=1nxi+bi=1nxi2=i=1nxiyi(3)方程组转换为以下{na+bi=1nxi=i=1nyiai=1nxi+bi=1nxi2=i=1nxiyi(4)系数行列式 ni=1nxii=1nxii=1nxi2 常数项 i=1nyii=1nxiyi (5)Δ= ni=1nxii=1nxii=1nxi2 =ni=1nxi2(i=1nxi)2Δa= i=1nyii=1nxiyii=1nxii=1nxi2 =i=1nyii=1nxi2i=1nxii=1nxiyiΔb= ni=1nxii=1nyii=1nxiyi =ni=1nxiyii=1nyii=1nxi6b=ni=1nxi2(i=1nxi)2ni=1nxiyii=1nyii=1nxia=ni=1nxi2(i=1nxi)2i=1nyii=1nxi2i=1nxii=1nxiyi另外,na+bi=1nxi=i=1nyi=>a=nyibxiab求解完毕。
第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(xixˉ)2i=1n(xixˉ)(yiyˉ)a=nyibxi=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=ni=1nxi2(i=1nxi)2ni=1nxiyii=1nyii=1nxi=n1(ni=1nxi2(i=1nxi)2)n1(ni=1nxiyii=1nyii=1nxi)=i=1nxi2n1(i=1nxi)2i=1nxiyin1i=1nyii=1nxi=i=1nxi2xˉi=1nxii=1nxiyiyˉi=1nx=i=1nxi2n(xˉ)2i=1nxiyinxˉyˉa=nyibxi=yˉbxˉ
按照上述公式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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
y=0.06200648282067789+4.994947056080488*x
  • 1

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(xixˉ)2i=1n(xixˉ)(yiyˉ)=i=1nxinxˉ2i=1nxiyinxˉyˉ=i=1nxi2n(xˉ)2i=1nxiyinxˉyˉa=nyibxi=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(xixˉ)2i=1n(xixˉ)(yiyˉ)

其中:

  • 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ˉ=n1i=1nxi y ˉ = 1 n ∑ i = 1 n y i \bar{y} = \frac{1}{n} \sum_{i=1}^{n} y_i yˉ=n1i=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 {a11x1+a12x2++a1nxn=b1a21x1+a22x2++a2nxn=b2an1x1+an2x2++annxn=bn a11x1+a12x2++a1nxn=b1a21x1+a22x2++a2nxn=b2an1x1+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} xf ∂ f ∂ y \frac{\partial f}{\partial y} yf 分别表示函数在 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 xf(x0,y0)=0,yf(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 xf=2ax+by+d

∂ f ∂ y = b x + 2 c y + e \frac{\partial f}{\partial y} = bx + 2cy + e yf=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实现
# 生成随机数据 
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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
y=0.06200648282066368+4.9949470560804885*x
  • 1

最小二乘法原理

下面内容来自文心一言的自动生成
最小二乘法(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=1n(yiy^i)2其中,yi是真实值,y^i是对应的预测值。在线性回归中,我们通常使用均方误差(MeanSquaredError,MSE)作为损失函数,均方误差可以看作是最小二乘法中的E除以mm为样本个数)。

线性回归中的最小二乘法

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

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=1m(y(i)hθ(x(i)))2=i=1m(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=1n(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 β0S=2i=1n(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 β1S=2i=1nxi(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=+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=1m(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 βjS(β)=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=nxi2(xi)2nxiyixiyi

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

其中, 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 XT=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的列是线性独立的),上述方程有唯一解。
2. 在实际应用中,可能会遇到 X T X X^TX XTX不可逆的情况(如,预测变量之间存在多重共线性),此时需要使用正则化技术(如岭回归或LASSO)或其他方法来处理。
3. 最小二乘法假设误差项 ϵ \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=1m(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方值等。

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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
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. 进行预测:使用训练好的模型进行预测。

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
3. 从头开始编写代码

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

# 生成随机数据
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

参考文献

  • 《机器学习精讲 基础、算法与应用》
  • 文心一言
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号