目录西瓜书是什么意思啊
西瓜书,即周志华老师的《机器学习》一书,因封面画着西瓜而得名。这一系列文章,主要对西瓜书中的一些概念和公式做出通俗的解读工作。
1、 引言
机器学习:我们在日常生活中的决策,比如当前天气穿什么衣服、如何解一道数学题等,都是根据以往的经验做出的。人工智能的终极目标就是让机器拥有像人一样的智能,既然基于经验的决策经常发生在人身上,那我们也可让机器试试基于经验决策,来解决一些之前没能解决的问题。
2、基本术语
分类任务:给你一小堆西瓜,让你练成一种本领——在不打开瓜的情况下分辨好吃的瓜和难吃的瓜。
聚类任务:给你一大堆西瓜,让你根据不同的特征把相似的瓜摆到一起。我们可能会发现,被摆到一起的瓜还有其他的共同点。
3、假设空间谈绝凯
归纳:就是用那一堆西瓜做实验的过程,先观察瓜的外表,再打开瓜尝尝是否好吃。随着经验增多,你渐渐总结出什么样的瓜是好瓜。当然,不同的人会有不同的总结方法。
演绎:利用总结出来的规律给水果摊进货的过程。如果进来的都是好瓜,那说明规律总结对了。如果进来的不全是好瓜,说明还要继续进行归含唤纳。
假宏腔设:用西瓜做实验的时候,先假设颜色深的瓜好吃,再去验证这一假设是否正确。当然这样的假设会有很多,归纳就是寻找最优假设的过程。
1. 章节主要内容
这一章是绪论,顾名思义就是对本书的总体介绍,并引出机器学习的概念。根据我们定下的阅读目的,我们在阅读过程中,会更棚搜专注基础知识、整体认识以及技术脉络方向的内容,其它的部分只是简单理解,并不会记录下来。
根据我们的阅读重点,我将本章内容整理成如下结构:
1)首先解答一个大家都关系的基础问题:什么是机器学习?
为了解答这个问题,我们先来看看西瓜书中那个著名的例子:
傍晚小街路面上沁出微雨后的湿润,和煦的细风吹来,抬头看看天边的晚霞,嗯,明天又是一个好天气。走到水果摊旁,挑了个根蒂蜷缩、敲起来声音浊响的青绿西瓜,一边满心期待着皮薄肉厚瓤甜的爽落感,一边愉快地想着,这学期狠下了功夫,基础概念弄的清清楚楚,算法作业也是信手拈来,这门课成绩一定差不了
上面这段话简简单单,初看没有任何值得惊讶或好奇的内容,可如果我们深入的分析一下,会发现这段话描述了我们日常生活中各种随处可见的认知过程,那就是我们会根据各自经验去对事物进行预判。比如,和风和晚霞为什么就可以推断出明天是好天气呢?根蒂蜷缩、浊响声音、青绿色的西瓜为什么是个好西瓜呢?基础概念清楚、算法作业熟练为什么就会考出好成绩呢?
这些预判都是我们的大脑对日常生活中经验学习的结果。就拿买西瓜为例吧,因为经过多次的买西瓜经验,大脑通过学习,总结出一套瓜的外在特征(色泽、根蒂和敲响)和内在口味(好瓜、坏瓜)之间的关系模型,而这套关系模型可以被用在未来任意一次买瓜行动中来给我们提供相应的判断。
机器学习的本质说到底就和上边这个例子一样,只不过在计算机的毁者世界,我们所说的经验就是一条条的数据罢了。机器在数据上进行学习,并总结出一套通用的规律。
那么关于“什么是机器学习”这个问题的答案,我们可以总结为:机器学习是致力于研究如何通过计算的手段,利用经验来改善自身性能的学科。其表现为对经验(数据)和结论(预测)之间关系的总结和归纳。
2)在理解了什么是机器学习了之后,我们想要更进一步的了解的是:机器学习算法到底是如何学习的?
在解答这个问题前,我们先了解一下科学推理的两大基本手段:归纳(induction)与演绎(deduction)。前者是从特殊到一般的“泛化”(generalization)过程,即从具体事实归结出一般性规律;后者是从一般到特殊的“特化”(specialization)过程,即从基础性原理推演出具体状况。
机器学习的过程其实就是上边的归纳过程,还是以挑西瓜为例
机器学习的过程就是从具体数据集中“泛化”的过程,即通过对训练集中瓜的学习以获得对没见过的瓜进行判断的能力。我们可以把学习过程看作一个在所有假设(hypothesis)组成的空间中进行搜索的过程,搜索目标是找到与训练集“匹配”(fit)的假设,即能够将训练集中的瓜判断正确的假设。
例如在表1.1的训练集上,我们可以找到匹配训练样本的假设列表,展示如下:
(色泽=*,根蒂=蜷缩,敲声=*) -> 好瓜(1)
(色泽=*,根蒂=*,敲声=浊响)-> 好瓜(2)
(色泽=*,根蒂=蜷缩,敲声=浊响) -> 好瓜(3)
3)从上文中我们可以得知在同一个训练集上进行匹配,有可能会匹配出多个假设,那么机器学习的具体过程中算法的选择依据是什么呢?
在现实问题中我们常面临很大的假设空间,可学习过程是基于有限样本训练集进行的,因此,可能有多个假设与训练集一致,即存在着一个与训练集一致的“假设集合”,我们称之为“版本空间”,上边的假设(1)(2)(3)即在西瓜数据集上“泛化”出的假设空间。
那么当我们遇到一个新收来的瓜(色泽=青绿,根蒂=蜷缩,敲声=沉闷),那么我们该选用哪个假设来进行判断呢?如果使用假设(1)时,这是一个好瓜,可如果使用假设(2)链余历(3)时,这就是一个坏瓜了。
这时候的选择偏好被称为“归纳偏好”,而任何一个有效的机器学习算法必有其归纳偏好,否则它必然被假设空间中等效的假设所迷惑,而无法产生确定的学习结果。
一种常用的、自然科学研究中最基本的“正确的”偏好原则是“奥卡姆剃刀”(Occam's razor)原则
奥卡姆剃刀原则:若有多个假设与观察一致,则选最简单的那个
事实上,归纳偏好对应了学习算法本身所做出的关于“什么样的模型更好”的假设。在具体的现实问题中,算法的归纳偏好是否与问题本身匹配,大多数时候直接决定了算法能否取得好的性能。
举个例子,在下边回归学习的1.3图示中,每个训练样本是图中的一个点,要习得一个和训练集一致的模型,相当于找到一条穿过所有训练样本点的曲线。显然,这样的曲线有很多条。如果使用奥卡姆剃刀偏好原则的话,更为平滑的曲线A会比曲线B要好。
可实际情况,A曲线却并不一定比B曲线好,因为用来训练的样本只是全量数据的一部分,真正的数据到底是更贴近曲线A还是曲线B是无法得知的。如图1.4所示,真实的数据是两种情况都有可能出现。换言之,对于一个学习算法a,若它在某些问题上比学习算法b好,则必然存在另一些问题,在那里b比a好。
Wolpert在1996年提出的“没有免费的午餐”定理(No Free Lunch Theorem,简称NFL定理)证明了无论学习算法a多聪明、学习算法b多笨拙,它们的期望性能都相同。
可NFL定理有一个重要前提:所有“问题”出现的机会相同、或所有问题同等重要。但实际情况并不是这样的,很多时候,我们只关注自己正在试图解决的问题。比如,要找到快速从A地到B地的算法,如果我们考虑A地是南京鼓楼、B地是南京新街口,那么“骑自行车”是很好的解决方案;但是这个方案对A地是南京鼓楼、B地是北京新街口的情形显然很糟糕,但我们对此并不关心。
所以,NFL定理最重要的寓意,是让我们清楚意识到,脱离具体问题,空泛地谈论“什么学习算法更好”毫无意义,因为若考虑所有潜在的问题,则所有的算法都一样好。针对具体问题选择具体的算法和归纳偏好才是正确的做法。
2.基础概念
1) 基本术语
为了便于理解,我在这里将场景定为上文中提到的挑西瓜的例子
数据集(data set):记录的集合(西瓜的描述集合)
“示例”(instance)或“样本”(sample):数据集中的一条记录,是关于一个事件或对象的描述。(每个示例代表对一个西瓜的描述)
“属性”(attribute)或“特征”(feature):反映对象某方面的表现或性质的事项。(根蒂、敲声、色泽)
“属性值”(attribute value):属性的具体取值。(例如色泽的取值可以为:青绿、乌黑)
“属性空间”(attribute space)、“样本空间”(sample space)或“输入空间”:属性张成的空间。(根蒂、敲声、色泽张成一个关于西瓜的三维空间)
“特征向量”(feature vector):属性空间中的每一个,向量点代表一个具体的对象。这个向量点就是特征向量
标签(label):我们建立的预测。(是不是“好瓜”)
分类(classification):预测的是离散值。(好瓜、坏瓜)
回归(regression):预测的是连续值。(西瓜成熟度:0.95、0.37)
聚类(clustering):对数据集进行分组,分组结果预先不知。
监督学习(supervised learning):有标记信息的学习任务,代表是分类和回归。
非监督学习(unsupervised learning):没有标记信息的学习任务,代表是聚类。
2)奥卡姆剃刀原则
奥卡姆剃刀原则是在产品设计、行为偏好、流程设计等各种各样领域中都反复出现的概念,(据我理解)其本质意思是简单能表示的东西,就不要做得复杂。该原则在本章节中被使用在了偏好选择上,即“若有多个假设与观察一致,则选最简单的那个”
3. 总结
通过本章学习,我们可以得到:
1)如果说计算机科学是研究关于“算法”的学问,那么类似的,可以说机器学习是研究关于“学习算法”的学问。
2)机器学习的本质是构建起输入和输出之间的关系模型,并利用这个关系模型来解决未知的情况。
3)机器学习的学习过程是对数据集的泛化过程
4)并没有绝对好的机器学习算法,脱离具体问题,空泛地谈论“什么学习算法更好”毫无意义,因为若考虑所有潜在的问题,则所有的算法都一样好。
5)针对具体问题选择具体的算法和归纳偏好才是正确的做法。
1. 章此散节主要内容(遇到不清楚的概念请在第二节基础知识中找寻解释)
在第一章绪论中,我们知道要根据具体的问题选择具体的算法和归纳偏好。那么我们怎么判定我们的选择是正确的呢?这就需要拥有一套规范的模型评估与选择方法论了。
1)首先,我们要理解机器学习为什么需要一套模型评估与选择方法论?(经验误差与过拟合)
在前一章的学习中,我们知道机器学习是对数据集的泛化过程,即从输入的数据中归纳出一套能适用于所有潜在样本的“普遍规律”。可因为训练数据不够充分,机器学习出来的模型并没办法涵盖所有的情况,这就会导致学习器的实际预测输出与样本的真实输出之间存在“误差”。
学习器在训练集上的误差称为“经验误差”,在新样本上的误差称为“泛化误差”。很明显,要使得分类器尽可能的有用,我们应该要让泛化误差仅可能的小。可惜在现实环境中,我们很难知道新样本是什么样的,所以我们实际能做的只有努力使经验误差最小化。
说到这里,也许有的心急的同学已经迫不及待的去将算法设计的尽可能百分百的满足所有训练样本了,可却忘了学习器真正要达到的是泛化误差尽可能小,而不是目前的折中方案降低经验误差。而在降低经验误差的道路上,驻守着机器学习领域最大的拦路虎之一:“过拟合”
“过拟合”是指学习器对训练样本学的太好了,导致泛化程度不够(还记得机器学习就是一个泛化过程吗),没法适应新的数据样本。与之相反的还有一个“欠拟合”的概念,就是对训练样本中的一般规律都没学习好。举个例子,你通过姚明这个训练样本来学习一个人类判断器,如果你将身高两米二十以上作为判断是否是人的依据,那就是过拟合了;而如果你没有“直立行走”这样的特征都没有找出来作为判断是否是人的标准,那就是欠拟合了。
上边例子是我自己想的,下边贴出书中一个更容易理解的例子来帮助大家理解吧:
所以,我们知道了吧,我们为什么需要一套模型评估与选择的方法论呢?因为我们的训练数据没法真正代表真实的样本空间,而泛化误差无法直接获得,经验误差又因为过拟合的存在而不适合作为标准,所以我们才需要一套模型评估与选择的方法论
2)我们知道了为什么要对模型进行评估,那么在不知道泛化误差的情况下,我们该如何进行评估呢?
一个合理的思路是:既然我们没法拿到新样本来进行泛化误差计算,那么我们可以从训练样本中取出森升氏一部分来,假装它是一组新样本,并用这些样本计算出来的误差作为泛化误差的近似。这组选出来的样本被称为“测试集”,测试集上的误差被称为测试误差。(我们学习本书的一个主要目的是学会机器学习领域的脉络和背后逻辑,这种评估思路是科学研究领域的一个常用思路。领悟这种思路有助于我们解决其它领域上的问题)
不过我们需要注意一点,那就是测试集应该尽量不与训练集重合,否则测试集计算出的误差将没法准确代表该学习器的泛化能力。
基于这个考虑,书中列出了以下几种把包含m个样例的数据集D划分为训练集S和测试集T的办法(只介绍中心思想,具体内容请查看书中原文)
[1]留出法(hold-out)
直接将D划分为互斥的两部分S和T,在S上训练出模型后,用T来评估测试误差
[2]交叉验证法(cross validation)
将D划分为互斥的k个子集,每次训练用其中(k-1)个数据,用剩下的一个作为测试集。这样就能获得k组训练/测试集,对这k组分别进行训练和测试,最终返回k个测试结果的均值
[3]自助法(bootstrapping)
每次从D中随机复制一个样本到D1中,重复m次,会得到一个拥有m个数据样本的D1数据集。显然,D中的一部分数据会多次出现在D1中,而另一部分样本不出现。根据平均分布概率计算,大约有36.8%的数据不会被复制到D1中
[4]注意点
训练/测试集的划分要尽可能保持数据分布一致性
单词划分往往不够稳定可靠,一般要采用若干次随机划分、重复进行实验评估后取平均值作为评估结果
训练/测试集的划分比例没有完美答案,训练样本多会使得模型更接近D,测试样本多会使得评估结果更可靠,这其中的取舍因人/场景而异。常见的训练/笑洞测试划分比例是2:1~4:1
[5]调参
不同的参数其实就代表着不同的模型了。一般参数分两种:一类是算法的参数,亦称“超参数”,如聚类要分的簇数量k;一类是模型的参数,如神经网络中每个节点的权重。前者多为人工选择一组候选,后者是让机器自己学习。
调参是机器学习的重点,也是决定模型性能的关键。一般调参过程中,会将训练数据再次划分为训练集和验证集(validation set)。具体包含关系如下:
(数据集 (训练数据(训练集)(验证集)) (测试集))
[6]适用性
自助法在数据集较小、难以有效划分训练/测试集时很有用
自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。因此,在初始数据量足够时,留出法和交叉验证法更常用一些
3)在上一节了解了什么是有效可行实验评估方法,接下来我们需要了解一下具体的衡量模型泛化能力的评价标准,即性能度量(performance measure)
性能度量反映了任务需求,使用不同的性能度量会导致对模型的评判结果不同。这意味着模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。
回归任务中最常用的性能度量是“均方误差”,即用模型的输出与实际输出计算输出结果的方差。本章节介绍了多种性能度量,请大伙在下边基础知识章节中查看具体含义,在这里我只总结描述这些指标的具体使用(因为书本中的公式介绍比较清楚,我在这里只记录每种度量的意思,详细公式请小伙伴们去书本中查看)
本章节介绍了很多性能度量指标,我这里选择其中的 查准率、查全率 进行重点介绍,以供小伙伴们对性能度量有着更清晰的认识:
从上可知查准率和查全率是一对矛盾的度量,一般情况下当一方增高时,另一方会下降,而决定这组度量升高下降的因素是学习器的分类阀值。举个例子大家就能理解:
假设有10个西瓜,6个好瓜,4个坏瓜。我们将这十个瓜按照预测结果排序,最可能是好瓜的排在前头,最不可能的排在最后,然后控制学习器的分类阀值来依次逐个把样本作为好瓜来进行预测,则可以计算出不同的阀值时的P和R如下表所示:
由上边例子可以看到,P和R的值也基本满足了一方升高,另一方下降的状况,通常只有在一些简单的任务(比如我举的这个)中,才可能使查全率和查准率都很高。以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称“P-R曲线”。
在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者。当曲线有相交时,很难断言两者的优劣。真要判别时,“平衡点”(Break-Even Point)是一个不错的度量方法。下图是一个具体的示意图:
查准率顾名思义更关注的是预测的准确性(预测正确的比例)、查全率更关注的是预测的全面性(预测正确的个数)。
4)有了实验评估方法和性能度量,剩下的就是要好好研究研究如何应用方法和度量指标去对学习器的性能进行评估比较了
研究怎么来做“比较”是很有必要的,因为第一,我们要的是泛化性能,但是能用的只是测试性能;第二,测试性能和测试集的选择有很大关系;第三,有的机器学习算法本身也有随机性,对同一测试集的多次测试结果也会不同。
为了解决这些问题,统计假设检验(hypothesis test)为我们提供了重要的依据。
假设检验中的“假设”是对学习器泛化错误率分布的某种猜想或判断,然后通过假设的验证结果来对不同的学习器或模型的性能进行判断。比如假设“学习器A和B性能相同”,当该假设被拒绝时,说明学习器A和B具有显著差异,这时候错误率较低的学习器性能较优。
假设检验的具体逻辑和使用方法是这样的(这里只总结计算逻辑,详细的概念、公式等请查看专业书籍):
[1]设定一个假设,比如“一个机器学习真正的泛化错误率不大于0.3”
[2]设定一个置信概率“显著度a”,a的一般取值为0.05、0.1;a代表的意思是当我们的假设成立的概率在(1-a,1]的范围内时,我们认为是成立的。
[3]计算使假设在置信范围内成立的最大值是多少,比如根据上边[1]中的假设,要使泛化错误率不大于0.3成立,即泛化错误率小于0.3的概率大于(1-a)。要计算这个,我们要算出要使错误率大于0.3的概率之和小于a时的最大泛化错误率是多少。
[4]比较计算出的满足假设的最大值和我们实际计算出的值,如果我们实际计算出来的错误率已经大于最大可能的错误率了,说明假设不成立。
[5]在这里的假设中,假设不成立说明我们的学习器错误率要大于0.3啊,这是个很烂的学习器,我们还需要继续调优。
在实际实验时,我们会多次使用留出法或交叉验证法进行多次训练/测试,那么我们实际上会得到多个测试错误率(这里假设为k个)。我们可以通过求这些错误率的平均和方差来将假设检验转换为自由度为k-1的 t 分布。通过查询 t 检验常用临界表可以很方便的计算出假设是否成立。
书中提到的交叉验证 t 检验、Friedman检验与Nemenyi后续检验都是基于一样的假设检验流程的稍微变化。其中交叉验证 t 检验是针对两种学习器之间性能的比较,Friedman检验与Nemenyi后续检验是针对多个学习器之间性能的比较。在这里就不一一介绍了。
5)对学习算法除了通过实验估计其泛化性能,我们还需要理解“为什么”具有这样的性能,“偏差与方差分解”(bias-variance decomposition)是解释学习算法泛化性能的一种重要
省略具体的算法和公式推导过程,偏差与方差分解是对学习算法的期望泛化错误率的分解,分解结果是下边这个重要的公式
也就是说,泛化误差可分解为偏差、方差与噪声之和。
其中,偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法的拟合能力;方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所带来的影响;噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
偏差-方差分解说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。
一般来说,偏差与方差是有冲突的。要使偏差小则需要算法对数据充分拟合,这就有可能会导致过拟合,这样对新样本的适应性差,就会导致方差变高。反之亦然,拟合过低,偏差较大,但是方差会相对较低。
2. 基本知识
1)概念
错误率(error rate):m个样本中a个错误,则错误率为 E = a/m
精度(accuracy):精度=1 - a/m
误差(error):实际预测输出与样本的真实输出之间的差异。在训练集上的误差称为训练误差(training error)或 经验误差(empirical error),在新样本上的误差称为“泛化误差”(generalization error)
过拟合(overfitting):学习器把训练样本学得太好了,把训练样本中的特殊特征当作了普遍规律,导致泛化性能下降
欠拟合(underfitting):与过拟合相反,对训练样本中的一般规律都没有学好
测试集(testing set):训练样本中提取出来的作为测试学习器对新样本判别能力的一部分数据。测试集数据应该尽可能与训练样本不同
测试误差(testing error):在测试集上的误差
2)性能度量指标概念
[1]错误率与精度
分类任务中最常用的两种性能度量,其中错误率是分类错误的样本数占样本总数的比例。精度是分类正确的样本数占样本总数的比例。
[2]查准率、查全率与F1
查准率(precision):被模型预测为正的样本中,真正为正的样本比例(被预测为好瓜的西瓜中,真的是好瓜的西瓜比例)
查全率(recall):在所有正的样本上,被学习器预测为正的样本比例(在所有好瓜中,被学习器正确识别的好瓜比例)
F1:(2x查准率x查全率)/(查准率+查全率)。 F1是基于查准率和查全率的调和平均。
(查准率和查全率的概念不难理解,但是意思比较相近,看过一段时间之后老是会弄混。在读论文时,很多时候是用precision和recall来进行性能度量,所以将熟记这两个指标还是十分必要的)
“平衡点”(Break-Even Point):“查准率=查全率”时的取值。
[3]ROC与AUC
ROC:“受试者工作特征”(receiver operating characteristic)曲线,与P-R 曲线类似,只不过取用“真正利率”(TPR )作为纵轴,“假正例率”(FPR)作为横轴
[4]代价敏感错误率与代价曲线
代价敏感错误率代表数据的平均总体代价;代价曲线详情见书本
3)假设检验
基于假设检验结果我们可推断出,若在测试集上观察到学习器A比B好,则A的泛化性能是否在统计意义上优于B,以及这个结论的把握有多大。
4)偏差与方差
偏差-方差分解是对学习算法的期望泛化错误率进行的分解。泛化误差可分解为偏差、方差与噪声之和。
其中,偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法的拟合能力;方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所带来的影响;噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
3. 总结
泛化误差无法获得,经验误差因为过拟合的存在而不适合作为标准,导致我们需要专门的模型评估方法来测量学习器的效果
专门的模型评估方法是通过从数据集中选取一部分数据作为测试集来对训练出的模型进行验证,以测试误差来近似泛化误差实现的
测试误差体现在具体的性能度量指标上,我们要根据具体情况选择对应的指标
假设检验是我们对学习器性能进行比较的有效方法
泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的
(额外阅读)数据比算法要更重要的一个例子:对一批数据使用高明的算法,比不上用普通算法但是引入一部分外部数据源的效果要好( http://anand.typepad.com/datawocky/2008/03/more-data-usual.html )
具体的章节思路请参考下图理解:
西瓜书 第10章讲解的是 降维 和 度量学习 的相关内容
对于数组和 Series 而言,维度就是 shape 返回的数值。 shape 中 返回了几个数字,就是几维。
索引以外的数据,不分行列的称之为一维,有行列之分的称之为二维,也称之为表。一张表最多是二维的。
数组中的每张表可以是一个特征矩阵或者一个 DataFrame 。 行是样本,列是特征。
对于图像而言,维度就是图像中特征向量的数量。特征向量可以理解成坐标轴。
降维算法中降维指的是:降低特征矩阵中特征的数量。
sklearn 中的降维算法在 decomposition 中。 模块的本质是矩阵分解模块。 代表是 SVD 奇异值分解。
主成分分析中的常见的模块:
高级矩阵分解
在降维的过程中,会减少特征的数量,则意味着需要删除数据: 减少特征数量、保留大部分有效信息
如果一个特征的方差
为了得到样本方差的无偏估计。为什么样本方差的分母是n-1
通过一个 二维降低到一维 的栗子来说明降维的实现过程
上面原始数据中,两个特征的均值都是 2 ,方差都是;总方差都是袭手 2
逆时针旋转 45 度之后变成了
的均值和方差都是 0 ;的均值是;方差是 2 。总方差也是 2
将二维矩阵和 n 维矩阵进行类比,掌握降维算法的基本过程:
参考文章 PCA数学原理
两个 维度相同 向量(机器学习中一般是指列向量)的内积被定义成
内积将两个向量映射成为一个实数
,为它们之前的夹角, 投影的矢量长度 是表示模,也就是A线段的标量长度。内积的另一种表示形式为
也就是A到B的投影长度乘以B的模。 特殊情况下,如果B的模是1 ,那么内积结果就是 A到B的投影长度 。
一个二维向量可以对应二维笛卡尔直角坐标系中从原点出发的一个有向线段。代数中常用线段的终点坐标表示向量,例如下面的(3,2)。
实际上向量(3,2)表示的是在X轴上的投影是3,Y轴上的投影是2。
在二维坐标系中,向量(x,y)实际上表示为线性组合:
那么,(1,0)和(0,1)可以看做是二维空间中的 一组基 。
例如,(1,1)和(-1,1)也可以成为一组基。一般来说,我们希望基的凯禅银模是1,因为从内积的意义可以看到,如果基的模是1,那么就可以方便的用向量点乘基而直接获得其在新基上的坐标了。上面的基变成了,即除以了各自的模。
那么(3,2)在这组基下的新坐标为
矩阵的两行表示两个基,乘以原来的向量,得到新基下的坐标。
一般的,如果我们有 M 个 N 维向量,想将其变换为由 R 个 N 维向量表示的新空间中
两个矩阵相乘的意义是:将 右边矩阵中的每列列向量 变换到 左边矩阵中的每一行行向量作为基 所表示的空间中去。
将所有的字段减去字段均值 ,结果变成了每个字段都变成了均值为 0
一个字段的方差 可以盯宴看做是每个元素与字段均值的差的平方和的均值
由于每个字段的 均值变成了0 ,那么 总的方差 可以简写成
数学上可以用两个字段的协方差表示其 相关性
当均值为0,上面的协方差公式可以表示为
当样本数较大时,不必在意其是 m 还是 m-1,为了方便计算,我们分母取 m。
当协方差为0,表示两个字段完全独立;为了让协方差为0,第二个基应当在和第一个基正交的方向上( 垂直方向 )
协方差矩阵是
原始的协方差矩阵是C,P是一组基按行组成的矩阵,设Y=PX,Y对应的协方差矩阵是D
由于 C是一个对称矩阵 ,满足:
e 代表的是单位向量,对于协方差矩阵 C 的结论如下:
那么P是协方差矩阵的特征向量单位化后按行排列出的矩阵,
解决方法:希望投影后的投影值尽量地分散。满足的条件是:
比较大,所以使用作为基
重要的参数是 n_components ,降维之后需要保留的特征数量,取值在 [0, min(X.shape)] 。如果不填写,默认是 min(X.shape)
如何取出每种鸢尾花的两个特征中的数据
主要是两个属性
当 n_components 中不填写任何值,默认是min.(X.shape)个特征。通过累计可解释性方差贡献率曲线来选择最好的 n_components 。曲线横纵坐标分别是:
n_components 中不仅可以填写数字,还可以通过极大似然估计 MLE 来自选超参数
输入 0-1 之间的浮点数,并且配合参数 svd_solver="full" ,表示希望降维后的可解释方差占原始数据的信息比例。