文章目录
回归
线性回归
一元线性回归
基础
- 方程: 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) 的驻点。
为了解这个方程组,我们可以使用消元法、代入法或矩阵方法。这里,我简要说明一下消元法:
- 从第一个方程中解出 x x x(或 y y y,但这里我们选择解出 x x x):
x = − b y + d 2 a x = -\frac{by + d}{2a} x=−2aby+d
- 将这个结果代入第二个方程中,消去 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
-
解这个关于 y y y 的一元一次方程,找到 y y y 的值。
-
将找到的 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。
对于多维特征的样本,同样可以采用这种方式来求解。此时,拟合函数和损失函数的形式会更为复杂,但基本原理相同。
最小二乘法的优点与局限性
优点:
- 原理简单,易于理解和实现。
- 在线性回归问题中,最小二乘法能够得到唯一的最优解(在参数无约束的情况下)。
- 适用于大规模数据处理,因为最小二乘法的计算过程相对简单。
局限性:
- 对异常值较为敏感,因为最小二乘法是通过最小化所有误差的平方和来求解的,所以单个异常值可能会对结果产生较大影响。
- 在非线性回归问题中,最小二乘法可能无法得到最佳解。此时,需要考虑其他非线性优化方法。
最小二乘法(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,我们可以使用以下方法:
-
偏导数为零法
对 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 的值。
-
矩阵解法
对于多元线性回归(即有多个自变量的情况),我们可以使用矩阵形式来表示和求解。设 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)。
四、算法步骤
-
收集数据:收集自变量 (x) 和因变量 (y) 的观测值。
-
构建设计矩阵:对于线性回归,设计矩阵 (X) 包括自变量和常数项(用于表示截距项)。
-
计算参数 :使用上述方法(偏导数为零法或矩阵解法)计算回归参数 β 0 \beta_0 β0和 β 1 \beta_1 β1(或对于多元线性回归,计算 β ^ \hat{\beta} β^)。
-
评估模型:使用得到的回归方程进行预测,并评估模型的性能(如使用均方误差等指标)。
在回归分析中,最小二乘法是一种广泛使用的技术,用于估计模型参数,使得模型预测值与真实观测值之间的差的平方和最小。
四、计算公式
以下是一般线性模型( 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+ϵ)中使用最小二乘法的基本步骤和计算公式:
-
- 目标函数
我们的目标是找到一组参数 β 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是对应的系数(或参数)。
-
- 正规方程
为了找到使 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个观测的自变量和因变量值。
-
- 矩阵形式
对于更一般的线性模型,我们可以将问题转化为矩阵形式来求解。定义设计矩阵 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的列是线性独立的),上述方程有唯一解。
-
在实际应用中,可能会遇到 X T X X^TX XTX不可逆的情况(如,预测变量之间存在多重共线性),此时需要使用正则化技术(如岭回归或LASSO)或其他方法来处理。
-
最小二乘法假设误差项 ϵ \epsilon ϵ是独立同分布的,并且具有零均值和常数方差。这些假设对于最小二乘估计的性质至关重要。
五、注意事项
-
异常值处理:最小二乘法对异常值较为敏感,因此在应用前需要进行异常值检测和处理。
-
多重共线性:当自变量之间存在高度相关性时,可能会导致回归系数不稳定或难以解释。此时需要进行多重共线性检验和处理。
-
非线性关系:如果数据之间存在非线性关系,则线性回归模型可能无法很好地拟合数据。此时需要考虑使用非线性回归模型或其他方法。
-
模型假设检验:在应用最小二乘法进行线性回归时,需要检验模型的假设条件(如误差项的正态性、独立性等)是否满足。
回归理论概述
下面内容来自文心一言的自动生成
机器学习中的回归是一种预测数值型目标变量的监督学习算法。与分类问题不同
- 回归问题的目标是预测一个连续的值,而不是一个离散的类别标签。
- 回归模型通过学习输入变量(也称为特征或自变量)与输出变量(也称为目标变量或因变量)之间的关系来工作。
回归的基本概念
- 输入变量(X):影响目标变量的因素,可以是单个或多个。
- 输出变量(Y):需要预测的数值,也称为响应变量或目标变量。
- 训练集:包含输入变量和对应输出变量的数据集,用于训练回归模型。
- 测试集:用于评估训练好的回归模型性能的数据集,不包含在训练过程中。
回归模型的类型
-
线性回归:
- 最简单的回归形式,假设输入变量和目标变量之间存在线性关系。
- 模型可以表示为: 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 ϵ 是误差项。
- 可通过最小二乘法等方法求解系数。
-
多项式回归:
- 当线性关系不足以描述数据时,可以使用多项式回归。
- 通过在回归方程中引入输入变量的幂次项来建模非线性关系。
-
岭回归(Ridge Regression):
- 一种用于处理多重共线性数据的技术,通过向损失函数中添加L2正则化项来减少模型复杂度。
-
套索回归(Lasso Regression):
- 类似于岭回归,但使用L1正则化项,可以自动进行特征选择,将不重要特征的系数收缩到0。
-
弹性网回归(Elastic Net Regression):
- 岭回归和套索回归的结合,同时包含L1和L2正则化项。
-
决策树回归:
- 使用决策树模型进行回归预测,通过递归地将数据集分割成更小的子集来拟合模型。
-
随机森林回归:
- 基于多棵决策树的集成学习方法,通过平均或多数投票的方式提高预测的准确性和稳定性。
-
梯度提升回归树(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进行线性回归的基本步骤:
-
安装GLM.jl:首先,需要确保GLM.jl包已经安装在你的Julia环境中。如果未安装,可以通过Julia的包管理器进行安装。
-
准备数据:准备输入特征(X)和目标变量(y)。这些数据可以是Julia中的向量或矩阵。
-
定义模型 :使用GLM.jl的
lm
函数或fit
函数来定义线性回归模型。lm
函数通常与@formula
宏一起使用,以定义模型公式(如y ~ x
)。 -
拟合模型 :调用
lm
或fit
函数来拟合模型,并获取模型对象。 -
分析模型 :使用GLM.jl提供的函数(如
coef
、r2
等)来分析模型结果,如获取回归系数、R方值等。 -
使用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实现线性回归的基本步骤:
-
安装Flux.jl:确保Flux.jl包已安装在Julia环境中。
-
导入所需包 :使用
using Flux
等语句导入Flux.jl及其相关函数。 -
准备数据集:准备输入特征和目标变量。
-
定义模型 :使用Flux.jl的
Chain
和Dense
层来定义线性回归模型。 -
定义损失函数和优化器:定义用于训练模型的损失函数(如均方误差MSE)和优化器(如梯度下降)。
-
训练模型 :使用Flux.jl提供的训练函数(如
Flux.train!
)来训练模型。 -
进行预测:使用训练好的模型进行预测。
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