统计学习
统计学习的对象
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的通俗解释?
机器学习-损失函数