通过简单的线性回归理解机器学习的基本原理

简介:

在本文中,我将使用一个简单的线性回归模型来解释一些机器学习(ML)的基本原理。线性回归虽然不是机器学习中最强大的模型,但由于容易熟悉并且可解释性好,所以仍然被广泛使用。简单地说,线性回归用于估计连续或分类数据之间的线性关系。

我将使用X和y来表示变量。如果你喜欢更具体的东西,可以想象y是销售额,X是广告支出,我们想估计广告花费如何影响销售额。我将展示一个线性回归如何学习绘制最适合通过这些数据的线:

16c87673dd5e225f9c9135269a04fee26b32f05b

机器学到了什么?

机器学习最基础的问题是:“机器(即统计模型)实际上学到了什么?”

这取决于不同的模型,但简单来说,模型学习函数f,使f(X)映射到y。换句话说,模型学习如何采取X(即特征,或者说自变量(S)),预测y(目标,或者说因变量)。

在简单的线性回归的情况下(y ~ b0 + b1 * X,其中X是列)的模型“学习”两个参数:

  • B0:偏置(或者说,截距)
  • b1:斜率

当X为0时的y水平坐标等于偏置(即广告支出为零时的销售额的值),斜率是X中每单位增长或减少对y预测增长或减少的比率(即,每英镑花在广告上会带来多少销售额的增长)。两个参数都是标量。

一旦模型学习到这些参数,你就可以用给定X值来计算y的估计值。换句话说,当你不知道y是什么时候,你可以用这些它们来预测y的值,这是一个预测模型!

学习参数:成本函数

学习LR模型的参数有几种方法,我将着重于最好说明统计学习的方法: 最小化成本函数。

请记住,机器学习的重点是从数据中学习。我们用一个简单的比喻来说明。对于孩子,我们通常会通过告知他禁止做什么事情,或者因为做了不该做的事情而让他受到惩罚的方式,教会他理解正确的行为。例如,你可以想象一个四岁的孩子坐在火旁保暖,但因为他不知道火的危险,她把手指放了进去烧伤了。下一次他坐在火旁,他就不会因为玩火导致烧伤,但是也许他会因为坐得离火太近,太热,不得不离开。第三次他坐在火旁边,发现有一个距离让她既可以保持温暖,也不会让她受到任何危险。换句话说,通过经验和反馈,孩子掌握了与火的最佳距离。这个例子中的火的热量是一个成本函数。

在机器学习中,使用成本函数来估计模型的表现。简而言之,成本函数是衡量模型在估计X和Y之间关系方面的错误程度的度量。成本函数(你也可以参考损失函数或误差函数)可以通过迭代地运行模型来估计的对“地面真值”(即y的已知值)的预测。

因此,ML模型的目标是找到使成本函数最小化的参数,权重或结构。

最小化成本函数:梯度下降

既然我们知道模型是通过最小化成本函数来学习的,那么你可能想知道成本函数是如何最小化的,那么让我们开始介绍梯度下降。梯度下降是一种有效的优化算法,试图找到函数的局部或全局最小值。

梯度下降使模型能够学习模型应该采取的梯度或方向,以减少误差(实际y与预测y之间的差异)。简单线性回归示例中的方向是指如何调整或修正模型参数b0和b1以进一步降低成本函数。随着模型迭代,它逐渐收敛到最小值,继续对参数做更进一步的调整只能产生很小(甚至没有)的损失变化。

这个过程是整个ML过程不可或缺的一部分,它极大地加快了学习过程。梯度下降过程的替代方案可能是粗暴地穷举所有可能的参数组合,直到确定使成本最小化的组为止。显而易见,这是不可行的。因此,梯度下降使得学习过程能够对所学习的估计进行纠正更新,将模型导向最佳参数组合。

在线性回归模型中观察学习

为了在线性回归中观察学习,我手动设置参数b0和b1并使用模型从数据中学习这些参数。换句话说,我们知道X与y之间关系的地面真值,并且可以通过参数迭代校正对成本的回应来观察学习这种关系的模型。

01
library(dplyr)
02
library(ggplot2)
03
 
04
n     <- 200 # number of observations
05
bias  <- 4
06
slope <- 3.5
07
dot   <- `%*%` # defined for personal preference
08
 
09
x   <- rnorm(n) * 2
10
x_b <- cbind(x, rep(1, n))
11
y   <- bias + slope * x + rnorm(n)
12
df  <- data_frame(x = x,  y = y)
13
 
14
learning_rate <- 0.05
15
n_iterations  <- 100
16
theta         <- matrix(c(20, 20))
17
 
18
b0    <- vector("numeric", length = n_iterations)
19
b1    <- vector("numeric", length = n_iterations)
20
sse_i <- vector("numeric", length = n_iterations)

这里我定义了偏置和斜率(分别等于4和3.5)。我也为X添加了一个列(用于支持矩阵乘法)。我也给y添加了一些高斯噪声来掩盖真正的参数,即创建完全随机的误差。现在我们有一个包含两个变量X和y的dataframe,这个变量似乎有一个正的线性趋势(即y随着增加X值而增加)。

c55f04eb6b5f2c464d6a80ad72162cd074f1a8e5

接下来我定义了学习率,它控制每个梯度的步骤大小。如果这太大,模型可能会错过函数的局部最小值。如果太小,模型会需要很长时间才能收敛。Theta存储参数b0和b1,它们用随机值初始化。n_iterations控制模型迭代和更新值的次数。最后,在模型的每次迭代中,我创建了一些占位符来捕获b0,b1的值和误差平方和(SSE)。

这里的SSE是成本函数,它仅仅是预测y和实际y之间的平方差的和(即残差)。

现在,我们运行循环。在每次迭代中,模型将根据Theta值预测y,计算残差,然后应用梯度下降估计校正梯度,然后使用这些梯度更新theta的值,重复此过程100次。当循环结束时,我创建一个dataframe来存储学习的参数和每次迭代的损失。

01
for (iteration in seq_len(n_iterations)) {
02
 
03
  residuals_b        <- dot(x_b, theta) - y
04
  gradients          <- 2/n * dot(t(x_b), residuals_b)
05
  theta              <- theta - learning_rate * gradients
06
   
07
  sse_i[[iteration]] <- sum((y - dot(x_b, theta))**2)
08
  b0[[iteration]]    <- theta[2]
09
  b1[[iteration]]    <- theta[1]
10
   
11
}
12
 
13
model_i <- data.frame(model_iter = 1:n_iterations,
14
                      sse = sse_i,
15
                      b0 = b0,
16
                      b1 = b1)

当迭代完成后,我们可以绘制超过模型估计的线。

01
p1 <- df %>%
02
  ggplot(aes(x=x, y=y)) +
03
  geom_abline(aes(intercept = b0,
04
                  slope = b1,
05
                  colour = -sse,
06
                  frame = model_iter),
07
              data = model_i,
08
              alpha = .50
09
              ) +
10
  geom_point(alpha = 0.4) +
11
  geom_abline(aes(intercept = b0,
12
                  slope = b1),
13
              data = model_i[100, ],
14
              alpha = 0.5,
15
              size = 2,
16
              colour = "dodger blue") +
17
  geom_abline(aes(intercept = b0,
18
                  slope = b1),
19
              data = model_i[1, ],
20
              colour = "red",
21
              alpha = 0.5,
22
              size = 2) +
23
  scale_color_continuous(low = "red", high = "grey") +
24
  guides(colour = FALSE) +
25
  theme_minimal()
26
 
27
p2 <- model_i[1:30,] %>%
28
  ggplot(aes(model_iter, sse, colour = -sse)) +
29
  geom_point(alpha = 0.4) +
30
  theme_minimal() +
31
  labs(x = "Model iteration",
32
       y = "Sum of Sqaured errors") +
33
  scale_color_continuous(low = "red", high = "dodger blue") +
34
  guides(colour = FALSE)

00a339246c272bf85d66df54d322f082d0b64c1e

e239aed3729677385efef1db7a8f0f4b7f899214

首先要注意的是粗的红线。这是从b0和b1的初始值估计的线。你可以看到,这并不适合数据点,正因为如此,它有最高的SSE。但是,你会看到逐渐向数据点移动的线,直到找到最适合的线(粗蓝线)。换句话说,在每次迭代时,模型为b0和b1学习了更好的值,直到找到最小化成本函数的值为止。模型学习b0和b1的最终值分别是3.96和3.51,因此非常接近我们设置的参数4和3.5。

我们还可以在模型的迭代中看到SSE的减少。在收敛和稳定之前,它在早期迭代中急剧下降。

f9576473a3fbd621ac8907b072c8fc9df5f28075

我们现在可以使用的B0和B1存储在theta的学习值为新的X值预测y值。

01
predict_from_theta  < -  function(x){
02
   
03
  x  < - cbind(x,rep(1,length(x)))
04
  点(x,theta)
05
   
06
}
07
 
08
predict_from_theta(rnorm(10))
09
           [,1 ]
10
[ 1,] - 1.530065
11
[ 2,]   8.036859
12
[ 3,]   6.895680
13
[ 4,]   3.170026
14
[ 5,]   4.905467
15
[ 6,]   2.644702
16
[ 7,] 12.555390
17
[ 8,]   1.172425
18
[ 9,]   3.776509
19
[ 10,]   4.849211

总结

本文介绍了一种简要理解机器学习的方法。毫无疑问,机器学习还有很多知识本文中没有被提到,但是了解“底层”的基本原理获得初步的直觉可以大大提高你对更复杂模型的理解。

本文由AiTechYun编译,转载请注明出处。更多内容关注微信公众号atyun_com 或访问www.atyun.com

目录
相关文章
|
21天前
|
机器学习/深度学习 数据采集 算法
探索机器学习中的线性回归
【10月更文挑战第25天】本文将深入浅出地介绍线性回归模型,一个在机器学习领域中广泛使用的预测工具。我们将从理论出发,逐步引入代码示例,展示如何利用Python和scikit-learn库实现一个简单的线性回归模型。文章不仅适合初学者理解线性回归的基础概念,同时也为有一定基础的读者提供实践指导。
|
1月前
|
机器学习/深度学习 算法 知识图谱
【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)
【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)
|
1月前
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
1月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
探索机器学习:从线性回归到深度学习
在这篇文章中,我们将一起踏上一场激动人心的旅程,穿越机器学习的广阔天地。我们将从最基本的线性回归开始,逐步深入到复杂的深度学习模型。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深入的理解。让我们一起探索这个充满无限可能的世界吧!
|
1月前
|
机器学习/深度学习 程序员
【机器学习】朴素贝叶斯原理------迅速了解常见概率的计算
【机器学习】朴素贝叶斯原理------迅速了解常见概率的计算
|
1月前
|
机器学习/深度学习 算法
【机器学习】逻辑回归介绍(逻辑回归应用场景,原理,损失及优化详解!!!)
【机器学习】逻辑回归介绍(逻辑回归应用场景,原理,损失及优化详解!!!)
|
1月前
|
机器学习/深度学习 API
机器学习入门(七):线性回归原理,损失函数和正规方程
机器学习入门(七):线性回归原理,损失函数和正规方程
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
探索机器学习:从线性回归到深度学习
【9月更文挑战第4天】在这篇文章中,我们将深入探讨机器学习的世界,从基础的线性回归模型开始,逐步深入到复杂的深度学习网络。我们将通过实际的代码示例,揭示这些模型背后的数学原理,以及如何在现实世界的问题中应用它们。无论你是初学者还是有经验的数据科学家,这篇文章都将为你提供新的视角和深入的理解。
|
3月前
|
机器学习/深度学习 算法 搜索推荐
【机器学习】机器学习的基本概念、算法的工作原理、实际应用案例
机器学习是人工智能的一个分支,它使计算机能够在没有明确编程的情况下从数据中学习并改进其性能。机器学习的目标是让计算机自动学习模式和规律,从而能够对未知数据做出预测或决策。
93 2
|
2月前
|
机器学习/深度学习 人工智能 算法
探索人工智能:机器学习的基本原理与Python代码实践
【9月更文挑战第6天】本文深入探讨了人工智能领域中的机器学习技术,旨在通过简明的语言和实际的编码示例,为初学者提供一条清晰的学习路径。文章不仅阐述了机器学习的基本概念、主要算法及其应用场景,还通过Python语言展示了如何实现一个简单的线性回归模型。此外,本文还讨论了机器学习面临的挑战和未来发展趋势,以期激发读者对这一前沿技术的兴趣和思考。

热门文章

最新文章