概述
一.“没有免费的午餐”(no free lunch,NFL)定理简单易懂的解释:
1、一种算法(算法A)在特定数据集上的表现优于另一种算法(算法B)的同时,一定伴随着算法A在另外某一个特定的数据集上有着不如算法B的表现;
2、具体问题(机器学习领域内问题)具体分析(具体的机器学习算法选择)。
二.模型评估方法:
1、留出法:将数据集划分为互斥的训练集和测试集。训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,从采样角度来说,保留类别比例的采样方式通常称为“分层采样”。使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。问题:测试集小时,评估结果的方差较大;训练集小时,评估结果的偏差较大。
2、交叉验证法:先将数据集D划分为k个大小相似的互斥子集,每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到。每次采用k-1个子集的并集作为训练集,余下的那个子集作为测试集,这样就可获得k组训练/测试集,从而可以进行k次训练和测试,最终返回的是这k个测试结果的均值。k常取10,此时称为10折交叉验证。为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值,例如常见的“10次10折交叉验证”。假定数据集D中包含m个样本,若令k=m,此时为交叉验证的一个特例:留一法(留一交叉验证)。问题:留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差;留一法中被实际评估的模型与期望评估的用D训练出的模型很相似,评估结果被认为更准确,但复杂度太高了。
3、自助法:通过自助采样(bootstrap),即有放回的采样,重复执行m次,得到数据集D',将D'作为训练集,D-D'(集合的减法)作为测试集(D中会有大约三分之一的样本未出现在D'中),这样实际评估的模型与期望评估的模型都使用了m个训练样本。问题:自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。
总结:自助法在数据量较小、难以有效划分训练/测试集时很有用;在初始数据量足够时,留出法和交叉验证法更常用一些。
三.线性回归主要是解决回归问题,而逻辑回归主要是解决分类问题。
线性回归最优化参数:梯度下降法;正规方程法
正规方程法:
逻辑回归最优化参数:梯度下降法
四.outlier:离群点(正常的点) anomaly:异常点
重复值检测:滑动窗口法(前提:类似的、可能重复的数据在数据库中是相邻存放的)
高斯分布:坐标轴中的点近似成椭圆形 比如:
五.贝叶斯公式:
朴素贝叶斯是一类基于应用贝叶斯定理的机器学习分类器,它假设输入数据的特征都是独立的。这是一个很强的假设,或者说“朴素的”假设,其名称正来源于此。
设A,B为随机事件,若同时发生的概率等于各自发生的概率的乘积,则A,B相互独立。
六.Logistic regression和SVM适用情况对比:
需要注意的是,在使用Gaussian核函数之前需要进行feature scaling(特征缩放)。
SVC(kernel = 'rbf'):表示算法使用高斯(径向机)核函数,默认即为rbf,其他还有poly、linear(即无核函数)、sigmoid等选择。
七. high bias:高偏差(欠拟合) high variance:高方差(过拟合)
再来看看神经网络中的bias和variance问题. 在”较小”的神经网络中, 虽然计算资源消耗较小, 但是容易出现欠拟合的问题. 在”较大”的神经网络中, 会消耗比较大的计算资源, 也会出现过拟合的问题, 但是我们可以使用regularization(正则化)来解决这个问题, 这样的神经网络比”较小”的神经网络要更有效.
八.集成学习:树模型的复杂形式包括以GBDT为代表的boosting组合,以及以随机森林为代表的bagging组合。这两种组合模型的意义不仅在于模型本身,boosting和bagging这两种组合思想本身也非常值得学习和理解,这代表了两种一般性的强化方法:boosting的思想是精益求精,不断在之前的基础上继续优化;而bagging的思想是“三个臭皮匠顶一个诸葛亮”,是通过多个弱分类器的组合来得到一个强分类器。这两种组合方法各有优劣,但都是在日常工作中可以借鉴的思想。例如在推荐系统中所我们经常会使用多个维度的数据做召回源,从某个角度来看就是一种bagging的思想:每个单独召回源并不能给出最好表现,但是多个召回源组合之后,就可以得到比每个单独召回源都要好的结果。所以说思想比模型本身更重要。
九.无监督学习
1.聚类
在无监督学习中, 训练集不含标签, 我们使用聚类算法来寻找数据集包含的特定结构.k-means算法(k-均值算法)是目前最热门最为广泛使用的聚类算法.对于没有明显区分的数据我们也可以使用k-means算法.
k-means算法:
重复上面两个步骤,直到cluster centroid不能再移动为止。
随机初始化可能导致算法得到一个局部最优,为了解决上述问题, 我们需要随机初始化多次, 然后计算出每次代价函数J的值, 最后得到一个更好的最优解.
在选择聚类中心的个数K时,我们可以使用Elbow method, 即描绘出J关于K的图像, 然后找到”elbow”的位置, 这个位置对应的点就是应该选择的簇数.另一种选择K的方法, 就是根据我们特定的目标去选. 例如, 在给T恤标尺码的时候, 如果我们想要分成三个尺码S, M, L, 那么我们就应该选择K=3;如果我们想要分成5个尺码XS, S, M, L, XL,那么我们就应该选择K=5.
2.数据降维
降维不仅可以让我们节省空间, 更重要的是可以让学习算法运行的更快.另外,降维也可以更好地可视化数据.
PCA(主成分分析, Principal components analysis)是用来对数据降维的非监督学习算法.
PCA试图找到一个低维的平面,来对数据进行投影,以便最小化投影误差的平方(每个点与投影后的对应点之间距离的平方之和).
PCA和线性回归是完全不同的两个算法. 在线性回归中(下左图), 我们想要的是能够拟合数据的一条直线, 最小化的是两点之间y的差;而在PCA中我们最小化的是点到直线的距离(注意下右图中点垂直于线的距离). 并且, 在线性回归中, 有一个标签y,而在PCA中,全部都是x.
数据预处理:在使用PCA之前, 我们需要对数据进行mean normalization/feature scaling处理,即均值标准化(xj - μj)和特征缩放(可能需要).
PCA算法:
在PCA中, 我们需要计算的就是向量u和新的特征z.
首先我们需要计算出矩阵Σ, 然后使用奇异值分解(sigular value decomposition)来计算[U,S,V]. 我们需要的就是n×n的矩阵U, 如果我们需要将数据从n维降到k维, 取U的前k列, 记为Ureduce. 最后通过Ureduce的转置乘以x得到z. (右侧手写体为向量化的实现)
上图最后一步的z和x分别为zi和xi
原数据恢复:数据降维后, 我们可以通过Xapprox=Ureduce*z来得到原始数据的近似值.
如何选择k(必须在数据预处理阶段进行了均值标准化):
注意, 不要使用PCA来解决过拟合的问题.在使用PCA之前应该考虑先使用原始数据, 如果使用原始数据不能达到效果, 再考虑使用PCA.
十.信息熵和基尼指数的关系:信息熵在x=1处一阶泰勒展开就是基尼指数
十一.贝叶斯误差
贝叶斯误差也叫最优误差,通俗来讲,它指的就是现有技术下人和机器能做到最好的情况下,出现的误差。
人类擅长很多任务,比如图像识别和语音识别这类处理自然数据的任务,人类水平和贝叶斯水平相差不远,通常用人类水平来近似成贝叶斯水平,也就是说人的误差可以近似地看成贝叶斯误差。
有了贝叶斯误差之后,我们可以将偏差分解为贝叶斯误差与可避免偏差之和。即:
偏差 = 贝叶斯误差 + 可避免偏差
假设我们训练了一个分类器模型,在训练集上的错误率有15%,在测试集上的错误率有30%,如果说贝叶斯误差为14%,那么我们可以知道它的可避免误差有15%-14%=1%,方差有30%-15%=15%,这时候,我们应该考虑如何降低方差,而不是降低偏差。
十二.支持向量机
SVM 的目标是通过在属于两个不同类别的两组数据点之间找到良好决策边界(decision boundary)来解决分类问题。决策边界可以看作一条直线或一个平面,将训练数据划分为两块空间,分别对应于两个类别。对于新数据点的分类,你只需判断它位于决策边界的 哪一侧。
SVM 通过两步来寻找决策边界:
(1) 将数据映射到一个新的高维表示,这时决策边界可以用一个超平面来表示 (如果数据是二维的,那么超平面就是一条直线)。
(2) 尽量让超平面与每个类别最近的数据点之间的距离最大化,从而计算出良好决策边界(分割超平面),这一步叫作间隔最大化(maximizing the margin)。这样决策边界可以很好地推广到训练数据集之外的新样本。
将数据映射到高维表示从而使分类问题简化,在实践中通常是难以计算的。这时就需要用到核技巧(kernel trick,核方法正是因这一核心思想而得名)。其基本思想是:要想在新的表示空间中找到良好的决策超平面,你不需要在新空间中直接计算点的坐标,只需要在新空间中计算点对之间的距离,而利用核函数(kernel function)可以高效地完成这种计算。核函数是一个在计算上能够实现的操作,将原始空间中的任意两点映射为这两点在目标表示空间中的距离,完全避免了对新表示进行直接计算。核函数通常是人为选择的, 而不是从数据中学到的——对于 SVM 来说,只有分割超平面是通过学习得到的。
SVM 很难扩展到大型数据集,并且在图像分类等感知问题上的效果也不好。SVM 是一种比较浅层的方法,因此要想将其应用于感知问题,首先需要手动提取出有用的表示(这叫作特征工程),这一步骤很难,而且不稳定。
最后
以上就是谨慎鱼为你收集整理的机器学习(数据挖掘)总结的全部内容,希望文章能够帮你解决机器学习(数据挖掘)总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复