持续更新中... ...
0引言
最近开始读模式识别与机器学习1这本书。本文主要是梳理一下第一章的知识。然后对第一章习题做一下梳理。
写机器学习的书有很多,有李航老师的统计学习方法、周志华老师的机器学习导论(西瓜书)、还有就是今天用的这本模式识别与机器学习(Pattern Recognition and Machine Learning)。机器学习的书大体分为两类。概率派(统计机器学习)和贝叶斯派(概率图模型):李航老师的统计学习方法更加偏向于频率派,除了第一章的绪论和最后一章的总结,中间主要的内容有感、K、朴、决、逻、支、提、E、隐、条件等10章。而本本主要使用的模式识别与机器学习
主要是偏向贝叶斯学派的模型(当然也会介绍频率派的内容),本书书除了第一章的绪论和第二章的分布函数主要的内容有:回(回归)、分(分类)、神(神经网络)、核(核方法)、稀(稀疏核机)、图(图模型)、混(混合模型和EM算法)、近(近似推断)、采(采样方法)、连(连续潜在变量)、顺(顺序数据)、组(组合模型)。下面开始梳理第一章的知识。
最好具备的知识储备:线性代数、高等数学、数理统计、概率论等基础课程
需要的高级编程语言:C、C++、matlab、python、R等其中的一个即可(注:本文涉及的代码均使用R完成)。
1、基础的概念梳理
1.1机器学习的学习模式
根据是否有真值以及真值的多少分为有监督的学习模式、无监督的学习模式、半监督的学习
,此外除了这些还有强化学习(反馈学习)
的学习模式。是通过不断的改变策略,评估奖惩来选择最优的模式的。
常见的例子:
有监督的学习:回归,分类等有标签或者实际的数据。
无监督的学习:聚类、主成分等
半监督的学习:只有部分数据含有真值,我们的策略一般是,做无监督的模型,有真值的数据作为限制条件。
强化学习:阿尔法狗、深海等算法。
1.2训练数据与测试数据
在机器学习中为了训练一个更加实用的模型,防止过拟合的情况。通常会把数据分为训练数据和测试数据。一般的数据满足一下条件:
- 训练数据和测试数据互斥。换句话是不能有一条观测值即属于训练数据又属于测试数据。
- 训练数据和测试数据相互独立。
- 训练数据和测试数据来自同一分布。
1.3均方根误差(RMSE)和MSE均方误差
- RMSE:Root Mean Square Error,均方根误差是观测值与真值偏差的平方和与观测次数m比值的平方根。是用来衡量观测值同真值之间的偏差
- MAE Mean Absolute Error ,平均绝对误差是绝对误差的平均值能更好地反映预测值误差的实际情况.
- 标准差Standard Deviation ,标准差是方差的算数平方根是用来衡量一组数自身的离散程度
1.4泛化能力(generalization)
泛化能力是指训练出的模型对于新的数据集的一种适应的能力。换句话说就是模型的可推广性。
1.5预处理(pre-processed)
在做机器学习的模型中有一个板块叫预处理,也叫特征提取(featuer extraction)。
需要注意的是:做预处理需要同时对训练集和测试集做相同的处理。
2、正文内容
2.1、多项式模型的引入
2.1.1内容概要
多项式模型贯穿了整个第一章,也是第三章中线性基函数回归模型一种特殊形式。本书在(1.1节)
中引入了多项式回归模型,并通过示例来说明模式识别的一些主要的概念。
- 过拟合问题的出现
- 通过划分数据集合来评估模型
- 解决过拟合问题的两种方式:
– 使用贝叶斯的方法代替频率派的极大似然估计
好处:参数的有效数量数量会随着数据集的自动调整。
坏处:未知
– 增加惩罚项的正则方法(例如:岭回归)
好处:可以减少过拟合、简化模型形式
坏处:有可能会损失一些重要的信息。例如一般的稀疏主成分会比主成分得到的方差信息要少。
– 寻求更加复杂的非线性方法
好处:往往能够训练出相对于显示模型来说好的很多的精度。
坏处:不易操作,很难得到模型的机理。
在这一节也介绍了模型的形式,参数求解时是通过最小化误差函数的方法进行参数估计。
2.1.2代码推导
这部分附上一些R语言建模的部分代码,供大家学习使用。
# 生成数据
N <- 11 # 生成数据的个数
(x <- seq(0, 1, length.out = N)) # 赋值并输出构造自变量
set.seed(0) # 为结果的可重复性,添加随机种子
y <- sin(2*pi*x) + rnorm(N, 0, 0.2) # 构造y并添加噪声
plot(x,y)
# 建立模型
fit2 <- lm(y ~ poly(x, 2))
fit3 <- lm(y ~ poly(x, 3))
fit9 <- lm(y ~ poly(x, 9))
# fit <- lm(y ~ x + I(x^2) + I(x^3)) # 多项式模型也可以用这个命令
pre3 = predict(fit3,data.frame(x = x),interval='confidence',level=0.99)
pre2 = predict(fit2,data.frame(x = x),interval='confidence',level=0.99)
pre9 = predict(fit9,data.frame(x = x),interval='confidence',level=0.99)
# 模型效果
plot(x,y)
lines(x, sin(2*pi*x), col='deepskyblue4', lwd = 4)
lines(x, pre3[,1], col='green', lwd = 3)
lines(x, pre2[,1], col='red', lwd = 3)
lines(x, pre9[,1], col='blue', lwd = 3)
运行结果就不贴了。感兴趣的可以下载安装R自行探索。
2.2 概率和贝叶斯
2.2.3频率派VS贝叶斯派
3、习题的总结指导
4、参考文献
Christopher M. Bishop. Pattern Recognition and Machine Learning. ↩︎