当前位置:   article > 正文

2023双非计算机硕士应战秋招算法岗之机器学习基础知识_使用sklearn建立的线性回归模型没有系数的标准误。在同方差的假设下,系数的方差-

使用sklearn建立的线性回归模型没有系数的标准误。在同方差的假设下,系数的方差-

目录
特征工程 2
缺失值处理 15
评价指标 33
逻辑回归 37
决策树 40
随机森林 46
SVM 49
Knn 56
Kmeans 59
PCA 66
朴素贝叶斯 68
常见分类算法的优缺点 72

特征工程
1.什么是特征工程
有这么一句话在业界广泛流传,数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。那特征工程到底是什么呢?顾名思义,其本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用。
特征工程主要分为三部分:
1.数据预处理 对应的sklearn包:sklearn-Processing data
2.特征选择 对应的sklearn包: sklearn-Feature selection
3.降维 对应的sklearn包: sklearn-Dimensionality reduction
本文中使用sklearn中的IRIS(鸢尾花)数据集来对特征处理功能进行说明,
2. 数据预处理
通过特征提取,我们能得到未经处理的特征,这时的特征可能有以下问题:
• 不属于同一量纲:即特征的规格不一样,不能够放在一起比较。无量纲化可以解决这一问题。
• 信息冗余:对于某些定量特征,其包含的有效信息为区间划分,例如学习成绩,假若只关心“及格”或不“及格”,那么需要将定量的考分,转换成“1”和“0”表示及格和未及格。二值化可以解决这一问题。
• 定性特征不能直接使用:通常使用哑编码的方式将定性特征转换为定量特征,假设有N种定性值,则将这一个特征扩展为N种特征,当原始特征值为第i种定性值时,第i个扩展特征赋值为1,其他扩展特征赋值为0。哑编码的方式相比直接指定的方式,不用增加调参的工作,对于线性模型来说,使用哑编码后的特征可达到非线性的效果。
• 存在缺失值:填充缺失值。
• 信息利用率低:不同的机器学习算法和模型对数据中信息的利用是不同的,之前提到在线性模型中,使用对定性特征哑编码可以达到非线性的效果。类似地,对定量变量多项式化,或者进行其他的数据变换,都能达到非线性的效果。
我们使用sklearn中的preproccessing库来进行数据预处理。
2.1 无量纲化
无量纲化使不同规格的数据转换到同一规格
2.1.1 标准化(也叫Z-score standardization)(对列向量处理)
将服从正态分布的特征值转换成标准正态分布,标准化需要计算特征的均值和标准差,公式表达为:

2.1.2 区间缩放(对列向量处理)
区间缩放法的思路有多种,常见的一种为利用两个最值进行缩放,公式表达为:
使用preproccessing库的MinMaxScaler类对数据进行区间缩放的代码如下:

在什么时候使用标准化比较好,什么时候区间缩放比较好呢?

  1. 在后续的分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA、LDA这些需要用到协方差分析进行降维的时候,同时数据分布可以近似为正太分布,标准化方法(Z-score
    standardization)表现更好。
  2. 在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用区间缩放法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0
    255]的范围。
    2.1.3 归一化(对行向量处理)
    归一化目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。规则为l2的归一化公式如下:

使用preproccessing库的Normalizer类对数据进行归一化的代码如下:
2.2 对定量特征二值化(对列向量处理)
定性与定量区别
定性:博主很胖,博主很瘦
定量:博主有80kg,博主有60kg
一般定性都会有相关的描述词,定量的描述都是可以用数字来量化处理
定量特征二值化的核心在于设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0,公式表达如下:

2.3 对定性特征哑编码(对列向量处理)
因为有些特征是用文字分类表达的,或者说将这些类转化为数字,但是数字与数字之间是没有大小关系的,纯粹的分类标记,这时候就需要用哑编码对其进行编码。IRIS数据集的特征皆为定量特征,使用其目标值进行哑编码(实际上是不需要的)。
2.4 缺失值计算(对列向量处理)
由于IRIS数据集没有缺失值,故对数据集新增一个样本,4个特征均赋值为NaN,表示数据缺失。
2.5 数据变换
2.5.1 多项式变换(对行向量处理)
常见的数据变换有基于多项式的、基于指数函数的、基于对数函数的。4个特征,度为2的多项式转换公式如下:

1
2.5.1 自定义变换
基于单变元函数的数据变换可以使用一个统一的方式完成,
总结

  1. 特征选择
    当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,从两个方面考虑来选择特征:
    • 特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。
    • 特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。除方差法外,本文介绍的其他方法均从相关性考虑。
    根据特征选择的形式又可以将特征选择方法分为3种:
    • Filter:过滤法,不用考虑后续学习器,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
    • Wrapper:包装法,需考虑后续学习器,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
    • Embedded:嵌入法,是Filter与Wrapper方法的结合。先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。
    我们使用sklearn中的feature_selection库来进行特征选择。
    3.1 Filter
    先进行特征选择,然后去训练学习器,所以特征选择的过程与学习器无关相当于先对特征进行过滤操作,然后用特征子集来训练分类器。
    主要思想:对每一维特征“打分”,即给每一维的特征赋予权重,这样的权重就代表着该特征的重要性,然后依据权重排序。
    主要方法:
    Chi-squared test(卡方检验)
    Information gain(信息增益)
    Correlation coefficient scores(相关系数)
    优点:运行速度快,是一种非常流行的特征选择方法。
    缺点:无法提供反馈,特征选择的标准/规范的制定是在特征搜索算法中完成,学习算法无法向特征搜索算法传递对特征的需求。另外,可能处理某个特征时由于任意原因表示该特征不重要,但是该特征与其他特征结合起来则可能变得很重要。
    3.1.1 方差选择法
    使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。
    3.1.2 卡方检验
    卡方检验是一种用途很广的计数资料的假设检验方法,由卡尔•皮尔逊提出。卡方值描述两个事件的独立性或者描述实际观察值与期望值的偏离程度。卡方值越大,表名实际观察值与期望值偏离越大,也说明两个事件的相互独立性越弱。
    检验特征对标签的相关性,选择其中K个与标签最相关的特征。
    只适用于分类问题中离散型特征筛选,不能用于分类问题中连续型特征的筛选,也不能用于回归问题的特征筛选。
    3.1.3 Pearson相关系数(Pearson Correlation)
    皮尔森相关系数是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性。

协方差是度量各个维度偏离其均值的程度,协方差的值为正值时说明两者是正相关,否则是负相关的。结果的取值区间为[-1,1],-1表示完全的负相关,+1表示完全的正相关,0表示没有线性相关,绝对值表示相关性的强度。
标准差也称均方差,是方差的算术平方根,能反映一个数据集的离散程度。
3.2 Wrapper
3.2.1 递归特征消除法
递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。
3.3 Embedded
3.3.1 基于惩罚项的特征选择法
使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。
3.3.2 基于树模型的特征选择法
树模型中GBDT可用来作为基模型进行特征选择,
总结

  1. 降维
    当特征选择完成后,可以直接训练模型了,但是可能由于特征矩阵过大,导致计算量大,训练时间长的问题,因此降低特征矩阵维度也是必不可少的。常见的降维方法除了以上提到的基于L1惩罚项的模型以外,另外还有主成分分析法(PCA)和线性判别分析(LDA),线性判别分析本身也是一个分类模型。PCA和LDA有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。

其他特征选择的方法
5.去掉取值变化小的特征(Removing features with low variance)
该方法一般用在特征选择前作为一个预处理的工作,即先去掉取值变化小的特征,然后再使用其他特征选择方法选择特征。
考察某个特征下,样本的方差值,可以认为给定一个阈值,抛弃哪些小于某个阈值的特征。
1.实现原理
• 离散型变量:假设某特征的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,那就可以认为这个特征作用不大。如果100%都是1,那这个特征就没意义了。
• 连续型变量:需要将连续变量离散化之后才能用。
而且实际当中,一般不太会有95%以上都取某个值的特征存在,所以这种方法虽然简单但是不太好用。可以把它作为特征选择的预处理,先去掉那些取值变化小的特征,然后再从接下来提到的的特征选择方法中选择合适的进行进一步的特征选择。

6.随机森林选择
随机森林具有准确率高、鲁棒性好、易于使用等优点,这使得它成为了目前最流行的机器学习算法之一。随机森林提供了两种特征选择的方法:mean decrease impurity和mean decrease accuracy。
6.1.平均不纯度减少(mean decrease impurity)
1)原理介绍
• 随机森林由多颗CART决策树构成,决策树中的每一个节点都是关于某个特征的条件,为的是将数据集按照不同的响应变量一分为二。
• CART利用不纯度可以确定节点(最优条件),对于分类问题,通常采用基尼不纯度,对于回归问题,通常采用的是方差或者最小二乘拟合。
• 当训练决策树的时候,可以计算出每个特征减少了多少树的不纯度。对于一个决策树森林来说,可以算出每个特征平均减少了多少不纯度,并把它平均减少的不纯度作为特征选择的标准。
• 随机森林基于不纯度的排序结果非常鲜明,在得分最高的几个特征之后的特征,得分急剧的下降。
6.2.平均精确度减少(mean decrease accuracy)
1)原理介绍

  1. 通过直接度量每个特征对模型精确率的影响来进行特征选择。
  2. 主要思路是打乱每个特征的特征值顺序,并且度量顺序变动对模型的精确率的影响。
    • 对于不重要的变量来说,打乱顺序对模型的精确率影响不会太大。
    • 对于重要的变量来说,打乱顺序就会降低模型的精确率。
    7.顶层特征选择
    顶层特征选择发建立在基于模型的特征选择方法基础之上的,例如线性回归和SVM等,在不同的子集上建立模型,然后汇总最终确定特征得分。
    7.1.稳定性选择(Stability selection)
    稳定性选择常常是一种既能够有助于理解数据又能够挑出优质特征的这种选择。
    1)原理介绍
    • 稳定性选择是一种基于二次抽样和选择算法相结合较新的方法,选择算法可以是回归、SVM或其他类似的方法。
    • 它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断的重复,最终汇总特征选择结果。比如可以统计某个特征被认为是重要特征的频率(被选为重要特征的次数除以它所在的子集被测试的次数)。
    • 理想情况下,重要特征的得分会接近100%。稍微弱一点的特征得分会是非0的数,而最无用的特征得分将会接近于0。
    7.2.递归特征消除(Recursive feature elimination,RFE)
    1)原理介绍
    • 递归特征消除的主要思想是反复的构建模型(如SVM或者回归模型)然后选出最好的(或者最差的)的特征(可以根据系数来选),把选出来的特征放到一遍,然后在剩余的特征上重复这个过程,直到所有特征都遍历了。
    • 这个过程中特征被消除的次序就是特征的排序。因此,这是一种寻找最优特征子集的贪心算法。
    • RFE的稳定性很大程度上取决于在迭代的时候底层用哪种模型。
    假如RFE采用的普通的回归,没有经过正则化的回归是不稳定的,那么RFE就是不稳定的。
    假如RFE采用的是Ridge,而用Ridge正则化的回归是稳定的,那么RFE就是稳定的。
    8.线性模型与正则化
    8.1.主要思想
    当所有特征在相同尺度上时,最重要的特征应该在模型中具有最高系数,而与输出变量不相关的特征应该具有接近零的系数值。即使使用简单的线性回归模型,当数据不是很嘈杂(或者有大量数据与特征数量相比)并且特征(相对)独立时,这种方法也能很好地工作。
    8.2.正则化模型
    正则化就是把额外的约束或者惩罚项加到已有模型(损失函数)上,以防止过拟合并提高泛化能力。损失函数由原来的E(X,Y)变为E(X,Y)+alpha||w||,w是模型系数组成的向量(有些地方也叫参数parameter,coefficients),||·||一般是L1或者L2范数,alpha是一个可调的参数,控制着正则化的强度。当用在线性模型上时,L1正则化和L2正则化也称为Lasso和Ridge。
    1)L1正则化/Lasso regression
    L1正则化将系数w的l1范数作为惩罚项加到损失函数上,由于正则项非零,这就迫使那些弱的特征所对应的系数变成0。因此L1正则化往往会使学到的模型很稀疏(系数w经常为0),这个特性使得L1正则化成为一种很好的特征选择方法。
    Lasso能够挑出一些优质特征,同时让其他特征的系数趋于0。当如需要减少特征数的时候它很有用,但是对于数据理解来说不是很好用。
    2)L2正则化/Ridge regression
    L2正则化将系数向量的L2范数添加到了损失函数中。
    • 由于L2惩罚项中系数是二次方的,这使得L2和L1有着诸多差异,最明显的一点就是,L2正则化会让系数的取值变得平均。
    • 对于关联特征,这意味着他们能够获得更相近的对应系数。
    • Ridge将回归系数均匀的分摊到各个关联变量上。
    L2正则化对于特征选择来说一种稳定的模型,不像L1正则化那样,系数会因为细微的数据变化而波动。所以L2正则化和L1正则化提供的价值是不同的,L2正则化对于特征理解来说更加有用:表示能力强的特征对应的系数是非零。
    许多特征具有系数0。L1正则化回归的稳定性与非正则化线性模型类似,这意味着当数据中存在相关特征时,系数(以及特征等级)即使在小数据变化时也会发生显着变化。
    3)L2正则化线性模型
    从示例中可以看出,线性回归的系数变化很大,具体取决于生成的数据。然而,对于L2正则化模型,系数非常稳定并且密切反映数据的生成方式(所有系数接近1)。
    (1) 单变量特征选择可以用于理解数据、数据的结构、特点,也可以用于排除不相关特征,但是它不能发现冗余特征。
    (2) 正则化的线性模型可用于特征理解和特征选择。相比起L1正则化,L2正则化的表现更加稳定,L2正则化对于数据的理解来说很合适。由于响应变量和特征之间往往是非线性关系,可以采用basis expansion的方式将特征转换到一个更加合适的空间当中,在此基础上再考虑运用简单的线性模型。
    (3) 随机森林是一种非常流行的特征选择方法,它易于使用。但它有两个主要问题:
    • 重要的特征有可能得分很低(关联特征问题)
    • 这种方法对特征变量类别多的特征越有利(偏向问题)
    (4)特征选择在很多机器学习和数据挖掘场景中都是非常有用的。在使用的时候要弄清楚自己的目标是什么,然后找到哪种方法适用于自己的任务。
    • 当选择最优特征以提升模型性能的时候,可以采用交叉验证的方法来验证某种方法是否比其他方法要好。
    • 当用特征选择的方法来理解数据的时候要留心,特征选择模型的稳定性非常重要,稳定性差的模型很容易就会导致错误的结论。
    • 对数据进行二次采样然后在子集上运行特征选择算法能够有所帮助,如果在各个子集上的结果是一致的,那就可以说在这个数据集上得出来的结论是可信的,可以用这种特征选择模型的结果来理解数据。
    (5)关于训练模型的特征筛选,建议的实施流程 :
  3. 数据预处理后,先排除取值变化很小的特征。如果机器资源充足,并且希望尽量保留所有信息,可以把阈值设置得比较高,或者只过滤离散型特征只有一个取值的特征。
  4. 如果数据量过大,计算资源不足(内存不足以使用所有数据进行训练、计算速度过慢),可以使用单特征选择法排除部分特征。这些被排除的特征并不一定完全被排除不再使用,在后续的特征构造时也可以作为原始特征使用。
  5. 如果此时特征量依然非常大,或者是如果特征比较稀疏时,可以使用PCA(主成分分析)和LDA(线性判别)等方法进行特征降维。
  6. 经过样本采样和特征预筛选后,训练样本可以用于训练模型。但是可能由于特征数量比较大而导致训练速度慢,或者想进一步筛选有效特征或排除无效特征(或噪音),我们可以使用正则化线性模型选择法、随机森林选择法或者顶层特征选择法进一步进行特征筛选。
    最后,特征筛选是为了理解数据或更好地训练模型,我们应该根据自己的目标来选择适合的方法。为了更好/更容易地训练模型而进行的特征筛选,如果计算资源充足,应尽量避免过度筛选特征,因为特征筛选很容易丢失有用的信息。如果只是为了减少无效特征的影响,为了避免过拟合,可以选择随机森林和XGBoost等集成模型来避免对特征过拟合。

缺失值处理
数据值缺失是数据分析中经常遇到的问题之一。当缺失比例很小时,可直接对缺失记录进行舍弃或进行手工处理。但在实际数据中,往往缺失数据占有相当的比重。这时如果手工处理非常低效,如果舍弃缺失记录,则会丢失大量信息,使不完全观测数据与完全观测数据间产生系统差异,对这样的数据进行分析,很可能会得出错误的结论。
造成数据缺失的原因

  1. 信息被遗漏,可能是因为输入时认为不重要、忘记填写了或对数据理解错误而遗漏,也可能是由于数据采集设备的故障、存储介质的故障、传输媒体的故障、一些人为因素等原因而丢失。
  2. 信息暂时无法获取。例如在医疗数据库中,并非所有病人的所有临床检验结果都能在给定的时间内得到,就致使一部分属性值空缺出来
  3. 获取这些信息的代价太大。
    对缺失值的处理要具体问题具体分析,属性缺失有时并不意味着数据缺失,缺失本身是包含信息的,所以需要根据不同应用场景下缺失值可能包含的信息进行合理填充。
    缺失的类型
    将数据集中不含缺失值的变量称为完全变量,数据集中含有缺失值的变量称为不完全变量。从缺失的分布来将缺失可以分为完全随机缺失,随机缺失和完全非随机缺失。
  4. 完全随机缺失(missing completely at
    random,MCAR):指的是数据的缺失是完全随机的,不依赖于任何不完全变量或完全变量,不影响样本的无偏性。如家庭地址缺失。
  5. 随机缺失(missing at
    random,MAR):指的是数据的缺失不是完全随机的,即该类数据的缺失依赖于其他完全变量。例如财务数据缺失情况与企业的大小有关。
  6. 非随机缺失(missing not at
    random,MNAR):指的是数据的缺失与不完全变量自身的取值有关。如高收入人群的不原意提供家庭收入。
    随机缺失可以通过已知变量对缺失值进行估计;而非随机缺失还没有很好的解决办法。
    缺失值处理的方法
    缺失值处理主要有三种主要方法:删除元组、数据补齐、不处理
    删除元组
    存在遗漏信息属性值的对象(元组,记录)删除,从而得到一个完备的信息表,在对象有多个属性缺失值、被删除的含缺失值的对象与初始数据集的数据量相比非常小的情况下非常有效
    优点:快速,不需要任何先验知识;
    缺点:它以减少历史数据来换取信息的完备,会丢弃大量隐藏在这些对象中的信息
    数据补齐
    这类方法是用一定的值去填充空值,从而使信息表完备化。
    常用的方法如下:
    人工填写(filling manually)
    由于最了解数据的还是用户自己,因此这个方法产生数据偏离最小,可能是填充效果最好的一种。然而一般来说,该方法很费时,当数据规模很大、空值很多的时候,该方法是不可行的。
  7. 特殊值填充(Treating Missing Attribute values as Special values)
  8. 将空值作为一种特殊的属性值来处理,它不同于其他的任何属性值。如所有的空值都用“unknown”填充。这样将形成另一个有趣的概念,可能导致严重的数据偏离,一般不推荐使用。
  9. 平均值填充(Mean/Mode Completer)
    将初始数据集中的属性分为数值属性和非数值属性来分别进行处理。
    如果空值是数值型的,就根据该属性在其他所有对象的取值的平均值来填充该缺失的属性值;
    如果空值是非数值型的,就根据统计学中的众数原理,用该属性在其他所有对象的取值次数最多的值(即出现频率最高的值)来补齐该缺失的属性值。
    条件平均值填充法(Conditional Mean Completer)
    在该方法中,用于求平均的值并不是从数据集的所有对象中取,而是从与该对象具有相同决策属性值的对象中取得。
  10. 热卡填充(Hot deck imputation,或就近补齐)
    对于一个包含空值的对象,热卡填充法在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。不同的问题可能会选用不同的标准来对相似进行判定。该方法概念上很简单,且利用了数据间的关系来进行空值估计。这个方法的缺点在于难以定义相似标准,主观因素较多。
  11. K最近距离邻法(K-means clustering)
    先根据欧式距离或相关分析来确定距离具有缺失数据样本最近的K个样本,将这K个值加权平均来估计该样本的缺失数据。
  12. 回归(Regression)
    基于完整的数据集,建立回归方程。对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。当变量不是线性相关时会导致有偏差的估计。
  13. 期望值最大化方法(Expectation maximization,EM)
    EM算法是一种在不完全数据情况下计算极大似然估计或者后验分布的迭代算法。在每一迭代循环过程中交替执行两个步骤:E步(Excepctaion step,期望步),在给定完全数据和前一次迭代所得到的参数估计的情况下计算完全数据对应的对数似然函数的条件期望;M步(Maximzation step,极大化步),用极大化对数似然函数以确定参数的值,并用于下步的迭代。算法在E步和M步之间不断迭代直至收敛,即两次迭代之间的参数变化小于一个预先给定的阈值时结束。该方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。
  14. C4.5方法
    通过寻找属性间的关系来对遗失值填充。它寻找之间具有最大相关性的两个属性,其中没有遗失值的一个称为代理属性,另一个称为原始属性,用代理属性决定原始属性中的遗失值。这种基于规则归纳的方法只能处理基数较小的名词型属性
  15. 不处理
    补齐处理只是将未知值补以我们的主观估计值,不一定完全符合客观事实,在对不完备信息进行补齐处理的同时,我们或多或少地改变了原始的信息系统。而且,对空值不正确的填充往往将新的噪声引入数据中,使挖掘任务产生错误的结果。因此,在许多情况下,我们还是希望在保持原始信息不发生变化的前提下对信息系统进行处理。
    主要有以下几种方法:
    • 贝叶斯网络
    • 人工神经网络
    • 把变量映射到高维空间
    比如性别,有男、女、缺失三种情况,则映射成3个变量:是否男、是否女、是否缺失。连续型变量也可以这样处理。比如Google、百度的CTR预估模型,预处理时会把所有变量都这样处理,达到几亿维。这样做的好处是完整保留了原始数据的全部信息、不用考虑缺失值、不用考虑线性不可分之类的问题。缺点是计算量大大提升
    总结
    总的来说,处理缺失值的主要方法如下:
    使用可用特征的均值来填补缺失值
    使用特殊值来填补缺失值
    忽略有缺失值的样本
    使用相似样本的均值填补缺失值
    使用另外的机器学习算法预测缺失值

8.给你一个数据集,这个数据集有缺失值,且这些缺失值分布在离中值有1个标准偏差的范围内。百分之多少的数据不会受到影响?为什么?
这个问题给了我们足够的提示来开始思考!由于数据分布在中位数附近,让我们先假设这是一个正态分布。
我们知道,在一个正态分布中,约有68%的数据位于跟平均数(或众数、中位数)1个标准差范围内的,那样剩下的约32%的数据是不受影响的。
因此,约有32%的数据将不受到缺失值的影响。
9.给你一个缺失值多于30%的数据集?比方说,在50个变量中,有8个变量的缺失值都多于30%。你对此如何处理
• 1.把缺失值分成单独的一类,这些缺失值说不定会包含一些趋势信息。
• 2.我们可以毫无顾忌地删除它们。
• 3.或者,我们可以用目标变量来检查它们的分布,如果发现任何模式,我们将保留那些缺失值并给它们一个新的分类,同时删除其他缺失值。

1、L1与L2正则化
他们都是可以防止过拟合,降低模型复杂度。
L1会趋向于产生少量的特征,而其他的特征都是0;L2会选择更多的特征,这些特征都会接近于0。L1在特征选择时非常有用,L2就只是一种规则化而已。
简单总结一下就是:
L1范数: 为x向量各个元素绝对值之和。
L2范数: 为x向量各个元素平方和的1/2次方,L2范数又称Euclidean范数或者Frobenius范数 。
Lp范数: 为x向量各个元素绝对值p次方和的1/p次方。
在支持向量机学习过程中,L1范数实际是一种对于成本函数求解最优的过程,因此,L1范数正则化通过向成本函数中添加L1范数,使得学习得到的结果满足稀疏化,从而方便人类提取特征,即L1范数可以使权值稀疏,方便特征提取。
L2范数可以防止过拟合,提升模型的泛化能力。
L1和L2的差别,为什么一个让绝对值最小,一个让平方最小,会有那么大的差别呢?看导数一个是1一个是w便知, 在靠进零附近, L1以匀速下降到零, 而L2则完全停下来了. 这说明L1是将不重要的特征(或者说, 重要性不在一个数量级上)尽快剔除, L2则是把特征贡献尽量压缩最小但不至于为零. 两者一起作用, 就是把重要性在一个数量级(重要性最高的)的那些特征一起平等共事(简言之, 不养闲人也不要超人)。
2、归一化
能不归一化最好不归一化,之所以进行数据归一化是因为各维度的量纲不相同。而且需要看情况进行归一化。
归一化就是要把你需要处理的数据经过处理后限制在你需要的一定范围内。

  1. 归一化后加快了梯度下降求最优解的速度。等高线变得显得圆滑,能较快的收敛。不做归一化,梯度下降过程容易走之字,很难收敛甚至不能收敛;
  2. 把有量纲表达式变为无量纲表达式,
    有可能提高精度。一些分类器需要计算样本之间的距离,如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,而实际情况可能是值域范围小的特征更重要。
    3、特征向量的归一化方法有哪些?
    线性函数转换,表达式如下:y=(x-MinValue)/(MaxValue-MinValue)
    对数函数转换,表达式如下:y=log10 (x)
    反余切函数转换 ,表达式如下:y=arctan(x)*2/PI
    减去均值,除以方差:y=(x-means)/ variance
    4、怎么解释置信区间?
    置信区间属于频率学派的范畴。真值要么在,要么不在。比如,95%置信区间,并不是真值在这个区间内的概率是95%,而是100次随机抽样中如果95次包含了参数真值,那么置信度为95%。
    5、哪些机器学习算法不需要做归一化处理?
    概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、随机森林。而像adaboost、gbdt、xgboost、svm、lr、KNN、KMeans之类的最优化问题就需要归一化。
    6、标准化与归一化的区别?
    标准化是依照特征矩阵的列处理数据,将样本的特征值转换到同一量纲下;归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。
    7、为什么越小的参数说明模型越简单?
    过拟合的,拟合会经过曲面的每个点,也就是说在较小的区间里面可能会有较大的曲率,这里的导数就是很大,线性模型里面的权值就是导数,所以越小的参数说明模型越简单。
    8、过拟合和欠拟合产生的原因有哪些?
  3. 样本数据的问题
    a 样本数量太少
    b 抽样方法错误,抽出的样本数据不能足够代表业务场景。比如样本符合正态分布,却按均分分布抽样,或者样本数据不能代表整体数据的分布
    c 样本里的噪音数据干扰过大
  4. 模型问题
    a 模型复杂度高 、参数太多
    b 特征选择/特征降维
    c 权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征
    欠拟合(underfiting / high bias)
    训练误差和验证误差都很大,这种情况称为欠拟合。出现欠拟合的原因是模型尚未学习到数据的真实结构。因此,模拟在训练集和验证集上的性能都很差。
    解决办法
    • 1 做特征工程,添加跟多的特征项。如果欠拟合是由于特征项不够,没有足够的信息支持模型做判断。
    • 2
    增加模型复杂度。如果模型太简单,不能够应对复杂的任务。可以使用更复杂的模型,减小正则化系数。比如说可以使用SVM的核函数,增加了模型复杂度,把低维不可分的数据映射到高维空间,就可以线性可分,减小欠拟合。还可以使用一些集成学习方法。
    • 3 集成学习方法boosting(如GBDT)能有效解决high bias
    9、解决过拟合的方法有哪些?
    过拟合是泛化的反面,好比乡下快活的刘姥姥进了大观园会各种不适应,但受过良好教育的林黛玉进贾府就不会大惊小怪。实际训练中, 降低过拟合的办法一般如下:
  5. 样本数据方面
    a 增加样本数量,对样本进行降维,添加验证数据
    b 抽样方法要符合业务场景
    c 清洗噪声数据
  6. 模型或训练问题
    a 控制模型复杂度,优先选择简单的模型,或者用模型融合技术。
    b 利用先验知识,添加正则项。L1正则更加容易产生稀疏解、L2正则倾向于让参数w趋向于0.
    c 交叉验证
    d 不要过度训练,最优化求解时,收敛之前停止迭代
    正则化(Regularization)
    L2正则化:目标函数中增加所有权重w参数的平方之和, 逼迫所有w尽可能趋向零但不为零. 因为过拟合的时候, 拟合函数需要顾忌每一个点, 最终形成的拟合函数波动很大, 在某些很小的区间里, 函数值的变化很剧烈, 也就是某些w非常大. 为此, L2正则化的加入就惩罚了权重变大的趋势.
    L1正则化:目标函数中增加所有权重w参数的绝对值之和, 逼迫更多w为零(也就是变稀疏. L2因为其导数也趋0, 奔向零的速度不如L1给力了). 大家对稀疏规则化趋之若鹜的一个关键原因在于它能实现特征的自动选择。一般来说,xi的大部分元素(也就是特征)都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的特征权重反而会被考虑,从而干扰了对正确yi的预测。稀疏规则化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些无用的特征,也就是把这些特征对应的权重置为0。
    提前终止(early stopping)
    理论上可能的局部极小值数量随参数的数量呈指数增长, 到达某个精确的最小值是不良泛化的一个来源. 实践表明, 追求细粒度极小值具有较高的泛化误差。这是直观的,因为我们通常会希望我们的误差函数是平滑的, 精确的最小值处所见相应误差曲面具有高度不规则性, 而我们的泛化要求减少精确度去获得平滑最小值, 所以很多训练方法都提出了提前终止策略. 典型的方法是根据交叉叉验证提前终止: 若每次训练前, 将训练数据划分为若干份, 取一份为测试集, 其他为训练集, 每次训练完立即拿此次选中的测试集自测. 因为每份都有一次机会当测试集, 所以此方法称之为交叉验证. 交叉验证的错误率最小时可以认为泛化性能最好, 这时候训练错误率虽然还在继续下降, 但也得终止继续训练了.
    10、机器学习与数据挖掘的区别
    答:机器学习是指在没有明确的程序指令的情况下,给予计算机学习能力,使它能自主的学习、设计和扩展相关算法。数据挖掘则是一种从数据里面提取知识或者未知的、人们感兴趣的规则。在这个过程中应用了机器学习算法。
    11、有监督学习和无监督学习的区别
    • 有监督学习:对具有标记的训练样本进行学习,以尽可能对训练样本集外的数据进行分类预测。如LR,SVM,BP,RF,GBDT;
    • 无监督学习:对未标记的样本进行训练学习,发现这些样本中的结构知识。如聚类、降维。
    12、什么是生成模型和判别模型
    • 生成模型:由数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:P(Y|X)= P(X,Y)/
    P(X)。如朴素贝叶斯、Kmeans;生成模型可以还原联合概率分布p(X,Y),并有较快的学习收敛速度;
    • 判别模型:由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。如k近邻、决策树、SVM直接面对预测,往往准确率较高。
    13、线性分类器与非线性分类器的区别以及优劣
    如果模型是参数的线性函数,并且存在线性分类面,那么就是线性分类器,否则不是。
    • 常见的线性分类器有:LR,贝叶斯分类,单层感知机、线性回归 常见的非线性分类器:决策树、RF、GBDT、多层感知机
    • SVM两种都有(看线性核还是高斯核)
    • 线性分类器速度快、编程方便,但是可能拟合效果不会很好 非线性分类器编程复杂,但是拟合能力强
    14、对于维度很高(特征比数据量还大时)的特征,选择什么样的分类器
    线性分类器,因为维度高的时候,数据一般在维度空间里面会比较稀疏,很有可能线性可分。
    15、对于维度极低的特征,你是选择线性还是非线性分类器
    非线性分类器,低维空间可能很多特征都跑到一起了,导致线性不可分。
    其他高人见解:
  7. 如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM
  8. 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel
  9. 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况
    16、什么是偏差与方差?
    泛化误差可以分解成偏差的平方加上方差加上噪声。
    • 偏差度量了学习算法的期望预测和真实结果的偏离程度,刻画了学习算法本身的拟合能力;
    • 方差度量了同样大小的训练集的变动所导致的学习性能的变化,刻画了数据扰动所造成的影响;噪声表达了当前任务上任何学习算法所能达到的期望泛化误差下界,刻画了问题本身的难度。
    • 方差描述的是训练数据在不同迭代阶段的训练模型中,预测值的变化波动情况(或称之为离散情况)。从数学角度看,可以理解为每个预测值与预测均值差的平方和的再求平均数。通常在模型训练中,初始阶段模型复杂度不高,为低方差;随着训练量加大,模型逐步拟合训练数据,复杂度开始变高,此时方差会逐渐变高。
    • 偏差和方差一般称为bias和variance,一般训练程度越强,偏差越小,方差越大,泛化误差一般在中间有一个最小值,如果偏差较大,方差较小,此时一般称为欠拟合,而偏差较小,方差较大称为过拟合。
    如左下角的“打靶图”,假设我们的目标是中心的红点,所有的预测值都偏离了目标位置,这就是偏差;
    在右上角的“打靶图”中,预测值围绕着红色中心周围,没有大的偏差,但是整体太分散了,不集中,这就是方差。
    • 低偏差,低方差:这是训练的理想模型,此时蓝色点集基本落在靶心范围内,且数据离散程度小,基本在靶心范围内;
    • 低偏差,高方差:这是深度学习面临的最大问题,过拟合了。也就是模型太贴合训练数据了,导致其泛化(或通用)能力差,若遇到测试集,则准确度下降的厉害;
    • 高偏差,低方差:这往往是训练的初始阶段;
    • 高偏差,高方差:这是训练最糟糕的情况,准确度差,数据的离散程度也差。

    17、模型误差
    模型误差 = 偏差 + 方差 + 不可避免的误差(噪音)。一般来说,随着模型复杂度的增加,方差会逐渐增大,偏差会逐渐减小,见下图:
    18、偏差方差产生的原因
    一个模型有偏差,主要的原因可能是对问题本身的假设是不正确的,或者欠拟合。如:针对非线性的问题使用线性回归;或者采用的特征和问题完全没有关系,如用学生姓名预测考试成绩,就会导致高偏差。
    方差表现为数据的一点点扰动就会较大地影响模型。即模型没有完全学习到问题的本质,而学习到很多噪音。通常原因可能是使用的模型太复杂,如:使用高阶多项式回归,也就是过拟合。
    有一些算法天生就是高方差的算法,如kNN算法。非参数学习算法通常都是高方差,因为不对数据进行任何假设。
    有一些算法天生就是高偏差算法,如线性回归。参数学习算法通常都是高偏差算法,因为对数据有迹象。
    19、偏差与方差的权衡
    我们要知道偏差和方差是无法完全避免的,只能尽量减少其影响。
    • 在避免偏差时,需尽量选择正确的模型,一个非线性问题而我们一直用线性模型去解决,那无论如何,高偏差是无法避免的。
    • 有了正确的模型,我们还要慎重选择数据集的大小,通常数据集越大越好,但大到数据集已经对整体所有数据有了一定的代表性后,再多的数据已经不能提升模型了,反而会带来计算量的增加。而训练数据太小一定是不好的,这会带来过拟合,模型复杂度太高,方差很大,不同数据集训练出来的模型变化非常大。
    • 最后,要选择合适的模型复杂度,复杂度高的模型通常对训练数据有很好的拟合能力。
    • 其实在机器学习领域,主要的挑战来自方差。处理高方差的手段有:
    降低模型复杂度
    减少数据维度;降噪
    增加样本数
    使用验证集
    20、特征离散化
    一、什么是离散化?
    连续数据:身高,年龄,工资
    离散数据:矮,高,红,绿,好,坏

连续属性的离散化就是将连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值。

二、离散化原因
数据离散化是指将连续的数据进行分段,使其变为一段段离散化的区间。
连续特征离散化的本质是:决定选择多少个分割点和确定分割点的位置。
分段的原则有基于等距离、等频率或优化的方法。

数据离散化的原因主要有以下几点:

1、算法需要
比如决策树、朴素贝叶斯等算法,都是基于离散型的数据展开的。如果要使用该类算法,必须将离散型的数据进行。有效的离散化能减小算法的时间和空间开销,提高系统对样本的分类聚类能力和抗噪声能力。

2、离散化的特征相对于连续型特征更易理解,更接近知识层面的表达
比如工资收入,月薪2000和月薪20000,从连续型特征来看高低薪的差异还要通过数值层面才能理解,但将其转换为离散型数据(底薪、高薪),则可以更加直观的表达出了我们心中所想的高薪和底薪。

3、可以有效的克服数据中隐藏的缺陷,使模型结果更加稳定
三、离散化的优势
离散特征的增加和减少都很容易,易于模型的快速迭代;
稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
离散化后的特征对异常数据有很强的鲁棒性(稳定性):比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
四、离散化的方法
1、无监督学习方法
等宽法
等宽法即是将属性值分为具有相同宽度的区间,区间的个数k根据实际情况来决定。比如属性值在[0,60]之间,最小值为0,最大值为60,我们要将其分为3等分,则区间被划分为[0,20] 、[21,40] 、[41,60],每个属性值对应属于它的那个区间

等频法
等宽法即是将属性值分为具有相同宽度的区间,区间的个数k根据实际情况来决定。比如有60个样本,我们要将其分为k=3部分,则每部分的长度为20个样本。

基于聚类的方法

基于聚类的方法分为两个步骤,即:

选定聚类算法将其进行聚类,将在同一个簇内的属性值做为统一标记。

注:基于聚类的方法,簇的个数要根据聚类算法的实际情况来决定,比如对于k-means算法,簇的个数可以自己决定,但对于DBSCAN,则是算法找寻簇的个数。

2、有监督学习方法:
1R方法
基于信息熵的方法
基于卡方的方法
五、离散化处理的一般过程
对连续特征值按照某种指定的规则进行排序
初步确定连续属性的划分断点
按照某种给定的判断标准继续分割断点或合并断点
如果第三步得到判断标准的终止条件,则终止整个连续特征离散化的过程,否则继续按第三步执行
六、离散化方法的评价
区间的个数:是对模型简洁性的要求
离散化所导致的不一致性:离散化后的不一致性不能比离散化之前高。
预测准确性:通常通过交叉检验模式建立分叉树来衡量。
具有最简单的离散化结果

七、 总结
李沐曾经说过:模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。
21、特征交叉
1.为什么需要特征组合、特征交叉?
特征交叉是数据特征的一种处理方式,通过特征组合的方式增加特征的维度,以求得更好的训练效果。
在实际场景中,我们常常遇到这要的情况,线性分类起无法在如下样本中(无法画一条直线将下列黄点和蓝点分开),所以特征组合是一种让线性模型学习到非线性特征的方式:

例如在广告模型中用到了大量的特征组合,因为LR是广告推广中最常用的模型,但LR本身不够复杂,为了使得LR学到更复杂的非线性特征,常常使用原始特征加上特征组合的方式。

2.如何做特征组合?
特征组合的思想很简单,通过将单独的特征进行组合(相乘或求笛卡尔积)而形成的合成特征。
比如属性A有三个特征,属性B有两个特征,笛卡尔积后就有六个组合特征,然后用one hot 或其他embedding方式给新的特征编码。

3.暴力做交叉可能产生稀疏问题。
这种暴力做交叉很可能导致特征稀疏的问题,这里可以参考FM、FMM以及阿里妈妈发布的MLR的做法和解决思路

22、样本类别不均衡
定义:所谓的不平衡指的是不同类别的样本量异非常大。样本类别分布不平衡主要出现在分类相关的建模问题上。样本类别分布不均衡从数据规模上可以分为大数据分布不均衡和小数据分布不均衡两种。
如何解决:
1 通过过抽样和欠抽样解决样本不均衡
抽样是解决样本分布不均衡相对简单且常用的方法,包括过抽样和欠抽样两种。
过抽样
过抽样(也叫上采样、over-sampling)方法通过增加分类中少数类样本的数量来实现样本均衡,最直接的方法是简单复制少数类样本形成多条记录,这种方法的缺点是如果样本特征少而可能导致过拟合的问题;经过改进的过抽样方法通过在少数类中加入随机噪声、干扰数据或通过一定规则产生新的合成样本,例如SMOTE算法。
欠抽样
欠抽样(也叫下采样、under-sampling)方法通过减少分类中多数类样本的样本数量来实现样本均衡,最直接的方法是随机地去掉一些多数类样本来减小多数类的规模,缺点是会丢失多数类样本中的一些重要信息。
总体上,过抽样和欠抽样更适合大数据分布不均衡的情况,尤其是第一种(过抽样)方法应用更加广泛。
2 通过正负样本的惩罚权重解决样本不均衡
通过正负样本的惩罚权重解决样本不均衡的问题的思想是在算法实现过程中,对于分类中不同样本数量的类别分别赋予不同的权重(一般思路分类中的小样本量类别权重高,大样本量类别权重低),然后进行计算和建模。
使用这种方法时需要对样本本身做额外处理,只需在算法模型的参数中进行相应设置即可。很多模型和算法中都有基于类别参数的调整设置,以scikit-learn中的SVM为例,通过在class_weight: {dict, ‘balanced’}中针对不同类别针对不同的权重,来手动指定不同类别的权重。如果使用其默认的方法balanced,那么SVM会将权重设置为与不同类别样本数量呈反比的权重来做自动均衡处理,计算公式为:n_samples / (n_classes * np.bincount(y))。
如果算法本身支持,这种思路是更加简单且高效的方法。
3 通过组合/集成方法解决样本不均衡
组合/集成方法指的是在每次生成训练集时使用所有分类中的小样本量,同时从分类中的大样本量中随机抽取数据来与小样本量合并构成训练集,这样反复多次会得到很多训练集和训练模型。最后在应用时,使用组合方法(例如投票、加权投票等)产生分类预测结果。
例如,在数据集中的正、负例的样本分别为100和10000条,比例为1:100。此时可以将负例样本(类别中的大量样本集)随机分为100份(当然也可以分更多),每份100条数据;然后每次形成训练集时使用所有的正样本(100条)和随机抽取的负样本(100条)形成新的数据集。如此反复可以得到100个训练集和对应的训练模型。
这种解决问题的思路类似于随机森林。在随机森林中,虽然每个小决策树的分类能力很弱,但是通过大量的“小树”组合形成的“森林”具有良好的模型预测能力。
如果计算资源充足,并且对于模型的时效性要求不高的话,这种方法比较合适。
4通过特征选择解决样本不均衡
上述几种方法都是基于数据行的操作,通过多种途径来使得不同类别的样本数据行记录均衡。除此以外,还可以考虑使用或辅助于基于列的特征选择方法。
一般情况下,样本不均衡也会导致特征分布不均衡,但如果小类别样本量具有一定的规模,那么意味着其特征值的分布较为均匀,可通过选择具有显著型的特征配合参与解决样本不均衡问题,也能在一定程度上提高模型效果。

23、如何进行特征选择
特征选择是一个重要的数据预处理过程,
主要有两个原因:
• 一是减少特征数量、降维,使模型泛化能力更强,减少过拟合;
• 二是增强对特征和特征值之间的理解
常见的特征选择方式:

  1. 去除方差较小的特征
  2. 正则化。L1正则化能够生成稀疏的模型。L2正则化的表现更加稳定,由于有用的特征往往对应系数非零。
  3. 随机森林,对于分类问题,通常采用基尼不纯度或者信息增益,对于回归问题,通常采用的是方差或者最小二乘拟合。一般不需要feature engineering、调参等繁琐的步骤。它的两个主要问题,1是重要的特征有可能得分很低(关联特征问题),2是这种方法对特征变量类别多的特征越有利(偏向问题)。
  4. 稳定性选择。是一种基于二次抽样和选择算法相结合较新的方法,选择算法可以是回归、SVM或其他类似的方法。它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断的重复,最终汇总特征选择结果,比如可以统计某个特征被认为是重要特征的频率(被选为重要特征的次数除以它所在的子集被测试的次数)。理想情况下,重要特征的得分会接近100%。稍微弱一点的特征得分会是非0的数,而最无用的特征得分将会接近于0。
    24、数据预处理
  5. 缺失值,填充缺失值fillna:
    i. 离散:None,
    ii. 连续:均值。
    iii. 缺失值太多,则直接去除该列
  6. 连续值:离散化。有的模型(如决策树)需要离散值
  7. 对定量特征二值化。核心在于设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0。如图像操作
  8. 皮尔逊相关系数,去除高度相关的列
    25、缺失值处理的策略
    一方面,缺失值较多.直接将该特征舍弃掉,否则可能反倒会带入较大的noise,对结果造成不良影响。
    另一方面缺失值较少,其余的特征缺失值都在10%以内,我们可以采取很多的方式来处理:
  9. 把NaN直接作为一个特征,假设用0表示;
  10. 用均值填充;
  11. 用随机森林等算法预测填充。
    26、衡量分类器的好坏
    这里首先要知道TP、FN(真的判成假的)、FP(假的判成真)、TN四种(可以画一个表格)。
    几种常用的指标:
    • 精度precision = TP/(TP+FP) = TP/~P (~p为预测为真的数量)
    • 召回率 recall = TP/(TP+FN) = TP/ P
    • F1值: 2/F1 = 1/recall + 1/precision
    • ROC曲线:ROC空间是一个以伪阳性率(FPR,false positive rate)为X轴,真阳性率(TPR, true
    positive rate)为Y轴的二维坐标系所代表的平面。其中真阳率TPR = TP / P = recall, 伪阳率FPR = FP/ N
    27、什么是共线性, 跟过拟合有什么关联?
    共线性:多变量线性回归中,变量之间由于存在高度相关关系而使回归估计不准确。
    共线性会造成冗余,导致过拟合。
    解决方法:排除变量的相关性/加入权重正则。
    28.连续特征,既可以离散化,也可以做幅度缩放,那这两种处理方式分别适用于什么场景呢?
    幅度缩放一般在计算型模型里会用到,比如LR DNN
    离散化一般是线性模型会用到,比如LR。
    如七月在线寒老师所说,离散化的目的有以下几个方面:
    ① 非线性!非线性!非线性!逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
    离散特征的增加和减少都很容易,易于模型的快速迭代;
    ② 速度快!速度快!速度快!稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
    ③ 鲁棒性!鲁棒性!鲁棒性!离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
    ④ 方便交叉与特征组合:离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
    ⑤ 稳定性:特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
    ⑥ 简化模型:特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
    29.交叉验证
    交叉验证其实就是为了检查模型的泛化行和稳定性,让模型的输出更加可靠。因为当我们只将训练数据划分一次时,有可能划分的不好,所以模型的结果会有偏差,不可靠。所以,我们可以使用交叉验证。
    基本思想:
    将原始数据(dataset)进行分组,一部分做为训练集来训练模型,另一部分做为测试集来评价模型。
    交叉验证是一种模型选择的方法!(引自李航统计学习方法)可以分为以下三种:
    • 简单交叉验证。即将数据按照一定比例 比如73开,分为训练集和测试集。
    • S折交叉验证。将已给数据切分为S个互不相交、大小相同的子集,将S-1个子集的数据作为训练集来训练模型,剩余的一个测试模型,重复S次,选择S次中平均测试误差最小的模型。
    • 留一交叉验证。即S=n。往往在数据缺乏的时候使用。因为数据很少没法再分了!

    评价指标

1.1 分类准确度够用么?
分类准确度在评价分类算法时,会有很大的问题的。分类算法的评价要比回归算法多很多。
对于一个癌症预测系统,输入检查指标,判断是否患有癌症,预测准确度99.9%。这个系统是好是坏呢?
如果癌症产生的概率是0.1%,那其实根本不需要任何机器学习算法,只要系统预测所有人都是健康的,即可达到99.9%的准确率。也就是说对于极度偏斜(Skewed Data)的数据,只使用分类准确度是不能衡量。
这时就需要使用混淆矩阵(Confusion Matrix)做进一步分析。
1.2 混淆矩阵
对于二分类问题来说,所有的问题被分为0和1两类,混淆矩阵是2*2的矩阵:

• TN:真实值是0,预测值也是0,即我们预测是negative,预测正确了。
• FP:真实值是0,预测值是1,即我们预测是positive,但是预测错误了。
• FN:真实值是1,预测值是0,即我们预测是negative,但预测错误了。
• TP:真实值是1,预测值是1,即我们预测是positive,预测正确了。
现在假设有1万人进行预测,填入混淆矩阵如下:
对于1万个人中,有9978个人本身并没有癌症,我们的算法也判断他没有癌症;有12个人本身没有癌症,但是我们的算法却错误地预测他有癌症;有2个人确实有癌症,但我们算法预测他没有癌症;有8个人确实有癌症,而且我们也预测对了。
因为混淆矩阵表达的信息比简单的分类准确度更全面,因此可以通过混淆矩阵得到一些有效的指标。
2.1精准率和召回率
根据混淆矩阵可以求得指标:
精准率:
即精准率为8/(8+12)=40%。所谓的精准率是:分母为所有预测为1的个数,分子是其中预测对了的个数,即预测值为1,且预测对了的比例。
为什么管它叫精准率呢?在有偏的数据中,我们通常更关注值为1的特征,比如“患病”,比如“有风险”。在100次结果为患病的预测,平均有40次预测是对的。即精准率为我们关注的那个事件,预测的有多准。
召回率:

即召回率为8/(8+2)=80%。所谓召回率是:所有真实值为1的数据中,预测对了的个数。每当有100个癌症患者,算法可以成功的预测出8个 。也就是我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。
那么为什么需要精准率和召回率呢?还是下面的这个例子,有10000个人,混淆矩阵如下:
如果我们粗暴的认为所有人都是健康的,那算法的准确率是99.78%,但这是毫无意义的。如果算精准率则是40%,召回率是80%。
2.2更关注哪个?
精准率(查准率):预测值为1,且预测对了的比例,即:我们关注的那个事件,预测的有多准。
召回率(查全率):所有真实值为1的数据中,预测对了的个数,即:我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。
有的时候,对于一个算法而言,精准率高一些,召回率低一些;或者召回率高一些,精准率低一些。那么如何取舍呢?
其实在衡量机器学习的其他指标中,我们也需要进行取舍,通常只需要把握一个原则:
视场景而定。
比如我们做了一个股票预测系统,未来股票是

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/133433
推荐阅读