机器学习从零开始系列【第一话】线性回归与基础概念

有监督学习 (Supervised Learning)

  • Regression problem(回归问题)
  • Classicfication problem(分类问题)

Regression problem predict real-value output and Classicification predict discrete value ouput.

分类问题输出已知的离散预测值
回归问题输出实际的预测值

符号 (Notations)

(xi,yi) (x^i,y^i)
m = Number of training examples (样本总数量)
x = input features
y = output features

假设函数 (Hypothesis function)

Hypothesis function 是我们需要进行训练参数的那个函数。
比如:线性模型的假设函数
h(θ)=j=0nθjxj h(\theta) = \sum_{j = 0} ^n \theta_j x_j
我们通过大量的数据训练,给n个 θ\theta 找出最合适的值 θj\theta_j

损失函数 (Cost function)

我们到底怎样去给参数找出最合适的值呢?
想矫正需要做两件事情

  • 首先知道理想正确数值离我们目前数值的差距(这是损失函数能实现的)

  • 接着去靠近这个理想正确数值
    机器学习从零开始系列【第一话】线性回归与基础概念
    损失函数的作用就是让我们知道目前离理想正确数值到底有多大差距。
    比较常见的一个损失函数(用在线性回归中)

  • 均方差损失函数 J(θ0,θ1,θ2,...,θn)J(\theta_0,\theta_1,\theta_2,...,\theta_n)

J(θ0,θ1,θ2,...,θn)=12mi=0m(yihθ(xi))2 J(\theta_0,\theta_1,\theta_2,...,\theta_n) = \frac{1}{2m}\sum_{i = 0} ^m(y^i - h_\theta (x^i))^2

我们的目标就是寻找当 J(θ0,θ1,θ2,...,θn)J(\theta_0,\theta_1,\theta_2,...,\theta_n) 取最小值(损失最小)的时候,θ0,θ1,θ2,...,θn\theta_0,\theta_1,\theta_2,...,\theta_n的值是多少。

这就变成了一个求最值问题了。

我们利用两个变量的损失函数来示例:θ1,θ2\theta_1,\theta_2
机器学习从零开始系列【第一话】线性回归与基础概念
等高线图:
机器学习从零开始系列【第一话】线性回归与基础概念
在同一条等高线上的J值(损失)都是一样的

寻找最小值方法之——梯度下降算法 (Gradient descent)

为了解决最小值问题,我们需要利用梯度下降算法来不断迭代寻找,也就是实现上文所说的:让变量们去靠近这个理想正确数值

梯度下降算法:

θj:=αJ(θ0,θ1,θ2,...,θn)θj\theta_j:=\alpha\frac{\partial J(\theta_0,\theta_1,\theta_2,...,\theta_n)}{\partial\theta_j}

for θj\theta_j ​in range(0,n) #对每个变量进行一次梯度下降处理,中途仍然使用所在同一轮的参数值

α\alpha = 学习率(Learning rate)决定每一步迈出的大小

J(θ0,θ1,θ2,...,θn)θj\frac{\partial J(\theta_0,\theta_1,\theta_2,...,\theta_n)}{\partial\theta_j} = 偏导项 决定每一步迈的方向

我们会在高处开始,经过不断的迭代逐渐走进深渊:

机器学习从零开始系列【第一话】线性回归与基础概念

【偏导项】

思考:为什么偏导项能够决定每一次迭代的方向?
因为偏导项可以反映一个函数的增减性。
机器学习从零开始系列【第一话】线性回归与基础概念

【学习率】

学习率则是每一步迭代的大小,他的选择的大小决定了惩罚程度的大小,不能过大也不能过小,如果学习率过小,会导致迭代缓慢,若果过大,会导致迭代震荡。
机器学习从零开始系列【第一话】线性回归与基础概念
补充:变量的初始值选择有可能会导致梯度下降走向不同的谷点。
机器学习从零开始系列【第一话】线性回归与基础概念

【Batch】

Batch:Each step of gradient descent uses all the training examples
一个 Batch 指使用所有样本进行的一次迭代修正
我们在代码中所描述的batch_size,意思就是all training examples 的数量。
适当Batch Size使得梯度下降方向更加准确。