统计学习方法||章1:统计学习方法概论

统计学习
  • 统计学习的对象
    data :计算机及互联网上的各种数字、文字、图像、视
    频、音频数据以及它们的组合。
    数据的基本假设是同类数据具有一定的统计规律性。

  • 统计学习的目的
    用于对数据(特别是未知数据)进行预测和分析

  • 统计学习的研究:
    统计学习方法
    统计学习理论(统计学习方法的有效性和效率和基本理论)
    统计学习应用

统计学习的方法
  • 分类:
    Supervised learning
    Unsupervised learning
    Semi-supervised learning
    Reinforcement learning
  • 监督学习要素:
    训练数据 training data
    模型 model ------- 假设空间 hypothesis
    评价准则 evaluation criterion -------- 策略 strategy
    算法 algorithm

算法,模型,策略三者之间的关系如何?

监督学习

Instance,feature vector,feature space

输入实例x的特征向量:


与 不同,后者表示多个输入变量中的第i个

训练集:


输入变量和输出变量:
分类问题、回归问题、标注问题

  • 联合概率分布
    假设输入与输出的随机变量X和Y遵循联合概率分布P(X,Y)
    P(X,Y)为分布函数或分布密度函数
    对于学习系统来说,联合概率分布是未知的,
    训练数据和测试数据被看作是依联合概率分布P(X,Y)独立同分布产生的。

  • 假设空间
    监督学习目的是学习一个由输入到输出的映射,称为模型
    模式的集合就是假设空间(hypothesis space)
    概率模型:条件概率分布P(Y|X), 决策函数:Y=f(X)

  • 问题的形式化:

统计学习三要素:

方法 = 模型+ 策略 + 算法

  • 模型:
    决策函数的集合:



    参数空间:


条件概率的集合:



参数空间:


  • 策略

损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。模型的结构风险函数包括了经验风险项和正则项,通常可以表示成如下式子:

其中,前面的均值函数表示的是经验风险函数,L代表的是损失函数,后面的是正则化项(regularizer)或者叫惩罚项(penalty term),它可以是L1,也可以是L2,或者其他的正则函数。整个式子表示的意思是找到使目标函数最小时的值

损失函数:一次预测的好坏
风险函数:平均意义下模型预测的好坏
0-1损失函数 0-1 loss function


平方损失函数 quadratic loss function


绝对损失函数 absolute loss function

对数损失函数 logarithmic loss function 或对数似然损失
函数 loglikelihood loss function


损失函数的期望


风险函数 risk function 期望损失 expected loss
由P(x,y)可以直接求出P(x|y),但不知道,


经验风险 empirical risk ,经验损失 empirical loss



策略:经验风险最小化与结构风险最小化
经验风险最小化最优模型



当样本容量很小时,经验风险最小化学习的效果未必很
好,会产生“过拟合over-fitting”
结构风险最小化 structure risk minimization,为防止过

拟合提出的策略,等价于正则化(regularization),加
入正则化项regularizer,或罚项 penalty term:

求最优模型就是求解最优化问题:


  • 算法:
    如果最优化问题有显式的解析式,算法比较简单
    但通常解析式不存在,就需要数值计算的方法
模型评估与模型选择

训练误差,训练数据集的平均损失



测试误差,测试数据集的平均损失


损失函数是0-1 损失时:


测试数据集的准确率:


过拟合与模型选择



正则化与交叉验证

正则化一般形式:

回归问题中:

交叉验证:
训练集 training set: 用于训练模型
验证集 validation set: 用于模型选择
测试集 test set: 用于最终对学习方法的评估
简单交叉验证
S折交叉验证
留一交叉验证

泛化能力 generalization ability

泛化误差 generalization error


泛化误差上界
比较学习方法的泛化能力------比较泛化误差上界
性质:样本容量增加,泛化误差趋于0
 假设空间容量越大, 泛化误差越大

监督学习的目的就是学习一个模型:
决策函数:Y=f(X)
条件概率分布:P(Y|X)
生成方法Generative approach 对应生成模型:generative model


朴素贝叶斯法和隐马尔科夫模型

生成模型与判别模型

判别方法由数据直接学习决策函数f(X)或条件概率分布
P(Y|X)作为预测的模型,即判别模型

  • Discriminative approach对应discriminative model

  • K近邻法、感知机、决策树、logistic回归模型、最大熵模
    型、支持向量机、提升方法和条件随机场。

各自优缺点:

  • 生成方法:可还原出联合概率分布P(X,Y), 而判别方法不能。生成方法的收敛速度更快,当样本容量增加的时候,学到的模型可以更快地收敛于真实模型;当存在隐变量时,仍可以使用生成方法,而判别方法则不能用。

  • 判别方法:直接学习到条件概率或决策函数,直接进行预测,往往学习的准确率更高;由于直接学习Y=f(X)或P(Y|X),可对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习过程。

分类问题

二分类评价指标
TP true positive
FN false negative
FP false positive
TN true negative

标注问题

标注:tagging, 结构预测:structure prediction
输入:观测序列, 输出:标记序列或状态序列
学习和标注两个过程

回归问题

回归模型是表示从输入变量到输出变量之间映射的函数.
回归问题的学习等价于函数拟合。
学习和预测两个阶段



例子:
标记表示名词短语的“开始”、“结束”或“其他”
(分别以B, E, O表示)
输入:At Microsoft Research, we have an insatiable
curiosity and the desire to create new technology that
will help define the computing experience.
输出:At/O Microsoft/B Research/E, we/O have/O
an/O insatiable/6 curiosity/E and/O the/O desire/BE
to/O create/O new/B technology/E that/O will/O
help/O define/O the/O computing/B experience/E.

回归学习最常用的损失函数是平方损失函数,在此情况
下,回归问题可以由 著名的最小二乘法(least squares)
求解。
股价预测

原文代码作者:[https://github.com/wzyonggege/statistical-learning-method](https://github.com/wzyonggege/statistical-learning-method)
中文注释制作:机器学习初学者
微信公众号:ID:ai-start-com
配置环境:python 3.6

高斯于1823年在误差e1 ,… , en独立同分布的假定下,证明了最小二乘方法的一个最优性质: 在所有无偏的线性估计类中,最小二乘方法是其中方差最小的!

使用最小二乘法拟和曲线

对于数据
拟合出函数
有误差,即残差:
此时L2范数(残差平方和)最小时,h(x) 和 y 相似度最高,更拟合

一般的H(x)为n次的多项式,
为参数
最小二乘法就是要找到一组 使得 (残差平方和) 最小
即,求

举例:我们用目标函数, 加上一个正太分布的噪音干扰,用多项式去拟合【例1.1 11页】

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):
    """
    n 为 多项式的次数
    """    
    # 随机初始化多项式参数
    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

# M=0
p_lsq_0 = fitting(M=0)

# M=1
p_lsq_1 = fitting(M=1)
# M=3
p_lsq_3 = fitting(M=3)
p_lsq_9 = fitting(M=9)
Fitting Parameters: [-1.16131784e+03  6.24530496e+03 -1.40754872e+04  1.71964006e+04
 -1.23931185e+04  5.42183514e+03 -1.41835541e+03  1.89325933e+02
 -4.78928113e+00  4.92045672e-02]

当M=9时,多项式曲线通过了每个数据点,但是造成了过拟合

正则化

在训练数据不够多时,或者overtraining时,常常会导致过拟合(overfitting)。正则化方法即为在此时向原始模型引入额外信息,以便防止过拟合和提高模型泛化性能的一类方法的统称。在实际的深度学习场景中我们几乎总是会发现,最好的拟合模型(从最小化泛化误差的意义上)是一个适当正则化的大型模型。

结果显示过拟合, 引入正则化项(regularizer),降低过拟合

回归问题中,损失函数是平方损失,正则化可以是参数向量的L2范数,也可以是L1范数。

  • L1: regularization*abs(p)

  • L2: 0.5 * regularization * np.square(p)

regularization = 0.0001

def residuals_func_regularization(p, x, y):
    ret = fit_func(p, x) - y
    ret = np.append(ret, np.sqrt(0.5*regularization*np.square(p))) # L2范数作为正则化项
    return ret
p_init = np.random.rand(9+1)
p_lsq_regularization = leastsq(residuals_func_regularization, p_init, args=(x, y))
p_lsq_regularization

(array([-1.16164605e+01, -1.38292061e+00,  6.89581620e+00,  1.12923920e+01,
         9.46547797e+00,  3.60580159e-02, -1.26565978e+01, -9.14375055e+00,
         6.95315250e+00,  1.06009764e-02]), 1)```
plt.plot(x_points, real_func(x_points), label='real')
plt.plot(x_points, fit_func(p_lsq_9[0], x_points), label='fitted curve')
plt.plot(x_points, fit_func(p_lsq_regularization[0], x_points), label='regularization')
plt.plot(x, y, 'bo', label='noise')
plt.legend()

参考
什么是感知机?
感知机:从原理到训练
机器学习-感知机perceptron
pandas: powerful Python data analysis toolkit
Python numpy函数:zeros()、ones()、empty()
Python 中的几种矩阵乘法 np.dot, np.multiply, *
Python中 init的通俗解释?
机器学习-损失函数

你可能感兴趣的:(统计学习方法||章1:统计学习方法概论)