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

news2024/9/20 21:49:43

文章目录

  • 机器学习基础
    • 一般化流程
    • 回归
      • 线性回归
        • 一元线性回归
          • 基础
          • 斜率的公式
          • 克莱姆法则(Cramer's Rule)
            • 一、克莱姆法则的基本内容
            • 二、克莱姆法则的适用条件
            • 三、克莱姆法则的优缺点
            • 四、总结
          • 导数与极值的问题
        • julia实现
      • 最小二乘法原理
          • 最小二乘法的原理
          • 线性回归中的最小二乘法
          • 最小二乘法的优点与局限性
          • 最小二乘法算法过程
            • 一、线性回归模型
            • 二、目标函数
            • 三、求解算法
            • 四、算法步骤
            • 四、计算公式
            • 五、注意事项
      • 回归理论概述
        • 回归的基本概念
        • 回归模型的类型
        • 回归模型的评估
      • 线性回归
        • 基本概念
        • 线性回归模型
        • 参数估计
      • julia实现线性回归
        • 1. 使用GLM.jl库
        • 2. 使用Flux.jl库
        • 3. 从头开始编写代码
  • 参考文献

机器学习基础

一般化流程

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

回归

线性回归

一元线性回归
基础

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")
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(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 \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=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")
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=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))
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)
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

参考文献

  • 《机器学习精讲 基础、算法与应用》
  • 文心一言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1940279.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视觉巡线小车——STM32+OpenMV

系列文章目录 第一章&#xff1a;视觉巡线小车——STM32OpenMV&#xff08;一&#xff09; 第二章&#xff1a;视觉巡线小车——STM32OpenMV&#xff08;二&#xff09; 第三章&#xff1a;视觉巡线小车——STM32OpenMV&#xff08;三&#xff09; 第四章&#xff1a;视觉巡…

前端打印如何给打印页加上水印

插件使用相关&#xff1a;vue-print-nb 前端打印的一个实现方案-CSDN博客 示例代码&#xff1a; media print {page {size: auto; //页面大小自动&#xff0c;防止打印版不全margin: 15mm; //页面边距的设定}body{background-image: url(/assets/images/login/logo.png);back…

java高级——Collection集合之Set探索(底层为HashMap实现)

java高级——Collection集合之Set探索 前情提要文章介绍继承结构底层代码&#xff08;一张图你就悟了&#xff09;下期预告 前情提要 上一篇文章我们探索了HashMap&#xff0c;详细解说了哈希冲突&#xff0c;红黑树以及Map底层到底是怎么实现的&#xff0c;这一篇我们简单说一…

三字棋游戏(C语言详细解释)

hello&#xff0c;小伙伴们大家好&#xff0c;算是失踪人口回归了哈&#xff0c;主要原因是期末考试完学校组织实训&#xff0c;做了俄罗斯方块&#xff0c;后续也会更新&#xff0c;不过今天先从简单的三字棋说起 话不多说&#xff0c;开始今天的内容 一、大体思路 我们都知…

开源模型应用落地-FastAPI-助力模型交互-进阶篇-RequestDataclasses(三)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理&#xff0c;使应用程序能够处理各种不同的请求场景&#xff0c;提高应用程序的灵活性和可扩展性。 在数据验证和转换方面&#xff0c;高级用法提供了更精细和准确的控制&#…

Springcloud之gateway的使用详解

官网地址&#xff1a;https://docs.spring.io/spring-cloud-gateway/docs/4.0.4/reference/html/ 1.网关入门 helloword 网关不依赖start-web 导入的pom&#xff1a; <!--gateway--> <dependency><groupIdorg.springframework.cloud</groupId><arti…

CKS-Kubernetes-证书题库总结

证书如下 个人考试总结 第一次考试 成绩如下&#xff0c;其实这一次我题目全做了&#xff0c;个人感觉也没有什么错误&#xff0c;但是环境做错了 7月14日CKS考试笔记 问题分析 你这次考试得了57%。 至少需要67%的分数才能通过。 对您完成的考试的自动分析显示了三个得分最…

【深度学习】起源:人脑的神经结构

文章目录 睁眼看世界&#xff0c;倾耳听人间脑子&#xff0c;是个好东西&#xff01;眼睛成像其它身体感触系统脑子&#xff1a;我很忙的&#xff01;脑细胞&#xff1a;脑子里的打工人生物神经元——结构生物神经元——人脑的运算单位 人脑的深度学习总结 睁眼看世界&#xff…

数据结构 —— B树

数据结构 —— B树 B树B树的插入操作分裂孩子分裂父亲分裂 我们之前学过了各种各样的树&#xff0c;二叉树&#xff0c;搜索二叉树&#xff0c;平衡二叉树&#xff0c;红黑树等等等等&#xff0c;其中平衡二叉树和红黑树都是控制树的高度来控制查找次数。 但是&#xff0c;这都…

李彦宏论AI:技术革新与产业价值的双重驱动

文章目录 每日一句正能量前言AI技术应用场景探索1. **医疗健康**2. **自动驾驶**3. **工业制造**4. **金融服务**5. **教育**6. **农业**7. **环境监测**8. **安全监控**9. **零售业**10. **艺术与娱乐** 避免超级应用陷阱的策略1. **明确应用目标**2. **优化用户体验**3. **注…

NFT革命:数字资产的确权、营销与元宇宙的未来

目录 1、NFT&#xff1a;数字社会的数据确权制度 2、基于低成本及永久产权的文化发现 3、PFP&#xff1a;从“小图片”到“身份表达”&#xff0c;再到社区筛选 4、透明表达&#xff1a;NFT 在数字化营销中的商业价值 5、可编程性&#xff1a;赋予 NFT 无限可能的应用 5.…

/秋招突击——7/21——复习{堆——数组中的第K大元素}——新作{回溯——全排列、子集、电话号码的字母组合、组合总和、括号生成}

文章目录 引言复习数组中的第K大的最大元素复习实现参考实现 新作回溯模板46 全排列个人实现参考实现 子集个人实现参考实现 电话号码的字母组合复习实现 组合总和个人实现参考实现 括号生成复习实现 总结 引言 昨天的科大讯飞笔试做的稀烂&#xff0c;今天回来好好练习一下&a…

git实操之线上分支合并

线上分支合并 【 1 】本地dev分支合并到本地master上 # 本地dev分支合并到本地master上# 远程(线上)分支合并# 本地dev分支合并到本地master上# 远程(线上)分支合并#####本地和线上分支同步################ #### 远程创建分支&#xff0c;拉取到本地####-远程创建分支&#…

服务攻防-应用协议cve

Cve-2015-3306 背景&#xff1a; ProFTPD 1.3.5中的mod_copy模块允许远程攻击者通过站点cpfr和site cpto命令读取和写入任意文件。 任何未经身份验证的客户端都可以利用这些命令将文件从文件系统的任何部分复制到选定的目标。 复制命令使用ProFTPD服务的权限执行&#xff0c;…

《2024 年 7 月 17 日最新开发者服务 API 推荐》

在当今的数字货币领域&#xff0c;对代币持有信息的精准洞察至关重要。而 Bitquery 代币持有信息查询 API 接口的出现&#xff0c;为开发者和投资者提供了强大的工具。无论是想要揭示代币趋势&#xff0c;检测虚假交易&#xff0c;发现热门代币&#xff0c;还是评估代币财富差距…

查找算法③-斐波那契查找算法/黄金分割查找算法

一、算法原理 斐波那契查找算法又称黄金分割查找算法&#xff0c;它是在二分查找基础上根据斐波那契数列进行分割的一种衍生算法&#xff0c;简单来说&#xff0c;二分查找是一分为二进行查找&#xff0c;斐波那契查找是使用斐波那契数列进行分割查找。而斐波那契数列就是我们通…

【Dison夏令营 Day 26】PyGame 中的赛车游戏

在本文中&#xff0c;我们将了解如何使用 Pygame 在 Python 中创建一个赛车游戏。在这个游戏中&#xff0c;我们将拥有驾驶、障碍物碰撞、通过关卡时速度增加、暂停、倒计时、记分牌和说明书屏幕等功能。 所需模块&#xff1a; 在继续之前&#xff0c;请在命令提示符下运行以下…

百科词条可以删除吗?删除百科词条的方法

大多时候大家都是想创建百度词条&#xff0c;然而有时候也会需要删除某些词条&#xff0c;因为其内容有错误、不实或者涉及某些敏感信息。但是百科词条删除需要非常明确的理由&#xff0c;不然也是很难通过的&#xff0c;这里小马识途百科顾问先初步分享下删除百科词条的流程。…

一套C#语言开发的医学影像归档与通讯系统PACS源码,三甲以下医院都能满足

医学影像归档与通讯系统&#xff08;PACS&#xff09;系统&#xff0c;是一套适用于从单一影像设备到放射科室、到全院级别等各种应用规模的医学影像归档与通讯系统。PACS集患者登记、图像采集、存档与调阅、报告与打印、查询、统计、刻录等功能为一体&#xff0c;有效地实现了…

Logstash docker发布

一 下载Logstash 不废话了&#xff0c;我下载的7.17.6 二 新增配置文件 在logstash/pipeline中&#xff0c;添加logstash.conf input {jdbc { # 连接jdbc_connection_string > "jdbc:mysql://192.168.1.1:3306/kintech-cloud-bo&#xff1f;characterEncodingUTF-8&…