【统计学习方法】 第1章 统计学习方法概论(二)
共 3438字,需浏览 7分钟
·
2021-01-28 22:33
点击上方“公众号”可订阅哦!
“如果我较早地了解这个公众号,也许我将有足够的时间来制定大统一理论。”
Albert Einstein
本篇继续介绍统计学习相关的概念。
1
●
正则化与交叉验证
正则化
模型选择的典型方法是正则化。正则化是结构风险最小化策略的实现,是在经验风险上添加一个正则化项或惩罚。
正则化一般具有如下形式:
其中第1项是经验风险,第2项是正则化项。
正则化项可以取不同的形式,
正则化项符合奥卡姆剃刀原理。奥卡姆剃刀原理应用于模型选择时变为以下想法:在所有可能选择的模型中,能够很好解释已知数据并且十分简单才是最好的模型。
交叉验证
另一种常用的模型选择方法是交叉验证。
如果给定的样本数据充足,进行模型选择的一种简单方法是随机地将数据集切分成三部分,分别为训练集、验证集和测试集。
但是在许多应用中的数据书不充足的,为了选择好的模型,可以采用交叉验证方法。交叉验证的基本想法是重复的使用数据,把给定的数据进行切分,将切分的数据集组合为训练集与测试集,在此基础上反复进行训练、测试以及模型选择。
简单交叉验证:首先随机将已给的数据划分为两部分,一部分作为训练集,另一部分作为测试集;然后用训练集在各种条件下训练模型,从而得到不同的模型;在测试集上评价各个模型的测试误差,选出测试误差最小的模型。
S折交叉验证:首先随机地将已给数据切分为S个互不相交的大小相同的子集;然后利用S-1个子集的数据训练模型,利用余下的子集测试模型;将这一过程对可能的S种选择重复进行;最后选择出S次测评中平均测试误差最小的模型。
留一交叉验证:S折交验证的特殊情形是S=N,称为留一交叉验证。
使用正则项,拟合曲线,
代码演示:
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_]
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
def fitting(M=0):
"""
M 为 多项式的次数
"""
# 随机初始化多项式参数
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_init = np.random.rand(9 + 1)
p_lsq_regularization = leastsq(residuals_func_regularization, p_init, args=(x, y))
p_lsq_9 = fitting(M=9)
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()
2
●
泛化能力
泛化误差
学习方法的泛化能力是指由该方法学习到的模型对未知数据的预测能力,是学习方法本质上的重要性质。
现实中采用最多的办法是通过测试误差来评价学习方法的泛化能力。
首先给出泛化误差的定义,
事实上,泛化误差就是所学习到的模型的期望风险。
3
●
生成模型与判别模型
监督学习的任务就是学习一个模型,应用这一模型,对给定的输入预测相应的输出。这一模型的一般形式为决策函数:
或者条件概率分布:
监督学习方法又可以分为生成方法和判别方法,所学到的模型分别称为生成模型和判别模型。
生成方法有数据学习联合概率分布,求出条件概率分布,即生成模型:
典型的生成模型有,朴素贝叶斯法和隐马尔可夫模型。
判别方法是由数据直接学习决策函数
典型的判别模型有,k近邻法、感知机、决策树、逻辑斯谛回归模型、最大熵模型、支持向量机、提升方法和条件随机场等。
4
●
分类问题
分类是监督学习的一个核心问题。在监督学习
分类问题包括学习和分类两个过程。在学习过程中,根据已知的训练数据集利用有效的学习方法学习一个分类器;在分类过程中,利用学习的分类器对新输入的实例进行分分类。
许多统计学习方法可以用于分类,包括k近邻法、感知机、朴素贝叶斯法、决策树、决策列表、逻辑斯谛回归模型、支持向量机、提升方法、贝叶斯网络、神经网络等。
分类在于根据其特性将数据“分门别类”。例如,在银行业务领域,可以构建一个客户分析模型;在网络安全领域,可以利用日志数据的分类对非法入侵进行检测;在图像处理中,分类可以用来检测图像中是否有人脸出现;在互联网搜索中,网页的分类可以帮助网页的抓取、索引与排序。
5
●
标注问题
标注也是一个监督学习方法。可以认为标注问题是分类问题的一个推广,标注问题又是更复杂的的结构预测问题的简单形式。标注问题输入的是一个观测序列,输出是一个标记序列或状态序列。
标注常用的统计学习方法有:隐马尔可夫模型、条件随机场。
标注问题在信息抽取、自然语言处理等领域被广泛应用,是这些领域的基本问题。
6
●
回归问题
回归是监督学习的另一重要问题。回归用于预测输入变量和输出变量之间的关系,特别是当输入变量的值发生变化时,输出变量的值随之发生的变化。
回归模型正是表示从输入变量到输出变量之间映射的函数。
回归问题按照输入变量的个数,分为一元回归和多元回归;按照输入变量和输出变量之间的关系的类型分为,线性回归和非线性回归。
回归学习最常用的损失函数就是平凡损失函数,在此情况下,回归问题可以由著名的最小二乘法求解。
许多领域的任务都可以形式化为回归问题,比如,回归问题可以用于商务领域,作为市场趋势预测,产品质量管理、客户满意度调查、投资风险分析的工具。
END
扫码关注
微信号|sdxx_rmbj