数据是一切的根本。
一.获取数据
1.可以使用爬虫scrapy获取数据,但是更一般的是自家数据库中的数据
2.可以获得公用数据集:
http://www.kaggle.com/datasets等网站
3.可以自己创建虚拟数据
4.注意:1)数据量尽可能多、利于训练,(2)数据内容尽可能有效,能对预测产生作用(有用的特征),(3)数据尽可能要均匀(分类),即全面
5.注意:无论是数据获取还是处理,都要注意多做备份,有能力每步都要备份,数据的价值难以想象。
二.原始数据
1.数据的本质是信息的具体化,原始数据有很多种:数字、文字、图片....我们可以从这些数据中看出里面所包含的信息。
2.计算机接收进行处理的是数字,根据经验,把原始数据转换为数字是比较容易的(比如把图片转化为矩阵的形式),
3.我们得到的原始数据可能有这样那样的问题,所以要进行下一步的数据清洗
------原始数据是杂乱的,含有不完整、重复、错误的数据,因此要先进行数据清洗-------
三.数据清洗(Data cleaning)
1.数据清洗是为了对数据进行重新审查和校验,目的在于删除重复信息、纠正存在的错误,并提供数据一致性
2.不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类
(1)缺失数据(数据为空Null):如果缺失数据的记录占比较小,可以直接剔除(主要包括删除样本或删除特征两种,具体看哪个更多地保证数据的完整性),若缺失的数据很关键,则可以进行手动填充或者按某一个公式自动填充(填充公式有:均值,中位数,众数,0值,无穷,固定值,最大最小值,,概率分布,概率估计.....)
(2)重复的数据:通过判断记录间的属性值是否相等来检测记录是否相等,相等的记录合并为一条记录(即合并/清除)
(3)错误的数据:包括格式上、内容上、或逻辑上错误【比如获取的数据与常识不符(年龄大于200)等】,
【1】检测方法:用统计分析的方法识别可能的错误值或异常值,如偏差分析、识别不遵守分布或回归方程的值,也可以用简单规则库( 常识性规则、业务特定规则等)检查数据值,或使用不同属性间的约束、外部的数据来检测和清理数据。
【2】解决方法:去除或修改
3.一致性检查:根据每个变量的合理取值范围和相互关系,检查数据是否合乎要求,发现超出正常范围、逻辑上不合理或者相互矛盾的数据。
---------数据清洗让我们得到一个大型的无明显错误的数据集,但是我们不一定会用到这个数据中每条数据,所以就有了数据采样。-------
四.数据采样
1.一般来说,整体的样本数据会具有某种概率分布,但是由于我们不可能对所有数据进行建模,效率低下,因此我们会从整个样本集中抽取一部分具有近似总体分布特点的子集作为训练集,这可以达到提高效率,信息降维,简化问题的效果
2.数据采样是根据某种规则从整个数据集中挑选样本数据。
3.采样方法
(1)随机采样:从数据集中随机的抽取特定数量的数据,分为有放回和无放回两种
(2)系统采样:一般是无放回抽样,又称等距采样,先将总体数据集按顺序分成n小份,再从每小份抽取第k个数据
(3)分层采样:就是先将数据分成若干个类别,再从每一层内随机抽取一定数量的样本,然后将这些样本组合起来。
4.补:类别不平衡问题:分类任务中不同类别的训练样例数目差别很大
(1)欠采样(下采样):减少大数量的类别的数量
(2)过采样(上采样):增加小数量类别的数量
----------数据采样之后,我们得到一个较小的无明显错误的数据集,而且这个数据集具有近似总体概率分布的特点,接下来就是要开始使这些数据可以被使用-------
四.数据转换
1.由于(1)计算机能够接受并处理的只有数字,(2)这些数据中可能包含很多非数字型数据(比如文字),所以我们会首先把文字等数据转换为数字,这能保证计算机能处理数据以及模型能理解数字。
2.对于一条数据来说(比如一张图片),它所包含的信息是众多的(比如包含背景、颜色、时间....),所以就有了特征的概念,特征是反映事件或对象在某方面的表现(比如背景就是一种特征),特征也是数字化的,按特征的性质,我们可以将数据分为以下两类
(1)定量特征:数值型特征。特征的取值一般在实数空间,比如身高179.2cm。数值型特征包括离散型(温度...)和连续型(身高、体重...)
(2)定性特征:类别型特征。特征的取值一般为利用某个数字代表类别,比如1代表男性。类别型特征包括有序类别(大-3,中-2,小-1)和无序类别(红(1,0,0),黄(0,1,0),蓝(0,0,1))
***补:独热编码:即 One-Hot 编码,又称一位有效编码,比如:红(1,0,0),黄(0,1,0),蓝(0,0,1)
【优点】1. 将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点,2. 机器学习算法中,特征之间的距离或相似度的常用计算方法都是基于欧式空间的,3. 将离散型特征使用独热编码,会让特征之间的距离计算更加合理
3.不管模型的具体形式如何,本质上都是对特征的数学运算,因此我们要保证特征的数学运算是合理的,表现在两个方面(1)数字的大小要反映特征本身的大小关系,(比如数字2>1,但2代表的特征是否大于数字1代表的特征?这是不一定的)(2)模型特征间的四则运算要有意义(比如2-1=1,在机器学习的模型中,2代表的特征减去1代表的特征等于1代表的特征,这是不一定的),具体如下
4.定性变量处理:由于定性特征在模型中存在数学运算不合理的缺点,(比如男表示1,女表示0,而1-0是毫无意义的)所以我们要找到方法处理它
(1)虚拟变量法:
【1】主要思想:把该定性特征中每个类别在模型中设置为变量,这些变量(类别)也被称为虚拟变量,虚拟变量为0/1型特征【0...1...0】
【2】优点:把每个类别作为变量,因此他们是不会直接进行数学运算的,也就避免了数学运算不合理,比如x1作为男,x2作为女,模型:y=ax1+bx2+c
【3】缺点:虚拟变量陷进:类别变量之和的概率为1,这会引起多重共线性问题,使得模型变得不稳定。
***补:多重共线性:我们很难得出y的变化来源于哪个自变量。在线性模型中,比如y=ax1+bx2+c,因变量的变动会导致预测值的变动,我们一般的假设是因变量之间相互独立,即特征间不相关,那么每个因变量的变动导致预测值的变动方向是明显的(把预测值看做一个球,每个因变量的变动会导致球在不同方向上突出)。但是如果因变量之间相关,即变量间能用线性表示,则我们不能衡量出被预测值的变化有多少来自变量1,有多少来自变量2(球在两个变量的作用下朝着一个方向凸起,但是我们不能判断导致凸起中有多少是变量1的作用,有多少是变量2的作用)
【【检测】】对于两个变量来说,如果他们都是定量变量,则可以用相关系数;如果一个定量一个定性,则可以用ANOVA;如果都为定性变量,可以用卡方检验。如果有多个变量,则可以用假设检验或者方差膨胀因子法。
【【分类】】数据型:由数据自身分布引发的共线性;结构型:由特征转换引起的共线性,比如x和x^2
【【危害】】增大了模型参数的估计值的方差,使得假设检验变得不灵敏-----增大数据量
【【解决】】数据型:增加数据量/减少变量/降维/加入惩罚项/鸵鸟政策(不作为);结构型共线性:变量归一化
【4】改进1:设定一个类为基准变量,其他n-1个类与基准变量之间的差异作为虚拟变量,比如上面改进后模型为y=(b-a)x2+c
【5】改进1后的优点:解决了多重共线性的问题,而且变量前面的系数表示了改变量与基准变量之间的差距,如果该系数不显著(近0),则我们可以剔除它,即把它和基准类作为同一类别
【6】改进1后的缺点:遇到高维的类别型特征时,建模变量会急剧上升,给建模带来困难,而且每个虚拟变量能够给模型带来的信息量很小(比如类别间的顺序信息不能体现)
【7】改进2:选择占比最大的类别作为基准类别能最大地减少多重共线性
(2)类别型特征到数值型特征的转变有利于保留类别特征的信息(比如有序):
【1】ridit_scoring(针对有序类别特征,二分类问题):假设类别变量x有t个可能的取值:x1...xt,各个类别在整体中所占比例为p1...pt,其他变量相同,x从1到t,用y=1的概率减少,则第i类的值为小于类别i所占的比例减去大于类别i所占的比例,类别型特征转为数值型特征的取值为-1到1:
5.定量变量处理:
***补:边际效益恒定:对于纯线性模型来说,如果定量变量前面的系数大于0,则预测值随着定性变量的增加而增加,这会导致边际效益恒定。(如果事实是预测值随着变量的变化是波动变化的,则使用定量变量明显是错误的,所以我们进行定量变量离散化)
(1)变量离散化:定量变量转换为定性变量:区间法:把数值型变量划分区间转化为类别型变量
【1】问题1:怎么划分?划分太粗:模型效果欠佳;划分太细:过拟合风险上升
【2】解决1:基于卡方检验的划分法:用于度量两个类别变量的相关性
评估某个定量变量和预测变量的卡方值,即(把定量变量区间化为定性变量,预测变量也为定性变量)卡方统计量越大,实际观测值与理论推断值之间的偏差越大,则这两个变量之间的相关性越大,说明x变量的划分对于预测值y是有意义的,该定性变量对预测值越相关越好,更重要。因为如果这两个变量独立无关,则预测值和理论值的差距应该越小。
使用贪心算法来解决这个问题,直至卡方统计量小于某一个阈值
****补:one-way-ANOVA方法:多组数据的均值是否显著不同
****补:方差膨胀因子
-----数据可使用不仅要使单个特征可以在模型中使用,也要满足多个特征可以在模型中体现,主要是特征间的可比较性----
五.数据转换---特征归一化
问题:【1】特征间的单位(尺度)可能不同(比如收入1000-100000的取值,工作年数1-10的取值),很明显,这会导致模型有计算时,尺度大的特征会起决定性作用,而尺度小的特征其作用可能会被忽略 【2】特征取值的差异会到导致损失函数的等高线图成剧烈的椭圆,这会导致迭代的反复,速度会很慢
1.由于数据中每个特征的含义不同,导致数据单位不一样,导致它们的取值范围不同,所以需要尽可能使不同特征具有相似的取值范围(也被称为尺度),这是一种数据映射,包括线性的映射规则以及非线性的规则,其中这有利于加快求解速度(梯度下降中模型的收敛速度),提高精度。另外:当数据最大最小值稳定时,当特征间取值范围相差巨大时,用归一化;当数据中有很多异常值时,用标准化
2.特征归一化就是为了消除数据特征之间的量纲影响,使不同指标之间具有可比性,把所有特征都映射一个大致区间,使特征间能进行加权和比较。
3.特征归一化是对数据的处理,包括数据的归一化和标准化。
4.数据归一化:把数据映射到【0,1】或【-1,1】之类的区间,一般依赖于最大最小值,是对整个区间进行映射,适用于在不涉及距离度量、协方差计算、数据不符合正太分布的时候
(1)最大最小归一化(0-1归一化):对原始数据等比例缩放到【0,1】区间,y=(x-min)/(max-min) --------依赖于最大最小值稳定
(2)0均值归一化:均值为0---y=(x-均值)/(max-min) ---把数据映射到【-1,1】,
(3)非线性归一化:sigmod归一化、log函数、正切函数......适用在数据分化比较大的场景,有些数值很大,有些很小。
5.数据标准化:对数据进行映射,使之能够尽量保持数据的整体特点,标准化更符合统计假设(数据符合正态分布),一般是使它呈现稳定的标准正太分布,一般用于在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维
(1)Z-score标准化:使经过处理的数据符合标准正态分布(0-1正态分布)---y=(x-均值)/标准差;------适用于最大值和最小值未知的情况,或有超出取值范围的离群数据的情况
6.特征归一化优点:提高收敛速度,提升模型精度
7.使用模型:适用于svm、线性回归、神经网络、Kmeans,KNN之类的涉及到梯度下降的最优化问题,这些模型关心变量取值;像决策树之类的概率模型则不需要,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率。
8.补充
(1)注1:逻辑回归中,如果你不用正则,那么,标准化并不是必须的,如果你用正则,那么标准化是必须的。因为正则化是用来度量参数的,而参数值的大小是与特征的数值范围相关的。如果不加入正则,进行标准化后,我们得出的参数值的大小可以反应出不同特征对样本label的贡献度,方便我们进行特征筛选。
(2)注2:要先拆分出test集,不要在整个数据集上做标准化,因为那样会将test集的信息引入到训练集中,这是一个非常容易犯的错误!
----当我们得到一个合适大小的可以被使用的数据集之后,我们要做的是从这些数据中选出有效数据进行建模-----
六.特征工程
1.简介:我们的目标是对于数据进行建模,而且模型要尽可能高效(简单而且精度高),因此要选择部分特征进行建模(为了简单),选择适当的特征进行建模(为了高精度),特征工程主要有特征构建、特征提取和特征选择
2.数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已
3.特征构建:从原始数据中人工地挑选或者特征变形构建有意义的特征,是对原有特征的补充
(1)x1...xn---------x1...xn x(n+1)...
(2)特征变形:【1】特征转换(把一个特征转为另一个特征,比如把定量变量转为定性变量)、【2】特征组合(把不同的特征变成一个特征,比如两个特征交叉相乘)、【3】特征分割(把一个特征化为几个特征,比如把时间分割成年、月、日)
(3)注意:特征构建的特征要尽可能具有现实的可解释性,即要符合问题(头脑风暴,需要对问题、对模型、对数据有深刻认识。)
4.特征提取:把特征转换成对工程有用的特征,本质是把原始特征转换成一组具有明显物理意义(Gabor、几何特征[角点、不变量]、纹理[LBP HOG])或者统计意义或核的特征,但是解释性要比原有特征差,偏理论,
(1)x1...xn------------f(x1...xn)
(2)PCA(Principal component analysis)主成分分析
【1】思想:本质是一种非监督的降维方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分,即找到一个低维平面,将数据映射上去,并使投影误差最小,
【2】背景:对于一个数据点来说,它可以用n个属性来表示,这n个属性也被称为n个特征,他们所有取值的集合组成的空间也就是特征空间,可以说一个数据点是特征空间中的一个点(向量),
问题1:若特征的数量过大,则会导致维度灾难(随着维数的增加,计算量呈指数倍增长),所以我们要从所有特征中选取部分特征,即降维。
问题2:这些特征之间可能有关联(比如生日和年龄这两个特征),显然这些特征包含有重复的信息,这也和我们建模时假设的特征间相互独立矛盾,所以我们最好要删除重复信息,用一组线性无关的特征来表示数据点,但是也要保证存留的信息尽可能多。
补充背景:1)向量内积ab=|a||b|cos(θ)为a到b的投影长度乘以b的模,若b的模为1,即b为单位向量,则向量内积为a向b所在直线投影的矢量长度;2)任何一个向量都是在坐标系中存在的,它的表示本质上是终点的坐标减去起始点的坐标,若起始点坐标为原点0,则任何一个n维向量可以用n维空间的一组起始于原点的正交基向量来表示,也就是在起始原点下,任何一个向量是一组正交基的线性表示,则若正交基的选择不同,则向量的表示也不同;3)矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去,则我们可以用一个正交的投影矩阵把样本从n维空间投影到k维空间。4)任意的 N×N 的实对称矩阵都有 N 个线性无关的特征向量,并且这些特征向量都可以正交单位化而得到一组正交且模为 1 的向量。故实对称矩阵 A 可被分解成A=Q*λ*Q-1,其中Q为正交矩阵,其中每一列为A的特征向量,λ为实对角矩阵,其对角线上的元素为对应的特征值,由大到小排列,Q第i列的特征向量对应对角阵的第i个特征值。
解决2:样本的协方差矩阵反映特征间总体误差的方差,其中每个值表示特征之间的相关性,越大越相关,很明显,协方差矩阵为对称矩阵,我们的目标是使不同特征间的相关性越低越好,最好为0,即对称矩阵变为一个对角矩阵(除对角线外,其余位置为0),已知一个实对称阵相似于一个对角阵,即该对称阵可以通过某个矩阵的变换变为对角阵,这个矩阵也就是我们的投影矩阵,投影矩阵实质上是对原有的正交基进行变换,投影矩阵乘以数据集就是对数据点进行转换但是最大化保留信息且又尽量区分不同的数据点,因为投影矩阵是正交基组成,也就是特征间互不相关,此时整个数据集的点到该投影矩阵形成的超平面的距离尽可能小,即保证了信息的损失尽可能小,投影后数据点之间的距离尽可能大,此时投影后总体数据的方差尽可能大。
解决1:对应选择最大k个特征值对应的特征向量组成的投影矩阵从而实现降维。
补充: 特征向量和特征值的定义Ax=λx,x为一个A的特征向量,A为一个矩阵,λ为一个实值,一个向量x在矩阵的作用下,保持方向不变,进行比例为λ的伸缩,向量x可以用一组正交基来表示,则可以有某个矩阵可以在该正交基组成的空间中找到某些向量进行转换使得这些向量只发生长度上的改变而非方向上的改变,又可以理解为某个有一组正交基表示的向量可以在某个矩阵的作用下由另一组正交基进行表示(即矩阵的作用是对正交基进行伸缩和旋转)。特征值表示伸缩的大小,特特征向量表示伸缩的方向,则在数据挖掘中,通过特征值分解可以得到特征值与特征向量,特征值表示的是对应特征向量方向上包含的信息量,而特征向量表示这个特征是什么。对于实对称矩阵,我们进行特征值分解得到特征值和特征向量,选取其中最大的k个组合成投影矩阵(n*k),则保证了特征包含信息量尽可能多和降维两个目的,而选取的特征向量之间本身表示的不相关性。包含的信息量多又代表方差大。特征向量可以理解为坐标转换中新坐标轴的方向,特征值表示在对应特征向量上的方差,特征值越大,方差越大,信息量也就越大。
http://blog.codinglabs.org/articles/pca-tutorial.html
【3】降的维度数量选择:若原始点与投影点之间的距离之和 比上 数据中总的方差 <= 0.01 则表示降维后的数据能保留99%的信息(方差)
【4】与线性回归的不同,pca计算的是点到超平面的距离,而线性模型则是真实值到预测值之间的距离
【5】优点:使得数据集更易使用;降低算法的计算开销;去除噪声;使得结果容易理解;无参数限制,仅仅需要以方差衡量信息量,不受数据集以外的因素影响
【6】缺点:变换的矩阵必须是方阵; 在非高斯分布情况下,PCA方法得出的主元可能并不是最优的,解释性弱
【7】应用:降维、去燥、提取特征、数据处理
(3)LDA(Linear Discriminant Analysis)线性判别分析
【1】思想:本质是一种监督的降维方法。将数据投影到一条直线上,使得同类样例的投影尽可能接近,异类样例的投影点尽可能原理;在对新的样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。
【2】区别:PCA和LDA都是讲数据投影到新的相互正交的坐标轴上,两者在降维时均使用了矩阵特征分解的思想;两者都假设数据符合高斯分布,但pca主要用于降维,选择样本点投影具有最大方差的方向;lda主要用于分类,选择分类性能最好的投影方向
【3】优点:更能反映样本间的差异,可以使用类别的先验知识
【4】缺点:它的降维到的维度最大值为n-1,LDA在样本分类信息依赖方差而不是均值时,降维效果不好,LDA可能过度拟合数据,LDA 对数据的分布做出了很强的假设,比如每个类别数据都是高斯分布、各个类的协方差相等
(4)ICA独立成分分析:ICA算法本质寻找一个线性变换z = Wx,使得z的各个特征分量之间的独立性最大
5.特征选择:从给定特征集中选择部分作为最终的特征集进行建模,要求尽量少的无关特征,尽量多的相关特征,尽可能合适的特征数量
(1)x1...xn---------x1'...xk'
(2)特征是用来建模的,我们不知道那些好用,那些不好用,唯一能做的是选择一个特征子集进行建模,然后使用某个标准来评估,不断重复该过程,直到找到最好的子集。
(3)特征的选择关注两个方面:如何选择子集以及如何评价子集,而对于某个特征的关注在于该特征的离散型和该特征的重要性
(4)如何选择:特征数量从少到多或从多减少,或者启发式等等。如何评价:信息熵增益
(5)过滤式(filter):关注的是单个特征与预测值之间的关系,先对数据集进行特征选择,其过程与后续学习器无关,即设计一些统计量来过滤特征,并不考虑后续学习器问题
【1】思想:通过某个标准取衡量所有特征的重要性(特征与预测变量之间的相关性),从而对特征进行排名,然后设定条件选择排名靠前的特征
【2】评价标准:分类问题(卡方检验,f_classif, mutual_info_classif,互信息)回归问题(皮尔森相关系数,f_regression, mutual_info_regression,最大信息系数),相似性度量,方差...
【3】优点:计算时间上比较高效,而且对过拟合问题有较高的鲁棒性
【4】缺点:倾向于选择冗余特征,即没有考虑到特征之间的相关性
(6)包装法(Wrapper):关注的是特征子集对模型的影响,直接把最终将要使用的学习器的性能作为特征子集的评价原则。其目的就是为给定学习器选择最有利于其性能、量身定做的特征子集。
【1】思想:通过某个标准来选择特征子集,利用在模型上的表现,使用交叉验证,选择表现最好的子集,迭代地选择特征子集再进行评价
【2】选择子集:逐步回归、向前选择(贪心法扩充子集)和向后选择(贪心法缩小子集)、完全搜索、启发式搜索、随机搜索
【3】优点:直接针对特定学习器进行优化,考虑到特征之间的关联性,因此通常包裹式特征选择比过滤式特征选择能训练得到一个更好性能的学习器,
【4】缺点:当观测数据较少时容易过拟合,由于特征选择过程需要多次训练学习器,故计算开销要比过滤式特征选择要大得多
(7)集成方法(Embedded):利用学习器自动选择特征。将特征选择与学习器训练过程融为一体,两者在同一个优化过程中完成的
【1】思想:结合特征选择和训练器,自动得出比较好的子集
【2】方法:正则化(L_1, L_2
范数)、决策树、深度学习、回归模型,SVM,随机森林
【3】优点:结合前两者优点
【4】缺点:必须事先知道什么是好的选择
(8)验证:在验证数据集上验证选出来的特征子集的有效性
----------在数据采样之后,得到完整数据集之后,我们就可以进行划分数据集的工作-------
七.划分数据集
1.一般来说,我们假设数据集里的每一个数据样本都是从同一个概率分布中相互独立地生成出的(独立同分布假设),我们可以把整个数据集划分为训练集+验证集+测试集,
2.训练集:用来训练模型,利用训练集来训练得到一个模型
(1)训练集数据应该要占整体的大多数,但是又不能过多,一般占6成。训练集数据还应均匀,比如类别要均衡
(2)我们会先快速选择一些模型,此时模型的参数并没有,通过训练集计算梯度更新权重,从而确定这些模型的参数
(3)训练误差是指训练后的模型在训练集上表现出来的误差,
(4)随着训练的数据的增多,模型会渐渐拟合数据集,模型的参数在训练中使训练误差不断降低。
3.验证集:用来选择模型,在模型选择和调参时在验证集上进行模型评估从而选择模型
(1)验证集是用于评估所有学得模型(此时每种模型都会有验证误差),选择验证误差最小的算法模型作为最终学得的模型,
(2)验证误差是模型在验证集上表现的误差
(3)通过验证集从许多快速模型中选择验证误差最小的模型,得到相对来说最好的模型,
(4)这个模型已经确定了参数后,但是超参数未确定,我们可以调整模型的超参数,再通过验证误差来选择最好的超参数,这个过程其实是对验证集拟合,因此不在测试集上调整超参数
4.测试集:用来评估最终的模型
(1)测试集用来衡量测试误差(常被用来作为泛化误差的近似),用于评价确定的模型的效果。测试集中的数据必须是模型从未见过的数据
(2)测试误差应该不参与模型的训练拟合,不参与模型的调参,不参与模型的选择,只对最终的模型进行评价
5.学习曲线:随着训练样本的逐渐增多,算法训练出的模型的表现能力;
(1)学习曲线:用来评估模型的学习效果;通过学习曲线可以清晰的看出模型对数据的过拟合和欠拟合;
(2)一般来说,训练误差的期望值低于验证集,验证误差又小于泛化误差,这两者并无关联,而我们关注训练误差的同时,更关注泛化误差,因此一味地降低训练误差并不意味着泛化误差一定会降低。
(3)若用更复杂的模型来学习训练集,随着模型复杂度的增大,模型能够更好地拟合数据点,对应训练误差会明显将低,模型复杂度由低到高代表模型拟合程度的提高、偏差值的降低。而对于测试误差或验证误差来说,是先降低再升高,这是因为模型复杂度的提高会导致训练集上的过拟合使得模型在验证集上表现差
模型高偏差-----欠拟合----训练误差大,验证误差大----模型简单
模型高偏差-----欠拟合----训练误差小,验证误差大----模型复杂
(3)正常情况下,对于一个模型,当训练数据较少时,模型能够比较好拟合数据点,此时训练误差低,验证误差高,随着训练集的增大,训练误差不断增加,验证误差不断降低,两者都趋于平滑,而且接近,因为随着数据量的增加,拟合能力降低和泛化能力提高。
(4)高偏差模型:表示模型拟合能力差,此时初始训练误差和测试误差的值都很大,而且数据的增多对于模型的作用不大,
(5)高方差模型:表示模型的泛化能力差,但是拟合能力好,则随着数据量的增大,训练误差增大幅度不大,但同时验证误差的下降幅度也不大
6.正则化参数的影响:正则化参数λ越大,对θ惩罚的越厉害,θ->0,假设函数是一条水平线,欠拟合、高偏差;正则化参数越小,相当于正则化的作用越弱,过拟合、高方差。
正则化参数过大:参数近0,高偏差,欠拟合 ,训练误差大,验证误差大
正则化参数过小j(近0):几乎没有惩罚参数,高方差,过拟合,训练误差小,验证误差大
正则化参数选择:0,0.01,0.02,0.08.。。。。10 交叉验证误差评价不同正则化参数的模型,选择使验证误差最小的那个模型的正则化参数
7.总结:
(1)训练集误差大、交叉验证集误差也大:欠拟合、高偏差、多项式次数d太小、λ太大;
(2)训练集误差小、交叉验证集误差却很大:过拟合、高方差、多项式次数d太大、λ太下、样本量太少。
8.数据集划分方法
1)留出法(hold-out):把数据集划分为两个互斥集合,一个用作训练,一个用作测试
【1】划分要尽可能保持数据分布的一致性,分层采样(stratified sampling)(保持类别比例的采样)
【2】采用若干次随机划分,重复试验,取平均值作为评估结果
【3】一般将2/3~4/5的样本用于训练,其余用于测试
(2)交叉验证法(cross validation):将数据集划分为k个大小相似的互斥集合
【1】每个子集都尽可能保持数据分布的一致性,即分层采样得到
【2】将k-1个子集作训练集,剩下那个作测试集,即进行k次训练和测试
【3】k次试验的k个结果取平均
【4】留一法(leave-out-out)(LOO):k=样本数,训练集较大时留一法计算复杂度高
(3)自助法(bootstrapping):以自助采样
【1】自助采样:每次随机从数据集D中挑选一个样本,将其拷贝放入采样数据集D‘,然后将其放回到D中,使它下次仍有可能被采到,
【2】重复自助采样m次,得到一个包含m个样本的数据集D’作为训练集
【3】约1/e=0.368的样本为出现在D’中
【4】适用于数据集较小,难以有效划分训练/测试集时
9.把最终的模型在整个数据集上重新训练,得到最终模型
------对整个数据集进行可视化是必要的------------
八.数据可视化
1.在建模前进行数据可视化可以让我们直观地观察数据的规律,从而选择适合的模型------在划分数据集后,在训练模型前
2.对于模型进行可视化能够使我们直观地观察所建模型与真实数据的差距,从而验证我们所建模型的正确性------建模后
3.可视化方法:
(1)条形图:展示某些离散的项目的集合的数量变化
(2)线图:展示某种事物的趋势
(3)散点图:展示特征项之间关系
九.总结
1.补充
(1)不在模型中用到的数据并不代表它不重要,每个数据都很重要,不能删除,要进行备份保存,
(2)有时候再好的模型也受制于训练集
(3)涉及到特征,这就要和模型相结合
(4)数据可视化很重要
来源:https://www.cnblogs.com/yu-liang/p/12446083.html