3.1 线性回归
Posted AncilunKiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.1 线性回归相关的知识,希望对你有一定的参考价值。
3.1.1 线性回归的基本元素
整节理论知识,详见书本。
3.1.2 向量加速化
%matplotlib inline
import math
import time
import numpy as np
import torch
from d2l import torch as d2l
# 以后常用的计时器
class Timer: #@save
"""记录多次运行时间"""
def __init__(self):
self.times = []
self.start()
def start(self):
"""启动计时器"""
self.tik = time.time()
def stop(self):
"""停止计时器并将时间记录在列表中"""
self.times.append(time.time() - self.tik)
return self.times[-1]
def avg(self):
"""返回平均时间"""
return sum(self.times) / len(self.times)
def sum(self):
"""返回时间总和"""
return sum(self.times)
def cumsum(self):
"""返回累计时间"""
return np.array(self.times).cumsum().tolist()
在训练模型时为了实现同时处理整个小批量样本需要对计算进行向量化,从而利用线性代数库,而不是使用开销巨大的 for 循环。
以下比较两种方法的时间开销:第一种方法用 for 循环逐个执行加法,第二种方法使用重载的 + 运算符(向量加法)。
n = 100000
a = torch.ones(n)
b = torch.ones(n)
c = torch.zeros(n)
timer = Timer()
for i in range(n):
c[i] = a[i] + b[i]
f\'timer.stop():.5f sec\'
\'1.73559 sec\'
timer.start()
d = a + b
f\'timer.stop():.5f sec\' # 按书上一万位的话向耗时甚至显示为0,向量化带来数量级级别的明显加速。
\'0.00100 sec\'
3.1.3 正态分布与平方损失
正态分布(normal distribution)概率密度函数:
def normal(X, mu, sigma): # 计算正态分布
p = 1 / math.sqrt(2 * math.pi * sigma**2)
return p * np.exp(-0.5 / sigma**2 * (X - mu)**2)
正态分布改变均值会产生沿 X 轴的偏移,增加方差会分散分布并降低峰值。
x = np.arange(-7, 7, 0.01)
params = [(0, 1), (0, 2), (3, 1)] # 均值和标准差对
d2l.plot(x, [normal(x, mu, sigma) for mu,sigma in params],
xlabel=\'x\', ylabel=\'p(x)\', figsize=(4.5, 2.5),
legend=[f\'mean mu, std sigma\' for mu,sigma in params])
在高斯噪声(正态分布)的假设下,最小化均方误差等价与对线性模型的极大似然估计。(具体推到详见课本)
3.1.4 从线性回归到深度网络
整节理论知识,详见书本。
练习
(1)假设我们有一些数据 \\(\\boldsymbol\\boldsymbol\\boldsymbolx_1,x_2,\\dots,x_n\\in\\mathbbR\\)。我们的目标是找到一个常数 \\(b\\),使得最小化 \\(\\sum_i(x_i-b)^2\\)。
a. 找到最优值的解析解。
b. 这个问题及其解与正态分布有什么关系?
a. 令 \\(l(b)=\\sum^n_i=0(x_i-b)^2\\),对 \\(b\\) 求导得:
令导数等于 0,则:
得 \\(b\\) 的解析解为:
b. 此问题实际为最小化均方误差,在正态分布中其等价于对线性模型的极大似然估计,即若 \\(x_1,x_2,\\dots,x_n\\in N(\\mu,\\sigma^2)\\) 则 \\(b=\\sigma\\)。
(2)推导出使用平方误差的线性回归优化问题的解析解。为了简化问题,可以忽略偏置 \\(b\\)(我们可以通过向 \\(\\boldsymbolX\\) 添加所有值为 1 的一列来做到这一点)。
a. 用矩阵和向量表示法写出优化问题(将所有数据视为单个矩阵,将所有目标值视为单个向量)。
b. 计算损失对 \\(\\boldsymbolw\\) 的梯度。
c. 通过将梯度设为 0 并求解矩阵方程来找到解析解。
d. 什么时候可能比使用随机梯度下降更好?这种方法何时会失效?
a. 令 \\(\\hat\\boldsymboly = \\boldsymbolXW\\),则
b.
则求导得:
c. 令梯度等于 0 得:
若 \\(\\boldsymbolX^T\\boldsymbolX\\) 可逆则:
d. 由上式可知,若 \\(\\boldsymbolX^T\\boldsymbolX\\) 不可逆则解析解方法失效。
(3)假定控制附加噪声 \\(\\epsilon\\) 的噪声模型呈指数分布,也就是 \\(p(\\epsilon)=\\frac12\\exp\\left(-|\\epsilon|\\right)\\)。
a. 写出模型 \\(-\\logP(\\boldsymboly|\\boldsymbolX)\\) 下数据的负对数似然。
b. 请试着写出解析解。
c. 提出一种随机梯度下降算法来解决这个问题,哪里可能出错?(提示:当我们不断更新参数时,在驻点附近会发生什么情况)请尝试解决这个问题。
a. 令 \\(y=\\boldsymbolw^T\\boldsymbolx+b+\\epsilon\\)
噪声模型呈指数分布则:
则
则
b. 有绝对值,应该是不可导得
c. 取平方就可导了
逻辑回归原理
逻辑回归原理基本概念1. 什么是逻辑回归
逻辑回归就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏。
Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别)
回归模型中,y是一个定性变量,比如y=0或1,logistic方法主要应用于研究某些事件发生的概率
2. 逻辑回归的优缺点
优点:
1)速度快,适合二分类问题
2)简单易于理解,直接看到各个特征的权重
3)能容易地更新模型吸收新的数据
缺点:
对数据和场景的适应能力有局限性,不如决策树算法适应性那么强
3. 逻辑回归和多重线性回归的区别
Logistic回归与多重线性回归实际上有很多相同之处,最大的区别就在于它们的因变量不同,其他的基本都差不多。正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalizedlinear model)。
这一家族中的模型形式基本上都差不多,不同的就是因变量不同。这一家族中的模型形式基本上都差不多,不同的就是因变量不同。
如果是连续的,就是多重线性回归
如果是二项分布,就是Logistic回归
如果是Poisson分布,就是Poisson回归
如果是负二项分布,就是负二项回归
4. 逻辑回归用途
寻找危险因素:寻找某一疾病的危险因素等;
预测:根据模型,预测在不同的自变量情况下,发生某病或某种情况的概率有多大;
判别:实际上跟预测有些类似,也是根据模型,判断某人属于某病或属于某种情况的概率有多大,也就是看一下这个人有多大的可能性是属于某病。
5. Regression 常规步骤
寻找h函数(即预测函数)
构造J函数(损失函数)
想办法使得J函数最小并求得回归参数(θ)
6. 构造预测函数h(x)
1) Logistic函数(或称为Sigmoid函数),函数形式为:


对于线性边界的情况,边界形式如下:

其中,训练数据为向量

最佳参数

构造预测函数为:

函数h(x)的值有特殊的含义,它表示结果取1的概率,因此对于输入x分类结果为类别1和类别0的概率分别为:
P(y=1│x;θ)=h_θ (x)
P(y=0│x;θ)=1-h_θ (x)
7.构造损失函数J(m个样本,每个样本具有n个特征)
Cost函数和J函数如下,它们是基于最大似然估计推导得到的。

8. 损失函数详细推导过程
1) 求代价函数
概率综合起来写成:

取似然函数为:

对数似然函数为:

最大似然估计就是求使l(θ)取最大值时的θ,其实这里可以使用梯度上升法求解,求得的θ就是要求的最佳参数。
在Andrew Ng的课程中将J(θ)取为下式,即:

2) 梯度下降法求解最小值

θ更新过程可以写成:

9. 向量化
ectorization是使用矩阵计算来代替for循环,以简化计算过程,提高效率。
向量化过程:
约定训练数据的矩阵形式如下,x的每一行为一条训练样本,而每一列为不同的特称取值:
g(A)的参数A为一列向量,所以实现g函数时要支持列向量作为参数,并返回列向量。
θ更新过程可以改为:

综上所述,Vectorization后θ更新的步骤如下:
求 A=x*θ
求 E=g(A)-y
求
10.正则化
(1) 过拟合问题
过拟合即是过分拟合了训练数据,使得模型的复杂度提高,繁华能力较差(对未知数据的预测能力)
下面左图即为欠拟合,中图为合适的拟合,右图为过拟合。

(2)过拟合主要原因
过拟合问题往往源自过多的特征
解决方法
1)减少特征数量(减少特征会失去一些信息,即使特征选的很好)
• 可用人工选择要保留的特征;
• 模型选择算法;
2)正则化(特征较多时比较有效)
• 保留所有特征,但减少θ的大小
(3)正则化方法
正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项或惩罚项。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化项就越大。
正则项可以取不同的形式,在回归问题中取平方损失,就是参数的L2范数,也可以取L1范数。取平方损失时,模型的损失函数变为:
lambda是正则项系数:
• 如果它的值很大,说明对模型的复杂度惩罚大,对拟合数据的损失惩罚小,这样它就不会过分拟合数据,在训练数据上的偏差较大,在未知数据上的方差较小,但是可能出现欠拟合的现象;
• 如果它的值很小,说明比较注重对训练数据的拟合,在训练数据上的偏差会小,但是可能会导致过拟合。 参考技术A logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p 与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。[1]
logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。[1]
Logistic回归模型的适用条件
1 因变量为二分类的分类变量或某事件的发生率,并且是数值型变量。但是需要注意,重复计数现象指标不适用于Logistic回归。
2 残差和因变量都要服从二项分布。二项分布对应的是分类变量,所以不是正态分布,进而不是用最小二乘法,而是最大似然法来解决方程估计和检验问题。
3 自变量和Logistic概率是线性关系
4 各观测对象间相互独立。[2]
原理:如果直接将线性回归的模型扣到Logistic回归中,会造成方程二边取值区间不同和普遍的非直线关系。因为Logistic中因变量为二分类变量,某个概率作为方程的因变量估计值取值范围为0-1,但是,方程右边取值范围是无穷大或者无穷小。所以,才引入Logistic回归。[2]
Logistic回归实质:发生概率除以没有发生概率再取对数。就是这个不太繁琐的变换改变了取值区间的矛盾和因变量自变量间的曲线关系。究其原因,是发生和未发生的概率成为了比值 ,这个比值就是一个缓冲,将取值范围扩大,再进行对数变换,整个因变量改变。不仅如此,这种变换往往使得因变量和自变量之间呈线性关系,这是根据大量实践而总结。所以,Logistic回归从根本上解决因变量要不是连续变量怎么办的问题。还有,Logistic应用广泛的原因是许多现实问题跟它的模型吻合。例如一件事情是否发生跟其他数值型自变量的关系。[2]
注意:如果自变量为字符型,就需要进行重新编码。一般如果自变量有三个水平就非常难对付,所以,如果自变量有更多水平就太复杂。这里只讨论自变量只有三个水平。非常麻烦,需要再设二个新变量。共有三个变量,第一个变量编码1为高水平,其他水平为0。第二个变量编码1为中间水平,0为其他水平。
以上是关于3.1 线性回归的主要内容,如果未能解决你的问题,请参考以下文章