文章目录
- 机器学习基础
- 一般化流程
- 回归
- 线性回归julia实现
- 最小二乘法原理
- 最小二乘法的原理
- 线性回归中的最小二乘法
- 最小二乘法的优点与局限性
- 最小二乘法算法过程
- 一、线性回归模型
- 二、目标函数
- 三、求解算法
- 四、算法步骤
- 四、计算公式
- 五、注意事项
- 回归理论概述
- 回归的基本概念
- 回归模型的类型
- 回归模型的评估
- 线性回归
- 基本概念
- 线性回归模型
- 参数估计
- julia实现线性回归
- 1. 使用GLM.jl库
- 2. 使用Flux.jl库
- 3. 从头开始编写代码
- 参考文献
机器学习基础
一般化流程
- 定义问题
- 收集数据
- 设计特征
- 训练模型
- 测试模型
- 应用模型
回归
线性回归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=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的列是线性独立的),上述方程有唯一解。
2. 在实际应用中,可能会遇到 X T X X^TX XTX不可逆的情况(如,预测变量之间存在多重共线性),此时需要使用正则化技术(如岭回归或LASSO)或其他方法来处理。
3. 最小二乘法假设误差项 ϵ \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方值等。
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!
)来训练模型。 -
进行预测:使用训练好的模型进行预测。
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_meanreturn a, b
end# 计算回归系数
a, b = linear
参考文献
- 《机器学习精讲 基础、算法与应用》
- 文心一言