机器学习--线性回归

数据驱动 = 数据 + 模型

模型 = 假设函数(f)+ 优化

优化 = loss function + optimization algorithm

A.单变量线性回归

为了测试机器学习算法的效果,通常使用两套独立的样本集:训练集和测试集。当机器学习程序开始运行时,使用训练集作为算法的输入,训练完成之后的那个东西叫模型,我们可以借助模型,通过输入测试集来预测目标变量。比较预测出来的目标变量和实际目标变量之间的差别,就可以算出算法的实际精确度。

为了描述训练集,我们一般做以下规定:

𝑚 代表训练集中实例的数量

𝑥 代表特征/输入变量

𝑦 代表目标变量/输出变量

(𝑥, 𝑦) 代表训练集中的实例

代表第𝑖 个观察实例

ℎ 代表学习算法的解决方案或函数也称为假设(hypothesis)

表达方式为:ℎ𝜃 (𝑥) = 𝜃0 + 𝜃1𝑥

我们用假设函数来表示我们预测结果的模型,但模型有好坏和差异,这里我们用损失函数来表示:

 

通过训练集我们可以得到假设函数h,即我们建立的模型,y是测试集。通过输入测试集的自变量向函数h和y,得出预测出来的结果与实际的结果,让两者相减得到误差,通过误差可以看出我们预测的结果好还是不好,如果误差小于某一个极小数时,我们可以认为我们建立的模型非常成功,反之则是失败。求和的目的是把所有预测值的误差加起来,平方的目的是保证求和的时候,误差是正数,除以m是求平均误差,除以2是为了今后对代价函数求导方便的一种手段。

EG:

 

 

该图以点(1,1),(2,2),(3,3)作为数据集,我们要找到的假设函数要尽量拟合该数据,假设我们这里有两个假设函数 h1 = 1/2x 和 h2 = x ,对应的损失函数分别为 J1(0,0.5),J(0,1) ,通过对比这两个式子可知,当取损失函数最小值时,误差最小,假设函数拟合的最好。

这里介绍一种求损失函数最小值常用的一种方法:梯度下降(迭代法)

 

 推导:

 

 

 

α(学习率)不应过大,可能跳过最低点,过小时间消耗多,速度慢,α为超参数

𝑎是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向 向下迈出的步子有多大,在批量梯度下降中,我们每一次都同时让所有的参数减去学习速率乘以代价函数的导数。

批量梯度下降的具体实现的步骤如下所示:

 

先初始化当前所在位置,根据公式计算出梯度下降一步之后的位置,然后再以此位置为基础,让参数值减去学习率乘以该点的导数,得出再梯度下降一步之后的位置,即新的参数值。重复上面的步骤直到走到最低点。在此过程中,我们发现随着梯度下降法的运行,点移动的幅度会越来越小,这是因为,点越往下走,导数的值越小,而a不变,所以步幅会减小。

ps:过拟合问题(难):如果我们有非常多特征/模型很复杂,我们的假设函数曲线可以对原始数据拟合的非常好(即损失函数值约等于0),但丧失了一般性,从而对新的待预测样本预测效果差。

⽋拟合与过拟合实例:

import numpy as np
import scipy as sp
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
%matplotlib inline

def real_func(x):
 return np.sin(2 * np.pi * x)
 
def fit_func(p, x):
 f = np.poly1d(p)
 return f(x)
 
def residuals_func(p, x, y):
 ret = fit_func(p, x) - y
 return ret

x = np.linspace(0, 1, 10)
x_points = np.linspace(0, 1, 1000)
y_ = real_func(x)
y = [np.random.normal(0, 0.1) + y1 for y1 in y_]

def fitting(M=0):
 p_init = np.random.rand(M + 1)
 p_lsq = leastsq(residuals_func, p_init, args=(x, y))
 print('Fitting Parameters:', p_lsq[0])

def fitting(M=0): 
 p_init = np.random.rand(M + 1)  
 p_lsq = leastsq(residuals_func, p_init, args=(x, y)) 
 print('Fitting Parameters:', p_lsq[0])
 
 plt.plot(x_points, real_func(x_points), label='real')
 plt.plot(x_points, fit_func(p_lsq[0], x_points), label='fitted curve')
 plt.plot(x, y, 'bo', label='noise')
 plt.legend()
 return p_lsq
 
p_lsq_0 = fitting(M=0)
  
p_lsq_1 = fitting(M=1)

p_lsq_3 = fitting(M=3)

M = 0

 M = 1

 M = 3

 正则化:控制参数幅度,限制参数搜索空间

正则化和逻辑(斯蒂)回归后面会讲

B.多变量线性回归

相较于单变量线性回归,多变量线性回归对模型增加了更多的特征

 

增加规定:

n 代表特征的数量

代表特征矩阵中第 𝑖 行的第 𝑗 个特征,也就是第 𝑖 个训练实例的第 𝑗 个特征。

假设函数表示方式为:

 这个公式中有n+1个参数和n个变量,为了能够使公式简化一些,引入X0=1(表示截距项),则公式转化为:

 此时该模型中的参数和变量都是n+1维的向量(向量化表示),可以写成如下的形式:

最小化多元损失函数:

 

模型策略

损失函数:度量模型预测错误的程度,是模型的预测输出𝑓 (𝐗)和实际输出𝑌 的⾮负实值函数,记作𝐿 (𝑌 , 𝑓 (𝐗))。

0-1损失函数

𝐿 (𝑌 , 𝑓 (𝐗)) = {1, 𝑌 ≠ 𝑓 (𝐗)

0, 𝑌 = 𝑓 (𝐗)

= 𝐼(𝑌 ≠ 𝑓 (𝐗))

其中,𝐼 (⋅) 是指示函数,当括号中条件成⽴返回 1,否则返回 0。

平⽅损失函数

𝐿 (𝑌 , 𝑓 (𝐗)) = (𝑌 − 𝑓 (𝐗) ^ 2

绝对值损失函数

𝐿 (𝑌 , 𝑓 (𝐗)) = |𝑌 − 𝑓 (𝐗)|

对数似然损失函数

𝐿 (𝑌 , 𝑃 (𝑌 |𝐗)) = − log 𝑃 (𝑌 |𝐗)

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值