一、统计学习的定义与分类
1.统计学习的定义
统计学习(Statistical Machine Learning)是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科。
2.统计学习方法的步骤
1.得到一个有限的训练数据集合
2.确定学习模型(模型)
3.确定模型选择的准则(策略)
4.实现求解最优模型的算法(算法)
5.通过学习方法选择最优模型
6.利用学习的最优模型对新数据进行预测或分析
以上的模型,策略,算法称为统计学习的三要素,后续会详细介绍。
3.统计学习的分类
二、统计学习方法的基本分类
1.监督学习(Supervised Learning)
监督学习(Supervised Learning)是指从标注数据中学习预测模型的机器学习问题,其本质是学习输入到输出的映射的统计规律。
即求f。
接下来介绍一些监督学习的基本概念。
输入空间(Input Space):输入的所有可能取值的集合。
实例(Instance):每一个具体的输入,通常由特征向量(Feature Vector)表示。
特征空间(Feature Space):所有特征向量存在的空间。
根据变量类型的不同:
输入变量与输出变量均为连续变量(回归问题)。
输出变量为有限个离散变量(分类问题)。
输入变量与输出变量均为变量序列(标注问题)。
监督学习的基本假设:X和Y具有联合概率分布P(X, Y)。
目的:学习一个输入到输出的映射,这一映射以模型的形式,条件概率分布P(Y|X)或决策函数Y=f(X)。
假设空间(Hypothesis Space):所有这些可能模型的集合。
2.无监督学习(Unsupervised Learning)
无监督学习(Unsupervised Learning)是指从无标注数据中学习预测模型的机器学习问题,其本质是学习数据中的统计规律或潜在结构。
接下来介绍一些无监督学习的基本概念:
输入空间:X
隐式结构空间:Z
模型:Z=g(x),P(Z|X)或P(X|Z)
假设空间:所有这些可能模型的集合
目的:选出在给定评价标准下的最优模型
样本容量为N的训练集:
3.强化学习(Reinforcement Learning)
强化学习(Reinforcement Learning),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。
三、统计学习方法的三要素
1.模型(监督学习)
假设空间:F
决策函数的集合
若定义为决策函数的集合:
F由一个参数向量决定的函数族构成:
参数空间:
条件概率的集合
若定义为条件概率的集合:
F由一个参数向量觉得的条件概率分布族构成:
2.策略(监督学习)
通过策略选择模型。
1.损失函数:度量模型一次预测的好坏,记作
2.风险函数:度量平均意义下模型预测的好坏,
3.经验风险:模型关于训练集的平均损失,
四种常见的损失函数
0-1损失函数:
平方损失函数: 绝对损失函数:
对数损失函数:
当数据集趋于无穷时,可以用经验风险近似表示风险函数,即。
选择最优模型的过程就是风险最小化的过程。
经验风险最小化
即
当经验风险最小化时,容易出现过拟合现象,即模型过于贴合训练数据,表现为模型在预测训练数据时效果非常好,而预测新数据时效果非常差。
这时我们要加入一个惩罚项,也可以说是噪音,惩罚项的选择是根据模型的复杂程度的,模型越复杂惩罚项越大,模型越简单惩罚项越小。引入惩罚项后的风险称为结构风险,与之对应的就是结构风险最小化。
结构风险最小化
3.算法(监督学习)
在假设空间内选择最优的模型,其根据是策略,而具体的操作就是算法。
若优化问题存在显示解析式,算法简易。而大部分情况,不存在解析式,就需要数值计算方法,比如梯度下降法。
无监督学习的三要素
模型:函数 Z=g(x),P(Z|X)或P(X|Z)
策略:优化目标函数
算法:通常是迭代算法
四、模型评估和选择
1.训练误差和测试误差
训练误差即模型在训练集上的误差,y和x分别表示训练标签和训练数据,测试误差同理。
误差率 (Error Rate)
准确率(Accuracy)
其中,
过拟合和欠拟合
过拟合:过拟合是指模型在训练数据上的表现很好,但在测试数据上的表现较差。这是因为模型过于复杂,学习到了训练数据中的噪声和异常值,而没有学到真正的潜在规律。过拟合的模型通常具有较低的泛化能力,即在新的数据上的表现不佳。
欠拟合:欠拟合是指模型在训练数据和测试数据上的表现都不好。这是因为模型过于简单,无法捕捉到数据中的潜在规律和特征。欠拟合的模型通常具有较低的拟合能力和泛化能力。
如下图所示:
另外给出绘制代码,仅供参考:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
np.random.seed(0)
n_samples = 30
X = np.sort(np.random.rand(n_samples))
y = np.sin(2 * np.pi * X) + np.random.randn(n_samples) * 0.1
degrees = [1, 4, 15]
titles = ['欠拟合', '合适', '过拟合']
plt.figure(figsize=(14, 5))
for i in range(len(degrees)):
ax = plt.subplot(1, len(degrees), i + 1)
plt.setp(ax, xticks=(), yticks=())
polynomial_features = PolynomialFeatures(degree=degrees[i], include_bias=False)
linear_regression = LinearRegression()
pipeline = Pipeline([("polynomial_features", polynomial_features),
("linear_regression", linear_regression)])
pipeline.fit(X[:, np.newaxis], y)
scores = cross_val_score(pipeline, X[:, np.newaxis], y, scoring="neg_mean_squared_error", cv=10)
print("Degree {}: Mean squared error = {:.2f} (+/- {:.2f})".format(degrees[i], -scores.mean(), scores.std()))
X_test = np.linspace(0, 1, 100)
plt.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label="Model")
plt.plot(X_test, np.sin(2 * np.pi * X_test), label="True function")
plt.scatter(X, y, edgecolor='b', s=20, label="Samples")
plt.xlabel("x")
plt.ylabel("y")
plt.xlim((0, 1))
plt.ylim((-2, 2))
plt.legend(loc="best")
plt.title(titles[i])
plt.show()
如图所示,模型越发杂,训练误差越小,测试误差越大。即模型越复杂越拟合训练集,但这并不好,因为面对新数据时效果极差。
在选择模型时,应该遵循奥卡姆剃刀原理
奥卡姆剃刀原理:在模型选择时,选择所有可能模型中,能很好解释已知数据并且十分简单的模型。
五、正则化与交叉验证
1.正则化
正则化:实现结构风险最小化的策略。
它的一般形式是:
其中称为正则化项,正则化项有多种形式,现讨论最常见的两种。
L1范数
其中
L2范数
其中
不了解L1范数和L2范数可以自行查阅资料。
2.交叉验证
正常数据充足的情况下,我们会把数据集分为训练集、验证集、测试集。
训练集(Training Set):用以训练模型。
验证集(Validation Set):用以选择模型。
测试集(Test Set):用以最终对学习方法的评估。
而在数据不足的情况下,有这几种方法可以使用:
简单交叉验证:
只使用训练集和测试集。
用训练集取训练模型,用测试集去评估模型,最终选择测试误差最小的模型为最优模型。
S折交叉验证:
随机将数据分为S个互不相交、大小相同的子集,其中以S-1个子集为训练集,余下的1个子集为测试集,比如分成10个子集,用让第一个子集为测试集,其余9个子集为训练集,训练一个模型,然后再用第二个子集为测试集,其余9个子集为训练集,以此类推。
留一交叉验证:
是S折交叉验证的特殊情况,当S=N时,即每个数据都是一个子集。
六、泛化能力
1.泛化误差(Generalization Error)
如果所学习到的模型是
,那么这个模型对未知数据预测的误差即为泛化误差。
数学表示为:
![]()
2.泛化误差上界(Generalization Error Bound)
泛化误差上界(Generalization Error Bound) :指泛化误差的概率上界。两种学习方法的优劣,通常通过他们的泛化误差上界进行比较。
性质:
样本容量增加,泛化上界趋于零。(过拟合)
假设空间越大,模型就越难学,泛化误差上界就越大。
七、生成模型与判别模型
1.生成模型 (Generative Model)
由数据学习联合分布概率
,然后求出
作为预测模型,即生成模型。
对应公式:
典型的生成模型:朴素贝叶斯法、隐马尔可夫模型
2.判别模型(Discriminative Model)
由数据直接学习决策函数f(X)或者条件概率分布P(Y|X)作为预测模型,即判别模型。
典型的判别模型:K邻近法、感知机、决策树
3.两者对比
生成方法:可还原出联合概率分布P(X,Y), 而判别方法不能。 生成方法的收敛速度更快,当样本容量增加的时候,学到的模型可以更快地收敛于真实模型;当存在隐变量时,仍可以使用生成方法,而判别方法则不能用。
判别方法:直接学习到条件概率或决策函数,直接进行预测,往往学习的准确率更高;由于直接学习Y=f(X)或P(Y|X),可对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习过程。