机器学习笔记是我这学期在上”统计学习”这门课时学习到的内容的一个总结.因为过往很多学过的知识,现在大多都已经忘掉了,而统计机器学习的内容则很重要,我可不能再上过就忘掉,所以在复习的时候把这些内容都记录下来,以便以后查阅.
策略是模型选择的准则,为了量化模型的好坏,我们定义了损失函数和风险函数
损失函数(Loss function):也叫代价函数(Cost function),用来度量模型对于一个输入X
产生的预测值f(x)
与真实值Y
之间的差异的大小.常见的损失函数有:
风险函数是损失函数的期望,即将模型的输入输出XY
作为随机变量,风险函数就是模型f(X)
关于联合分布P(X,Y)
的平均意义下的损失.风险函数的值越小,表示模型预测结果越准确,这种模型就越好,所以机器学习的目的就是最小化风险函数(Rish miniization).需要注意的是:P(X,Y)
是未知的
如果给定数据集,我们可以计算在该数据集上的平均损失,这个损失定义为经验风险.经验风险在数据量足够大的时候,能很好的近似期望风险,但在数据量较少的时候误差会比较大.
在经验风险的基础上,加上表示模型复杂度的正则化项,则构成结构风险.结构风险能有效的防止过拟合,因为结构风险要求经验风险和模型复杂度同时都小.
分类算法:
聚类算法:
回归算法:
关联分析算法:
降维算法:
在训练模型的时候,有的时候需要选择不同的复杂度(.如不同参数的个数).来训练,不同的复杂度体现了模型对训练数据的拟合程度. 如果参数过少,模型过于简单,则模型不能很好的拟合训练数据,这种情况称为欠拟合,很显然,欠拟合因为连训练数据的规律都没有学习到,所以对于预测,性能肯定不会太好. 另一方面,如果参数太多,模型过于复杂,则对训练数据可以做到特别好的拟合,但由于训练数据是有噪声和误差的,这种情况会将训练数据的噪声和误差都考虑进来,在测试集上性能反而会下降.下面是训练误差和测试误差与模型复杂度的关系
学习的最终目的是预测,即学习一个模型,使得对未知数据能很好地预测.在实际操作中,一般将数据集分为3部分:训练集,验证集和测试集.为了验证在训练集上学习到的模型好坏,需要现在验证集上进行验证.实际中数据总是不充足的,所以需要重复使用数据,采用交叉验证的方法.最常用的交叉验证方法是S折交叉验证方法. S折交叉验证方法(S-fold cross validation):随机地将数据切分为S个互不相交的子集,然后利用S-1个子集的数据训练模型,利用余下的1个子集作为测试集.测试集的选择有S中情况,所以这种验证可以进行S次.对每个模型,都进行S次训练和验证,然后求出平均测试误差,将平均测试误差最小的模型作为最优模型. 当数据量特别少的时候,我们将每个数据分为一个子集,即如果有N个数据,则S=N,这种方法称为留一交叉验证(Leave-one-out cross validation).
生成式方法:对于某个给定的输入X
,先学习得到联合分布P(X,Y)
,再计算P(Y|X)
,也即该方法考虑给定输入X
,输出Y
是怎么生成的,要求得到一个关于整体的信息,即对P(X,Y)
进行建模.
生成式方法应用更广,适用于各种机器学习问题,而且收敛速度快,而且对于有隐变量的情况,也适用.但由于需要建模XY
的联合分布,所以不能进行降维处理.
常见的生成式模型有朴素贝叶斯法和隐马尔科夫模型.
判别式方法:对于某个给定的输入X
,直接给出预测值f(X)
或P(Y|X)
.该方法关注的是对于给定的输入X
,应该预测什么样的输出Y
,而不用去考虑数据整体的分布这些信息,即对P(Y|X)
建模.
常见的判别模型有KNN,感知机,决策树,逻辑斯蒂回归,最大熵模型,SVM,AdaBoost,条件随机场等.
判别式方法只能用于分类和回归问题,可以对X
进行降维处理.