2023双非计算机硕士应战秋招算法岗之机器学习基础知识

目录
特征工程 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的数据中,预测对了的个数,即:我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。
有的时候,对于一个算法而言,精准率高一些,召回率低一些;或者召回率高一些,精准率低一些。那么如何取舍呢?
其实在衡量机器学习的其他指标中,我们也需要进行取舍,通常只需要把握一个原则:
视场景而定。
比如我们做了一个股票预测系统,未来股票是📈还是📉这样一个二分类问题。很显然“涨”才是我们关注的焦点,那么我们肯定希望:系统预测上涨的股票中,真正上涨的比例越大越好,这就是希望查准率高。那么我们是否关注查全率呢?在大盘中有太多的真实上涨股票,虽然我们漏掉了一些上升周期,但是我们没有买进,也就没有损失。但是如果查准率不高,预测上涨的结果下跌了,那就是实实在在的亏钱了。所以在这个场景中,查准率更重要。
当然也有追求召回率的场景,在医疗领域做疾病诊断,如果召回率低,意味着本来有一个病人得病了,但是没有正确预测出来,病情就恶化了。我们希望尽可能地将所有有病的患者都预测出来,而不是在看在预测有病的样例中有多准。
但是,在实际业务场景中,也有很多没有这么明显的选择。那么在同时需要关注精准率和召回率,如何在两个指标中取得平衡呢?在这种情况下,我们使用一种新的指标:F1 Score。
2.3二者兼顾 F1 Score
如果要我们综合精准率和召回率这两个指标,我们可能会想到取平均值这样的方法。F1 Score的思想也差不多:
F1 Score 是精准率和召回率的调和平均值。

什么是调和平均值?为什么要取调和平均值?调和平均值的特点是如果二者极度不平衡,如某一个值特别高、另一个值特别低时,得到的F1 Score值也特别低;只有二者都非常高,F1才会高。这样才符合我们对精准率和召回率的衡量标准。

3.1ROC曲线
在了解ROC曲线之前,先看三个概念:分类阈值、TPR和FPR
3.1.1 分类阈值
分类阈值,即设置判断样本为正例的阈值thr,
如果某个逻辑回归模型对某封电子邮件进行预测时返回的概率为 0.9995,则表示该模型预测这封邮件非常可能是垃圾邮件。相反,在同一个逻辑回归模型中预测分数为 0.0003 的另一封电子邮件很可能不是垃圾邮件。可如果某封电子邮件的预测分数为 0.6 呢?为了将逻辑回归值映射到二元类别,您必须指定分类阈值(也称为判定阈值)。如果值高于该阈值,则表示“垃圾邮件”;如果值低于该阈值,则表示“非垃圾邮件”。人们往往会认为分类阈值应始终为 0.5,但阈值取决于具体问题,因此您必须对其进行调整。
我们知道,精准率和召回率这两个指标有内在的联系,并且相互冲突。precision随着threshold的增加而降低,recall随着threshold的增大而减小。如果某些场景需要precision,recall都保持在80%,可以通过这种方式求出threshold
3.1.2TPR
TPR:预测为1,且预测对了的数量,占真实值为1的数据百分比。很好理解,就是召回率。

3.1.3 FPR
FPR:预测为1,但预测错了的数量,占真实值不为1的数据百分比。与TPR相对应,FPR除以真实值为0的这一行所有的数字和 。
TPR和FPR之间是成正比的,TPR高,FPR也高。ROC曲线就是刻画这两个指标之间的关系。
3.2 什么是ROC曲线
ROC曲线(Receiver Operation Characteristic Cureve),描述TPR和FPR之间的关系。x轴是FPR,y轴是TPR。
我们已经知道,TPR就是所有正例中,有多少被正确地判定为正;FPR是所有负例中,有多少被错误地判定为正。 分类阈值取不同值,TPR和FPR的计算结果也不同,最理想情况下,我们希望所有正例 & 负例 都被成功预测 TPR=1,FPR=0,即 所有的正例预测值 > 所有的负例预测值,此时阈值取最小正例预测值与最大负例预测值之间的值即可。
TPR越大越好,FPR越小越好,但这两个指标通常是矛盾的。为了增大TPR,可以预测更多的样本为正例,与此同时也增加了更多负例被误判为正例的情况。

3.3分析
ROC曲线距离左上角越近,证明分类器效果越好。如果一条算法1的ROC曲线完全包含算法2,则可以断定性能算法1>算法2。这很好理解,此时任做一条 横线(纵线),任意相同TPR(FPR) 时,算法1的FPR更低(TPR更高),故显然更优。
我们可以看出,左上角的点(TPR=1,FPR=0),为完美分类,也就是这个医生医术高明,诊断全对。TPR>FPR,说明医生的判断大体是正确的。中线上的点TPR=FPR,也就是医生全都是蒙的,蒙对一半,蒙错一半;下半平面的点TPR<FPR,这个医生说你有病,那么你很可能没有病,医生的话我们要反着听,为真庸医。
很多时候两个分类器的ROC曲线交叉,无法判断哪个分类器性能更好,这时可以计算曲线下的面积AUC,作为性能度量。
4.AUC
一般在ROC曲线中,我们关注是曲线下面的面积, 称为AUC(Area Under Curve)。这个AUC是横轴范围(0,1 ),纵轴是(0,1)所以总面积是小于1的。
ROC和AUC的主要应用:比较两个模型哪个好?主要通过AUC能够直观看出来。
ROC曲线下方由梯形组成,矩形可以看成特征的梯形。因此,AUC的面积可以这样算:(上底+下底)* 高 / 2,曲线下面的面积可以由多个梯形面积叠加得到。AUC越大,分类器分类效果越好。
• AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
• 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
• AUC = 0.5,跟随机猜测一样,模型没有预测价值。
• AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

逻辑回归
1.逻辑回归概述
逻辑回归是一个线性的二分类模型,主要是计算在某个样本特征下事件发生的概率,比如根据用户的浏览购买情况作为特征来计算他是否会购买这个商品,LR的最终值是根据一个线性和函数再通过一个sigmoid函数来求得的,该线性和函数是权重与特征值的累加以及加上偏置求出来的,所以训练LR也就是训练线性和函数的各个权重w。
权重w一般使用最大似然法来估计,估计出似然函数的负号极小值就会得到最优w解,通常采用随机梯度下降和拟牛顿法来进行优化。
**一句话总结:**逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。
2.逻辑回归的目的
将数据进行二分类
3.逻辑回归是如何做分类的
逻辑回归作为一个回归函数,如何用于分类问题。 逻辑回归中,对于每个 x,其条件概率 y 的确是一个连续的变量。而逻辑回归中可以设定一个阈值,y 值大于这个阈值的是一类,y 值小于这个阈值的是另外一类。至于阈值的选择,通常是根据实际情况来确定,一般情况下选取 0.5 作为阈值来划分。
4.逻辑回归损失函数
逻辑回归的损失函数是其极大似然函数。
5.逻辑回归的参数求解方法
极大似然函数无法直接求解,一般是通过对该函数进行梯度下降来不断逼近其最优解。这里需要注意的点是要对梯度下降有一定的了解,就梯度下降本身来看的话就有随机梯度下降,批梯度下降,small batch 梯度下降三种方式,面试官可能会问这三种方式的优劣以及如何选择最合适的梯度下降方式。
• 批梯度下降会获得全局最优解,缺点是在更新每个参数的时候需要遍历所有的数据,计算量会很大,并且会有很多的冗余计算,导致的结果是当数据量大的时候,每个参数的更新都会很慢。
• 随机梯度下降是以高方差频繁更新,优点是使得 sgd 会跳到新的和潜在更好的局部最优解,缺点是使得收敛到局部最优解的过程更加的复杂。
• 小批量梯度下降结合了批梯度下降和随机梯度下降的优点,每次更新的时候使用 n个样本。减少了参数更新的次数,可以达到更加稳定收敛结果,一般在深度学习当中我们采用这种方。
6.逻辑回归中为什么使用对数损失而不用平方损失
对于逻辑回归,这里所说的对数损失和极大似然是相同的。 不使用平方损失的原因是,在使用 Sigmoid 函数作为正样本的概率时,同时将平方损失作为损失函数,这时所构造出来的损失函数是非凸的,不容易求解,容易得到其局部最优解。 而如果使用极大似然,其目标函数就是对数似然函数,该损失函数是关于未知参数的高阶连续可导的凸函数,便于求其全局最优解。
7.逻辑回归的如何分类
这个在上面的时候提到了,要设定一个阈值,判断正类概率是否大于该阈值,一般阈值是0.5,所以只用判断正类概率是否大于0.5即可。
8.逻辑回归在训练的过程当中,如果有很多的特征高度相关或者说有一个特征重复了100遍,会造成怎样的影响:
• 先说结论,如果在损失函数最终收敛的情况下,其实就算有很多特征高度相关也不会影响分类器的效果。
• 但是对特征本身来说的话,假设只有一个特征,在不考虑采样的情况下,你现在将它重复100遍。训练以后完以后,数据还是这么多,但是这个特征本身重复了100遍,实质上将原来的特征分成了100份,每一个特征都是原来特征权重值的百分之一。
• 如果在随机采样的情况下,其实训练收敛完以后,还是可以认为这100个特征和原来那一个特征扮演的效果一样,只是可能中间很多特征的值正负相消了。
9.为什么我们还是会在训练的过程当中将高度相关的特征去掉
• 去掉高度相关的特征会让模型的可解释性更好可以大大提高训练的速度。如果模型当中有很多特征高度相关的话,就算损失函数本身收敛了,但实际上参数是没有收敛的,这样会拉低训练的速度。
• 其次是特征多了,本身就会增大训练的时间。
10. 逻辑回归的优缺点总结
优点
• 形式简单,模型的可解释性非常好。从特征的权重可以看到不同的特征对最后结果的影响,某个特征的权重值比较高,那么这个特征最后对结果的影响会比较大。
• 模型效果不错。在工程上是可以接受的(作为baseline),如果特征工程做的好,效果不会太差,并且特征工程可以大家并行开发,大大加快开发的速度。
• 训练速度较快。分类的时候,计算量仅仅只和特征的数目相关。并且逻辑回归的分布式优化sgd发展比较成熟,训练的速度可以通过堆机器进一步提高,这样我们可以在短时间内迭代好几个版本的模型。
• 资源占用小,尤其是内存。因为只需要存储各个维度的特征值。
• 方便输出结果调整。逻辑回归可以很方便的得到最后的分类结果,因为输出的是每个样本的概率分数,我们可以很容易的对这些概率分数进行cut off,也就是划分阈值(大于某个阈值的是一类,小于某个阈值的是一类)。
缺点:
• 准确率并不是很高。因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布。
• 很难处理数据不平衡的问题。举个例子:如果我们对于一个正负样本非常不平衡的问题比如正负样本比10000:1.我们把所有样本都预测为正也能使损失函数的值比较小。但是作为一个分类器,它对正负样本的区分能力不会很好。
• 处理非线性数据较麻烦。逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据,或者进一步说,处理二分类的问题 。
• 逻辑回归本身无法筛选特征。有时候,我们会用gbdt来筛选特征,然后再上逻辑回归。
11. 逻辑回归怎么实现多分类

方式一:修改逻辑回归的损失函数,使用softmax函数构造模型解决多分类问题,softmax分类模型会有相同于类别数的输出,输出的值为对于样本属于各个类别的概率,最后对于样本进行预测的类型为概率值最高的那个类别。

方式二:根据每个类别都建立一个二分类器,本类别的样本标签定义为1,其它分类样本标签定义为0,则有多少个类别就构造多少个逻辑回归分类器,若所有类别之间有明显的互斥则使用softmax分类器,若所有类别不互斥有交叉的情况则构造相应类别个数的逻辑回归分类器。

决策树
1.什么是决策树
首先从训练样本矩阵中选择第一个特征进行子表划分,使每个子表中该特征的值全部相同,然后再在每个子表中选择下一个特征按照同样的规则继续划分更小的子表,不断重复直到所有的特征全部使用完为止,此时便得到叶级子表,其中所有样本的特征值全部相同。对于待预测样本,根据其每一个特征的值,选择对应的子表,逐一匹配,直到找到与之完全匹配的叶级子表,用该子表中样本的输出,通过平均(回归)或者投票(分类)为待预测样本提供输出。
• 一棵树
• if-then规则的集合,该集合是决策树上的所有从根节点到叶节点的路径的集合
• 定义在特征空间与类空间上的条件概率分布,决策树实际上是将特征空间划分成了互不相交的单元,每个从根到叶的路径对应着一个单元。决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成。实际中,哪个类别有较高的条件概率,就把该单元中的实例强行划分为该类别。
2.决策树和条件概率分布的关系?
决策树可以表示成给定条件下类的条件概率分布。
决策树中的每一条路径都对应是划分的一个条件概率分布. 每一个叶子节点都是通过多个条件之后的划分空间,在叶子节点中计算每个类的条件概率,必然会倾向于某一个类,即这个类的概率最大。
3.信息增益比相对信息增益有什么好处?
• 使用信息增益时:模型偏向于选择取值较多的特征
• 使用信息增益比时:对取值多的特征加上的惩罚,对这个问题进行了校正。

  1. ID3算法—>C4.5算法—> CART算法

5.决策树的缺失值是怎么处理的
原始数据为:

(比如“色泽”这个属性有的样本在该属性上的值是缺失的,那么该如何计算“色泽”的信息增益?)
• 每个样本设置一个权重(初始可以都为1)
• 划分数据,一部分是有特征值A的数据D1,另一部分是没有特征值A的数据D2.
• 对没有缺失特征值A的数据集D1来和对应的A特征的各个特征值一起计算加权重后的信息增益比,最后乘上一个系数,这个系数是无特征值A缺失的样本加权后所占加权总样本的比例。
Gain(all_data) = p * (Gain(not_missing_data))
Gain(not_missing_data) = H1 - H2

H1 = -( (6 / 14) * np.log2(6 / 14) + (8 / 14) * np.log2(8 / 14) ) = 0.985228

H2 = - ( (6 / 14) * ( (4 / 6) * np.log2(4 / 6) + (2 / 6) * np.log2(2 / 6) ) ) -
( (4 / 14) * ( (2 / 4) * np.log2(2 / 4) + (2 / 4) * np.log2(2 / 4) ) ) - 0 = 0.6792696
Gain(not_missing_data) = H1 - H2 = 0.985228 - 0.6792696 = 0.305958
p为非缺失值样本个数占所有样本的个数,即14 / 17
Gain(all_data) = p * (Gain(not_missing_data)) = (14 / 17) * (0.305958) = 0.251966。
6.既然信息增益可以计算,为什么C4.5还使用信息增益比?
在使用信息增益的时候,如果某个特征有很多取值,使用这个取值多的特征会的大的信息增益,这个问题是出现很多分支,将数据划分更细,模型复杂度高,出现过拟合的机率更大。使用信息增益比就是为了解决偏向于选择取值较多的特征的问题. 使用信息增益比对取值多的特征加上的惩罚,对这个问题进行了校正。
7.基尼指数可以表示数据不确定性,信息熵也可以表示数据的不确定性。为什么CART使用基尼指数?
信息熵0, logK都是值越大,数据的不确定性越大. 信息熵需要计算对数,计算量大;信息熵是可以处理多个类别,基尼指数就是针对两个类计算的,由于CART树是一个二叉树,每次都是选择yes or no进行划分,从这个角度也是应该选择简单的基尼指数进行计算。
8.基尼系数存在的问题?
基尼指数偏向于多值属性;当类数较大时,基尼指数求解比较困难;基尼指数倾向于支持在两个分区中生成大小相同的测试。
9.如何学习一棵决策树?
决策树的学习本质上就是从训练数据集中归纳出一组分类规则,使它与训练数据矛盾较小的同时具有较强的泛华能力。从另一个角度看,学习也是基于训练数据集估计条件概率模型(至此,回答完了模型部分,下面接着说策略和算法)。
决策树的损失函数通常是正则化的极大似然函数,学习的策略是以损失函数为目标函数的最小化(说完了策略,该说算法了)。
由于这个最小化问题是一个NP完全问题,现实中,我们通常采用启发式算法(这里,面试官可能会问什么是启发式算法,要有准备,SMO算法就是启发式算法)来近似求解这一最优化问题,得到的决策树是次最优的。
该启发式算法可分为三步:
• 特征选择
• 模型生成
• 决策树的剪枝
本答案出自,更多具体请参考如下https://www.jianshu.com/p/fb97b21aeb1d
10.决策树怎么防止过拟合?
预剪枝(提前停止):控制深度、当前的节点数、分裂对测试集的准确度提升大小
• 限制树的高度,可以利用交叉验证选择
• 利用分类指标,如果下一次切分没有降低误差,则停止切分
• 限制树的节点个数,比如某个节点小于100个样本,停止对该节点切分
后剪枝(自底而上):生成决策树、交叉验证剪枝:子树删除,节点代替子树、测试集准确率判断决定剪枝
• 在决策树构建完成之后,根据加上正则项的结构风险最小化自下向上进行的剪枝操作.
剪枝的目的就是防止过拟合,使模型在测试数据上变现良好,更加鲁棒。
11. 如果特征很多,决策树中最后没有用到的特征一定是无用吗?
不是无用的,从两个角度考虑:
• 特征替代性,如果可以已经使用的特征A和特征B可以提点特征C,特征C可能就没有被使用,但是如果把特征C单独拿出来进行训练,依然有效
• 决策树的每一条路径就是计算条件概率的条件,前面的条件如果包含了后面的条件,只是这个条件在这棵树中是无用的,如果把这个条件拿出来也是可以帮助分析数据.
12.决策树的优缺点
优点:

  1. 简单直观,生成的决策树很直观。
  2. 基本不需要预处理,不需要提前归一化,处理缺失值。
  3. 使用决策树预测的代价是O(log2m)O(log2m)。m为样本数。
  4. 既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或者连续值。
  5. 可以处理多维度输出的分类问题。
  6. 相比于神经网络之类的黑盒分类模型,决策树在逻辑上可以得到很好的解释
  7. 可以交叉验证的剪枝来选择模型,从而提高泛化能力。
  8. 对于异常点的容错能力好,健壮性高。
    模型具有可解释性,容易向业务部门人员描述。
    分类速度快
    缺点:
  9. 决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进。
  10. 决策树会因为样本发生一点点的改动,就会导致树结构的剧烈改变。这个可以通过集成学习之类的方法解决。
  11. 寻找最优的决策树是一个NP难的问题,我们一般是通过启发式方法,容易陷入局部最优。可以通过集成学习之类的方法来改善。
  12. 有些比较复杂的关系,决策树很难学习,比如异或。这个就没有办法了,一般这种关系可以换神经网络分类方法来解决。
  13. 如果某些特征的样本比例过大,生成决策树容易偏向于这些特征。这个可以通过调节样本权重来改善。
    13.树形结构为什么不需要归一化?
    • 数值缩放不影响分裂点位置,对树模型的结构不造成影响。
    • 按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。
    • 树模型是不能进行梯度下降的,因为构建树模型(回归树)寻找最优点时是通过寻找最优分裂点完成的,因此树模型是阶跃的,阶跃点是不可导的,并且求导没意义,也就不需要归一化。
    14.其他面试案例
    引自知乎——数据取经团:吕洞宾
    15.决策树怎么剪枝?
    一般算法在构造决策树的都是尽可能的细分,直到数据不可划分才会到达叶子节点,停止划分. 因为给训练数据巨大的信任,这种形式形式很容易造成过拟合,为了防止过拟合需要进行决策树剪枝. 一般分为预剪枝和后剪枝,预剪枝是在决策树的构建过程中加入限制,比如控制叶子节点最少的样本个数,提前停止. 后剪枝是在决策树构建完成之后,根据加上正则项的结构风险最小化自下向上进行的剪枝操作. 剪枝的目的就是防止过拟合,是模型在测试数据上变现良好,更加鲁棒。

随机森林
自助聚合
每次从总样本矩阵中以有放回抽样的方式随机抽取部分样本构建决策树,这样形成多棵包含不同训练样本的决策树,以削弱某些强势样本对模型预测结果的影响,提高模型的泛化特性。
随机森林
在自助聚合的基础上,每次构建决策树模型时,不仅随机选择部分样本,而且还随机选择部分特征,这样的集合算法,不仅规避了强势样本对预测结果的影响,而且也削弱了强势特征的影响,使模型的预测能力更加泛化。
随机森林相关API:
import sklearn.ensemble as se

随机森林回归模型 (属于集合算法的一种)

max_depth:决策树最大深度10

n_estimators:构建1000棵决策树,训练模型

min_samples_split: 子表中最小样本数 若小于这个数字,则不再继续向下拆分

model = se.RandomForestRegressor(max_depth=10, n_estimators=1000, min_samples_split=2)
1.1 随机森林算法思想
随机森林(Random Forest)使用多个CART决策树作为弱学习器,不同决策树之间没有关联。当我们进行分类任务时,新的输入样本进入,就让森林中的每一棵决策树分别进行判断和分类,每个决策树会得到一个自己的分类结果,决策树的分类结果中哪一个分类最多,那么随机森林就会把这个结果当做最终的结果。
随机森林在生成决策树的时候用随机选择的特征,即使用Bagging方法。这么做的原因是:如果训练集中的某几个特征对输出的结果有很强的预测性,那么这些特征会被每个决策树所应用,这样会导致树之间具有相关性,这样并不会减小模型的方差。
1.2 随机森林建立过程
下面我们来描述一下随机森林的建立过程

  1. 第一步:原始训练集
    中有N个样本,且每个样本有W维特征。从数据集D中有放回的随机抽取x个样本(Bootstraping方法)组成训练子集,一共进行w次采样,即生成w个训练子集。
  2. 第二步:每个训练子集
    形成一棵决策树,形成了一共w棵决策树。而每一次未被抽到的样本则组成了w个oob(用来做预估)。
  3. 第三步:对于单个决策树,树的每个节点处从M个特征中随机挑选m(m<M)个特征,按照结点不纯度最小原则进行分裂。每棵树都一直这样分裂下去,直到该节点的所有训练样例都属于同一类。在决策树的分裂过程中不需要剪枝。
  4. 第四步:根据生成的多个决策树分类器对需要进行预测的数据进行预测。根据每棵决策树的投票结果,如果是分类树的话,最后取票数最高的一个类别;如果是回归树的话,利用简单的平均得到最终结果。
    1.3 随机森林算法优缺点总结
    随机森林是Bagging的一个扩展变体,是在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。
    随机森林简单、容易实现、计算开销小,在很多实际应用中都变现出了强大的性能,被誉为“代表集成学习技术水平的方法”。可以看出,随机森林对Bagging只做了小改动。并且,Bagging满足差异性的方法是对训练集进行采样;而随机森林不但对训练集进行随机采样,而且还随机选择特征子集,这就使最终集成的泛化性进一步提升。
    随着基学习器数目的增加,随机森林通常会收敛到更低的泛化误差,并且训练效率是优于Bagging的。
    总结一下随机森林的优缺点:
    优点:
    • 训练可以高度并行化,对于大数据时代的大样本训练速度有优势。个人觉得这是的最主要的优点。
    • 由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。
    • 在训练后,可以给出各个特征对于输出的重要性。
    • 由于采用了随机采样,训练出的模型的方差小,泛化能力强。
    • 相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。
    • 对部分特征缺失不敏感。
    缺点有:
    • 在某些噪音比较大的样本集上,RF模型容易陷入过拟合。
    • 取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。
    1.4其他面试题
    1、为什么要有放回的抽样?
    保证样本集间有重叠,若不放回,每个训练样本集及其分布都不一样,可能导致训练的各决策树差异性很大,最终多数表决无法 “求同”,即最终多数表决相当于“求同”过程。
    2、为什么RF的训练效率优于bagging?
    因为在个体决策树的构建过程中,Bagging使用的是“确定型”决策树,bagging在选择划分属性时要对每棵树是对所有特征进行考察;而随机森林仅仅考虑一个特征子集。
    3、随机森林需要剪枝吗?
    不需要,后剪枝是为了避免过拟合,随机森林随机选择变量与树的数量,已经避免了过拟合,没必要去剪枝了。一般rf要控制的是树的规模,而不是树的置信度,剩下的每棵树需要做的就是尽可能的在自己所对应的数据(特征)集情况下尽可能的做到最好的预测结果。剪枝的作用其实被集成方法消解了,所以用处不大
    4.随机森林如何处理缺失值
    根据随机森林创建和训练的特点,随机森林对缺失值的处理还是比较特殊的。
    • 首先,给缺失值预设一些估计值,比如数值型特征,选择其余数据的中位数或众数作为当前的估计值。
    • 然后,根据估计的数值,建立随机森林,把所有的数据放进随机森林里面跑一遍。记录每一组数据在决策树中一步一步分类的路径。
    • 判断哪组数据和缺失数据路径最相似,引入一个相似度矩阵,来记录数据之间的相似度,比如有N组数据,相似度矩阵大小就是N*N。
    • 如果缺失值是类别变量,通过权重投票得到新估计值,如果是数值型变量,通过加权平均得到新的估计值,如此迭代,直到得到稳定的估计值。
    其实,该缺失值填补过程类似于推荐系统中采用协同过滤进行评分预测,先计算缺失特征与其他特征的相似度,再加权得到缺失值的估计,而随机森林中计算相似度的方法(数据在决策树中一步一步分 类的路径)乃其独特之处。
    原文链接:https://blog.csdn.net/weixin_41510260/article/details/94987861

5.随机森林的过拟合问题
交叉验证

SVM
1.你能给我讲讲什么是SVM吗?
回答:SVM是一种二分类模型,它的基本模型是在特征空间中寻找间隔最大化的分割超平面的线性分类器。如在下面的两个类别中(暂且称两个类为黄球和红球),

我们要将其分割开的方式有多种,但是究竟哪一种才是最优的分割方式呢?这就是支持向量机所要解决的问题。简单而又通俗点的理解:支持向量机的优化目标是找到一条线(w和b), 使得离该线最近的点之间的距离最长。但是在这个过程中,不同的数据所采用的分割策略可能会有所不同,主要的分割策略有三种:

  1. 当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机;
  2. 当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,即线性支持向量机;
  3. 当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。
    2.你知道什么是支持向量吗?alpha什么时候为0什么时候不为0?
    回答:支持向量的本质其实也是向量。支持向量机是想找到一个分割超平面或者说分类面,使得它所产生的结果是最鲁棒的,即对未知实例的泛化能力是最强的(这也是支持向量机为什么采用间隔最大化的原因之一)。而支持向量就是这些支撑分割超平面的数据点,其实就是距离分界线最近的点,或者说分界面就是靠这些数据点来确定的,它们支撑着分界面。 对于边界上的样本来说,alpha不等于0,这些边界上的样本点属于支持向量,它们会对最终的结果产生影响。而对于非边界上的样本点来说,alpha等于0, 非边界上的这些样本点是非支持向量,非支持向量不会对最终的结果产生影响。
    举个栗子,如在下方的图形中,A、B、C三点就属于支持向量,它们的alpha不为0,且支撑着分割超平面。而其它的样本点的alpha等于0,它们对分割超平面不会造成影响。
    3.请问可以怎么提高SVM的泛化能力?
    回答:我们知道SVM的约束条件常常会有过拟合(过拟合表现为在训练集上模型的预测结果很准,但是在未知数据上预测效果却很差)的风险,而决定分割超平面的是支持向量,如果这些支持向量中存在异常值点,那么我们还傻兮兮地严格按照SVM的定义去训练模型,那训练出来的模型效果肯定就不会太好。为了解决这个问题,我们可以使用软间隔来处理,所谓软间隔就是为SVM引入了一个松弛变量,使得SVM能够容忍异常值点的存在。因为引入了松弛变量之后,所有点到分割超平面的距离可以不需要严格地大于等于1了,而只需要>= 1-松弛变量值就可以了。
    举个例子,如果松弛变量 = 0.1, 那么数据点到分割超平面的距离只需要>= 0.9就可以。通过这个方法就可以将异常值转为非支持向量,将异常值作为一个普通的数据点存在,那么我们的支持向量和分割超平面就都不会收到它的影响了。(下图是使用了软间隔对数据进行分类的可视化结果)
    4.SVM为什么要引入核函数?
    回答:在现实世界中,不是所有的样本都是线性可分的,有时候我们也会遇到线性不可分的样本。如以下情形:
    在这种情况下,想要在二维空间中使用线性分割的方法将红球与黄球完全分割开似乎是不可能的。
    对于这样的问题,我们可以将样本从原始空间映射到一个更高维的特征空间中,使得样本在这个特征空间中线性可分。我们知道如果原始空间是有限维,即属性数有限,那么就一定存在一个高维特征空间能够将样本分开。通过将输入空间映射到了高维的特征空间,可以把平面上不好区分的非线性数据很好地区分开。但是对于映射后的对偶问题,如果我们直接去计算的话会较为难算,为了解决这个问题,才引入了核函数(目的:为了解决映射后难以计算的问题,方法:设想在原始样本空间中能找到一个函数满足映射后需要计算的两个样本间的特征空间内积)即:
    而目前我们所常用的核函数主要有线性核函数、多项式核函数、高斯核函数、拉普拉斯核函数、Sigmoid核函数。
    当然,引入核函数之后,核函数的选择就变成了支持向量机中的最大变数了,若核函数的选择不正确的话,那么就可能将样本映射到了一个不合适的特征空间,导致的后果就很有可能是模型的性能不好。
    (对于核函数这一部分,建议大家可以准备一下各种核函数的使用场景以及核函数的选择这一块的内容)
    5.SVM中为什么会有SMO算法?
    回答:SVM的基本型就是一个凸二次规划的问题,使用拉格朗日乘子法转换后所获得的关于alpha的函数的求解也是一个二次规划的问题,虽然可以直接使用二次规划问题的算法来进行求解;但是,该问题(二次规划问题)的规模正比于训练样本数,这会在实际任务中造成很大的开销,为求出alpha同时为避免通用的二次规划算法所造成的巨大开销,才引入了SMO算法。
    (关于SMO,我觉得大家可以准备一下SMO的算法思想、SMO算法优化的终止条件等方面的知识)
    SMO算法实现SVM
    转自数据挖掘知识点串烧:SVM
    5.SVM有什么样的优点跟缺点呢?
    优点:
    • 可以使用核函数将原始数据映射到高维的特征空间上,进而解决非线性的分类问题;
    • SVM的分类思想很简单,就是将样本与分类面的间隔最大化
    • SVM的分类效果较好;
    缺点:
    • SVM无法直接支持多分类任务,但是可以通过间接的方法来实现多分类(这点跟逻辑回归的分类思想很像,间接的多分类方法有一对一、一对其余、多对多这三种拆分策略);
    • 对某些缺失数据敏感,对核函数的选择也很敏感
    6.为什么SVM对缺失数据敏感?
    这里说的缺失数据是指缺失某些特征数据,向量数据不完整。SVM没有处理缺失值的策略(决策树有)。而SVM希望样本在特征空间中线性可分,所以特征空间的好坏对SVM的性能很重要。缺失特征数据将影响训练结果的好坏。
    7.LR和SVM的联系与区别
    相同点
    • ①都是线性分类器。本质上都是求一个最佳分类超平面。
    • ②都是监督学习算法。
    • ③都是判别模型。判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后用差别来简单对给定的一个信号进行分类。常见的判别模型有:KNN、SVM、LR,常见的生成模型有:朴素贝叶斯,隐马尔可夫模型。
    区别:
    • LR是参数模型,svm是非参数模型,linear和rbf则是针对数据线性可分和不可分的区别;
    • 从目标函数来看,区别在于逻辑回归采用的是logistical loss,SVM采用的是hinge loss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。
    • SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。
    • 逻辑回归相对来说模型更简单,好理解,特别是大规模线性分类时比较方便。而SVM的理解和优化相对来说复杂一些,SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。
    • logic 能做的 svm能做,但可能在准确率上有问题,svm能做的logic有的做不了。
    8.带核的SVM为什么能分类非线性问题?
    核函数的本质是两个函数的內积,通过核函数将其隐射到高维空间,在高维空间非线性问题转化为线性问题, SVM得到超平面是高维空间的线性分类平面
    9.SVM、LR、决策树的对比
    模型复杂度:SVM支持核函数,可处理线性非线性问题;LR模型简单,训练速度快,适合处理线性问题;决策树容易过拟合,需要进行剪枝
    损失函数:SVM hinge loss; LR L2正则化; adaboost 指数损失
    数据敏感度:SVM添加容忍度对outlier不敏感,只关心支持向量,且需要先做归一化; LR对远点敏感
    数据量:数据量大就用LR,数据量小且特征少就用SVM非线性核
    10.为什么要将求解SVM的原始问题转换为其对偶问题?
  4. 对偶问题往往更易求解(当我们寻找约束存在时的最优点的时候,约束的存在虽然减小了需要搜寻的范围,但是却使问题变得更加复杂。为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,即拉格朗日函数,再通过这个函数来寻找最优点。
  5. 自然引入核函数,进而推广到非线性分类问题。
  6. (a) 目前处理的模型严重依赖于数据集的维度d,如果维度d太高就会严重提升运算时间;(b) 对偶问题事实上把SVM从依赖d个维度转变到依赖N个数据点,考虑到在最后计算时只有支持向量才有意义,所以这个计算量实际上比N小很多。
  7. SVM如何处理多分类问题?
    一般有两种做法:一种是直接法,直接在目标函数上修改,将多个分类面的参数求解合并到一个最优化问题里面。看似简单但是计算量却非常的大。
    另外一种做法是间接法:对训练器进行组合。其中比较典型的有一对一,和一对多。
    一对多,就是对每个类都训练出一个分类器,由svm是二分类,所以将此而分类器的两类设定为目标类为一类,其余类为另外一类。这样针对k个类可以训练出k个分类器,当有一个新的样本来的时候,用这k个分类器来测试,那个分类器的概率高,那么这个样本就属于哪一类。这种方法效果不太好,bias比较高。
    一对一法(one-vs-one),针对任意两个类训练出一个分类器,如果有k类,一共训练出C(2,k) 个分类器,这样当有一个新的样本要来的时候,用这C(2,k) 个分类器来测试,每当被判定属于某一类的时候,该类就加一,最后票数最多的类别被认定为该样本的类。
    12.如何对SVM进行调参
    核函数的参数:
    1)对于线性核函数,没有专门需要设置的参数
    2)对于多项式核函数,有三个参数。-d用来设置多项式核函数的最高此项次数,也就是公式中的d,默认值是3。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。-r用来设置核函数中的coef0,也就是公式中的第二个r,默认值是0。
    3)对于RBF核函数,有一个参数。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。
    4)对于sigmoid核函数,有两个参数。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。-r用来设置核函数中的coef0,也就是公式中的第二个r,默认值是0。
    SVM模型有两个非常重要的参数C与gamma。
    • 其中 C是惩罚系数,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差
    • gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度。
    Grid Search
    使用grid Search虽然比较简单,而且看起来很naïve。但是他确实有两个优点: 可以得到全局最优 (C,gamma)相互独立,便于并行化进行
    在实际工程应用中,我们需要不断的调整gamma和c的值,并对数据不断地进行交叉验证,使得模型的预测结果更高。此时对应的训练结果w和b作为svm最终的训练结果。

    Knn
    1.简述一下KNN算法的原理
    KNN既可以用于分类,也可以用于回归。本身没有显示的模型训练,多数情况用于分类算法。KNN算法我们主要要考虑三个重要的要素,对于固定的训练集,只要这三点确定了,算法的预测方式也就决定了。这三个最终的要素是k值的选取,距离度量的方式和分类决策规则。
    1,K值的选择一般选择一个较小的值,这取决于数据量的大小和数据维度。通常K为3~10.一种常见的做法就是设置K等于训练集中样本数量的平方根。但是呢这个不一定有交叉验    证出来的好,所以呀,数据量不大,在电脑可以跑得动的前提下还是乖乖用交叉验证吧。
    选择较小的k值,就相当于用较小的领域中的训练实例进行预测,训练误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是泛化误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;
       选择较大的k值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少泛化误差,但缺点是训练误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。
    一个极端是k等于样本数m,则完全没有分类,此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的类,模型过于简单。
    2,距离度量的方式有很多,欧式距离是闵可夫斯基距离距离在p=2时的特例,而曼哈顿距离是p=1时的特例。不做详细接招
    3,决策规则,在分类中一般用投票,回归中一般用均值。
    KNN的暴力破解法:在预测样本的时候,将计算预测样本和所有训练集中的样本的距离,然后计算出最小的k个距离即可,接着多数表决,很容易做出预测。这个方法的确简单直接,在样本量少,样本特征少的时候有效。但是在实际运用中很多时候用不上,为什么呢?因为我们经常碰到样本的特征数有上千以上,样本量有几十万以上,如果我们这要去预测少量的测试集样本,算法的时间效率很成问题。因此,这个方法我们一般称之为蛮力实现。比较适合于少量样本的简单模型的时候用。
    2.KNN算法有哪些优点和缺点?
    优:1,该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分
    2,由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合
    3,可用于非线性分类
    4, 训练时间复杂度比支持向量机之类的算法低,仅为O(n)
    5,和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感
    缺:1,计算量大,尤其是特征数非常多的时候
    2,样本不平衡的时候,对稀有类别的预测准确率低
    3,KD树,球树之类的模型建立需要大量的内存
    4,使用懒散学习方法,基本上不学习,导致预测时速度比起逻辑回归之类的算法慢
      5,相比决策树模型,KNN模型可解释性不强
    3.k-d树实现原理
      参考K近邻法(KNN)原理小结
      缺点: 如果实例点是随机分布的,那么kd树搜索的平均计算复杂度是O(logN),这里的N是训练实例树。所以说,kd树更适用于训练实例数远大于空间维数时的k近邻搜索,当空间维数接近训练实例数时,它的效率会迅速下降,一降降到“解放前”:线性扫描的速度。 也正因为上述k最近邻搜索算法的第4个步骤中的所述:“回退到根结点时,搜索结束”,每个最近邻点的查询比较完成过程最终都要回退到根结点而结束,而导致了许多不必要回溯访问和比较到的结点,这些多余的损耗在高维度数据查找的时候,搜索效率将变得相当之低下
    4.基于k-d树缺点改进的BBF算法
    BBF算法是在k-d树建立好的基础上,在我们搜索的过程中加入一个队列。
    为了便于说明,这里例一个简单的例子
    以上面的查询(2,4.5)为例,搜索的算法流程为:
      1,将(7,2)压人优先队列中;
      2,提取优先队列中的(7,2),由于(2,4.5)位于(7,2)分割超平面的左侧,所以检索其左子结点(5,4)。同时,根据BBF机制”搜索左/右子树,就把对应这一层的兄弟结点即右/左结点存进队列”,将其(5,4)对应的兄弟结点即右子结点(9,6)压人优先队列中,此时优先队列为{(9,6)},最佳点为(7,2);然后一直检索到叶子结点(4,7),此时优先队列为{(2,3),(9,6)},“最佳点”则为(5,4);
      3,提取优先级最高的结点(2,3),重复步骤2,直到优先队列为空。
       5.不平衡的样本可以给KNN的预测结果造成哪些问题,有没有什么好的解决方式?
    • 输入实例的K邻近点中,大数量类别的点会比较多,但其实可能都离实例较远,这样会影响最后的分类。
    • 可以使用权值来改进,距实例较近的点赋予较高的权值,较远的赋予较低的权值。
    • 样本不平衡的时候,对稀有类别的预测准确率低。有时候我们会遇到这样的问题,即样本中某系类别的样本非常的少,甚至少于K,这导致稀有类别样本在找K个最近邻的时候,会把距离其实较远的其他
    • 样本考虑进来,而导致预测不准确。为了解决这个问题,我们限定最近邻的一个最大距离,也就是说,我们只在一个距离范围内搜索所有的最近邻,这避免了上述问题。这个距离我们一般称为限定半径。
    6.为了解决KNN算法计算量过大的问题,可以使用分组的方式进行计算,简述一下该方式的原理。
    • 先将样本按距离分解成组,获得质心,然后计算未知样本到各质心的距离,选出距离最近的一组或几组,再在这些组内引用KNN。
    • 本质上就是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本,该方法比较适用于样本容量比较大时的情况。
    7.KD树建立过程中切分维度的顺序是否可以优化?
    可以先对每一维度求方差,方差大说明数据分布越分散,则从方差大的维度来逐步切分,可以取得更好的切分效果及树的平衡性。
    8.KD树每一次继续切分都要计算该子区间在需切分维度上的中值,计算量很大,有什么方法可以对其进行优化?
    在构建KD树前,依据每一维度先排序,在之后的切分中直接使用
    9.为了防止某一维度的数据较大(50,100),而另外一维度的数据较小(0.1,0.2)而产生的距离计算的问题,需要进行归一化。
    10.KNN总结
    • 1.对异常数据不敏感。
    • 2.可以用来做分类也可以用来做回归
    • 3.可用于非线性分类
    • 4.使用懒散学习方法,基本上不学习,导致预测时速度比起逻辑回归之类的算法慢
    • 5.计算量大,尤其是特征数非常多的时候
    • 6.样本不平衡的时候,对稀有类别的预测准确率低
    • 7.KD树,球树之类的模型建立需要大量的内存
    • 8.相比决策树模型,KNN模型可解释性不强
    11.简述KNN最近邻分类算法的过程?
    • 计算测试样本和训练样本中每个样本点的距离(常见的距离度量有欧式距离,马氏距离等);
    • 对上面所有的距离值进行排序;
    • 选前 k 个最小距离的样本;
    • 根据这 k 个样本的标签进行投票,得到最后的分类类别;

    Kmeans
    聚类
    分类(class)与聚类(cluster)不同,分类是有监督学习模型,聚类属于无监督学习模型。聚类讲究使用一些算法把样本划分为n个群落。一般情况下,这种算法都需要计算欧氏距离。
    欧氏距离即欧几里得距离。
    P ( x 1 ) − Q ( x 2 ) : ∣ x 1 − x 2 ∣ = ( x 1 − x 2 ) 2 P ( x 1 , y 1 ) − Q ( x 2 , y 2 ) : ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 P ( x 1 , y 1 , z 1 ) − Q ( x 2 , y 2 , z 2 ) : ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 + ( z 1 − z 2 ) 2 P(x_1) - Q(x_2): |x_1-x_2| = \sqrt{(x_1-x_2)^2} \ P(x_1,y_1) - Q(x_2,y_2): \sqrt{(x_1-x_2)2+(y_1-y_2)2} \ P(x_1,y_1,z_1) - Q(x_2,y_2,z_2): \sqrt{(x_1-x_2)2+(y_1-y_2)2+(z_1-z_2)^2} \P(x1)−Q(x2):∣x1−x2∣=(x1−x2)2P(x1,y1)−Q(x2,y2):(x1−x2)2+(y1−y2)2P(x1,y1,z1)−Q(x2,y2,z2):(x1−x2)2+(y1−y2)2+(z1−z2)2
    用两个样本对应特征值之差的平方和之平方根,即欧氏距离,来表示这两个样本的相似性。
    K均值算法
    第一步:随机选择k个样本作为k个聚类的中心,计算每个样本到各个聚类中心的欧氏距离,将该样本分配到与之距离最近的聚类中心所在的类别中。
    第二步:根据第一步所得到的聚类划分,分别计算每个聚类的几何中心,将几何中心作为新的聚类中心,重复第一步,直到计算所得几何中心与聚类中心重合或接近重合为止。
    注意:
  8. 聚类数k必须事先已知。借助某些评估指标,优选最好的聚类数。
  9. 聚类中心的初始选择会影响到最终聚类划分的结果。初始中心尽量选择距离较远的样本。
    以下原文链接https://blog.csdn.net/hua111hua/article/details/86556322
    1.K-means中常用的到中心距离的度量有哪些?
    K-means中比较常用的距离度量是欧几里得距离和余弦相似度。
    第一种:欧几里得距离,最常见的两点之间或多点之间的距离表示法,又称之为欧几里得度量,它定义于欧几里得空间中,N维欧式空间中两点x1和x2间的距离公式:

第二种:余弦相似度,余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或者长度上。下图表示余弦相似度的余弦是哪个角的余弦,A,B是三维空间中的两个向量,这两个点与三维空间原点连线形成的交,如果角度越小,说明这两个向量在方向上越接近,在聚类时就归成一类。
2.kmeans聚类中,如何确定k的大小?
转自AI商学院kmeans聚类中,如何确定k的大小?
1 )按需选择
简单地说就是按照建模的需求和目的来选择聚类的个数。比如说,一个游戏公司想把所有玩家做聚类分析,分成顶级、高级、中级、菜鸟四类,那么K=4;如果房地产公司想把当地的商品房分成高中低三档,那么K=3。
按需选择虽然合理,但是未必能保证在做K-Means时能够得到清晰的分界线。
2) 观察法
就是用肉眼看,看这些点大概聚成几堆。这个方法虽然简单,但是同时也模棱两可。
第一张是原始点,第二张分成了两类,第三张是三类,第四张是四类。至于K到底是选3还是选4,可能每个人都有不同的选择。
观察法的另一个缺陷就是:原始数据维数要低,一般是两维(平面散点)或者三维(立体散点),否则人类肉眼则无法观察。
对于高维数据,我们通常利用PCA降维,然后再进行肉眼观察。
3)手肘法Elbow Method
手肘法本质上也是一种间接的观察法。这里需要一点K-Means的背景知识。当K-Means算法完成后,我们将得到K个聚类的中心点Mi,i=1,2,⋯,Ki=1,2,⋯,K。
以及每个原始点所对应的聚类Ci,i=1,2,⋯,K。我们通常采用所有样本点到它所在的聚类的中心点的距离的和作为模型的度量,记为DK。

这里距离可以采用欧式距离。
对于不同的K,最后我们会得到不同的中心点和聚类,所有会有不同的度量。我们把K作为横坐标,DK作为纵坐标,可以得到下面的折线。
很显然K越大,距离和越小。
但是我们注意到K=3是一个拐点,就像是我们的肘部一样,K=1到3下降很快,K=3之后趋于平稳。
手肘法认为这个拐点就是最佳的K。
换句话说,曲线类似于人的手肘,“肘关节”部分对应的 K 值就是最恰当的 K 值。
04Gap Statistic法
这个方法是源自斯坦福几个machine learning大牛的paper Estimating the number of clusters in a data set via the gap statistic 。
这里我们要继续使用上面的DK,Gap Statistic的定义为:

这里E(logDk)指的是logDk的期望。
这个数值通常通过蒙特卡洛模拟产生,我们在样本里所在的矩形区域中(高维的话就是立方体区域)按照均匀分布随机地产生和原始样本数一样多的随机样本,并对这个随机样本做K-Means,从而得到一个DK。
如此往复多次,通常20次,我们可以得到20个logDK。对这20个数值求平均值,就得到了E(logDK)的近似值。最终可以计算Gap Statisitc。而Gap statistic取得最大值所对应的K就是最佳的K。
用上图的例子,我们计算了K=1,2,…9对应的Gap Statisitc.
Gap Statistic的优点是,我们不再需要肉眼了。我们只需要找到最大gap statistic所对应的K即可。
所以这种方法也适用于“批量化作业”,如果我们要做1000次聚类分析,不需要肉眼去看1000次了。
轮廓系数法
使用轮廓系数法评估分类质量,选择分类质量最好的K值
5)稳定性方法
对一个数据集进行2次重采样产生2个数据子集,再用相同的聚类算法对2个数据自己进行聚类,产生2个具有K个聚类的聚类结果,计算2个聚类结果的相似度的分布情况。2个聚类结果具有高的相似度说明K个聚类反映了稳定的聚类结构,其相似度可以用来评估聚类个数。采用此方法试探多个K,找到合适的K值。
6)与层次聚类结合
首先采用层次聚类算法决定结果簇的数目,并找到一个初始聚类,然后用迭代重定位来改进该聚类。
7)Canopy Method
• stage1:聚类最耗费计算的地方是计算对象相似性的时候,Canopy
Method在第一阶段选择简单,计算代价较低的方法计算对象相似性,将相似的对象放在一个子集中,这个子集被叫做Canopy,通过一系列计算得到若干Canopy,Canopy之间是可以重叠的,但不会存在某个对象不属于任何Canopy的情况,可以把这一阶段看成是预处理。
• stage2:在各个Canopy内使用传统的聚类方法(如K-means),不属于同一Canopy的对象之间不进行相似性计算。
从这个方法起码可以看出两点好处:首先,Canopy不要太大且Canopy之间重叠的不要太多的话会大大减少后续所需要计算相似性的对象的个数;其次,类似于K-means这样的聚类方法是需要人为指出K的值的,通过stage1得到额Canopy个数完全可以作为这个K值,一定程度上减少了这个选择k的盲目性。
3.K-means聚类中每个类别中心的初始点如何选择?
1)随机法
最简单的确定初始类簇中心点的方法是随机选择K个点作为初始的类簇中心点。
2)选择各批次距离尽可能远的k个点,首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点,以此类推,直到选出k个初始类簇中心。
3)层次聚类或者Canopy预处理,选择中心点。选用层次聚类或者Canopy算法进行初始聚类,然后利用这些类簇的中心点作为Kmeans算法初始类簇中心点。
4.K-means中空聚类的处理
如果所有的点在指派步骤都未分配到某个簇,就会得到空簇。如果这种情况发生,则需要某种策略来选择一个替补质心,否则的话,平方误差将会偏大。一种方法是选择一个距离当前任何质心最远的点。这将消除当前对总平方误差影响最大的点。另一种方法是从具有最大SEE的簇中选择一个替补的质心。这将分裂簇并降低聚类的总SEE。如果有多个空簇,则该过程重复多次。另外编程实现时,要注意空簇可能导致的程序bug。
5.K-means是否会一直陷入选择质心的循环停不下来?
不会,有数学证明Kmeans一定会收敛,大概思路是利用SSE的概念(也就是误差平方和),即每个点到自身所归属质心的距离的平方和,这个平方和是一个凸函数,通过迭代一定可以到达它的局部最优解。(不一定是全局最优解)
6.如何快速收敛数据量超大的K-means?
K-means算法是常用的聚类算法,但其算法本身存在一定的问题。例如,在大数据量下的计算时间过长就是一个重要问题。
Mini Batch Kmeans使用了一种叫做Mini Batch(分批处理)的方法对数据点之间的距离进行计算。Mini Batch的好处是计算过程中不必使用所有的数据样本,而是从不同类别的样本中抽取一部分样本来代表各自类型进行计算。由于计算样本数量少,所以会相应的减少运行时间,但另一方面抽样页必然会带来准确度的下降。
该算法的迭代步骤有两步:
1)从数据集中随机抽取一些数据形成小批量,把他们分配给最近的质心
2)更新质心:与k均值算法相比,数据的更新是在每一个小的样本集上。对于每一个小批量,通过计算平均值得到更新质心,并把小批量里的数据分配给该质心,随着迭代次数的增加,这些质心的变化是逐渐减小的,直到质心稳定或者达到指定的迭代次数,停止计算。
7.K-means算法的优点和缺点是什么?
K-means算法试图找到使误差平方和最小的簇。当潜在的簇形状是凸面(即球形)的,簇与簇之间区别较明显,且簇大小相近时,其聚类结果较理想。对于处理大数据集合,该算法非常高效,且伸缩性较好。
但该算法除了要事先确定簇数K和对初始聚类中心敏感外,经常以局部最优结束,同时对“噪声”和孤立点敏感,并且该方法不适于发现非凸面形状的簇或者大小差别很大的簇。
8.如何对K-means聚类效果进行评估?
轮廓系数
好的聚类:内密外疏,同一个聚类内部的样本要足够密集,不同聚类之间样本要足够疏远。
轮廓系数计算规则:针对样本空间中的一个特定样本,计算它与所在聚类其它样本的平均距离a,以及该样本与距离最近的另一个聚类中所有样本的平均距离b,该样本的轮廓系数为(b-a)/max(a, b),将整个样本空间中所有样本的轮廓系数取算数平均值,作为聚类划分的性能指标s。
轮廓系数的区间为:[-1, 1]。 -1代表分类效果差,1代表分类效果好。0代表聚类重叠,没有很好的划分聚类。比较低,内密外不够疏
9.K-Means与KNN有什么区别
• 1)KNN是分类算法,K-means是聚类算法;
• 2)KNN是监督学习,K-means是非监督学习
• 3)KNN喂给它的数据集是带Label的数据,已经是完全正确的数据,K-means喂给它的数据集是无label的数据,是杂乱无章的,经过聚类后才变得有点顺序,先无序,后有序。
• 4)KNN没有明显的前期训练过程,K-means有明显的前期训练过程
• 5)K的含义KNN来了一个样本x,要给它分类,即求出它的y,就从数据集中,在X附近找距离它最近的K个数据点,这K个数据点,类别C占的个数最多,就把x的label设为c.
• K-means中K是人工固定好的数字,假设数据集合可以分为k个簇,由于是依靠人工定好,需要一些先验知识。

PCA
1.PCA降维
降维的必要性

  1. 多重共线性–预测变量之间相互关联。多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯。
  2. 高维空间本身具有稀疏性。一维正态分布有68%的值落于正负标准差之间,而在十维空间上只有0.02%。
  3. 过多的变量会妨碍查找规律的建立。
  4. 仅在变量层面上分析可能会忽略变量之间的潜在联系。例如几个预测变量可能落入仅反映数据某一方面特征的一个组内。
    降维的目的:
  5. 减少预测变量的个数
  6. 确保这些变量是相互独立的
  7. 提供一个框架来解释结果 降维的方法有:主成分分析、因子分析、用户自定义复合等。
  8. PCA(Principal Component Analysis)不仅仅是对高维数据进行降维,更重要的是经过降维去除了噪声,发现了数据中的模式。
    原文链接:https://blog.csdn.net/forest_world/article/details/50926055

1.用于:特征降维,去除冗余和可分性不强的特征;
2.目标:降维后的各个特征不相关,即特征之间的协方差为0;
3.原理:基于训练数据X的协方差矩阵的特征向量组成的k阶矩阵U,通过XU得到降维后的k阶矩阵Z;因为矩阵的乘积可以看作成线性变化,所以我们找到u就可以用它来降维
4.物理意义:方差越大,熵越大,特征所含的信息越多
5.算法步骤
计算训练样本的协方差矩阵C;
计算C的特征值和特征向量;
将C的特征值降序排列,特征值对应特征向量也依次排列;
假如要得到X的k阶降维矩阵,选取C的前k个特征{u1,u2…uk},组成降维转换矩阵U;
Z = XU,Z即为降维后的矩阵;

主成分分析
2.PCA为什么要用协方差矩阵的特征向量矩阵来做投影矩阵呢?
降维的目的就是“降噪”和“去冗余”。
“降噪”的目的就是使保留下来的维度间的相关性尽可能小,而“去冗余”的目的就是使保留下来的维度含有的“能量”即方差尽可能大。
我们要最大化方差来保留更多的信息。去噪。
有趣的是,协方差矩阵能同时表现不同维度间的相关性以及各个维度上的方差。
协方差矩阵度量的是维度与维度之间的关系,而非样本与样本之间。协方差矩阵的主对角线上的元素是各个维度上的方差(即能量),其他元素是两两维度间的协方差(即相关性)。
先看“降噪”,让保留下的不同维度间的相关性尽可能小,也就是说让协方差矩阵中非对角线元素都基本为零。达到这个目的的方式——矩阵对角化。
再看“去冗余”,对角化后的协方差矩阵,对角线上较小的新方差对应的就是那些该去掉的维度。我们只取那些含有较大能量(特征值)的维度,其余的就舍掉即可。
原文链接:https://blog.csdn.net/qq1376725255/article/details/84996725
3.给你一个数据集。该数据集包含很多变量,你知道其中一些是高度相关的。经理要求你用PCA。你会先去掉相关的变量吗?为什么?
丢弃相关变量会对PCA有实质性的影响,因为有相关变量的存在,由特定成分解释的方差被放大。
例如:在一个数据集有3个变量,其中有2个是相关的。如果在该数据集上用PCA,第一主成分的方差会是与其不相关变量的差异的两倍。此外,加入相关的变量使PCA错误地提高那些变量的重要性,这是有误导性的。
4.在PCA中有必要做旋转变换吗?如果有必要,为什么?如果你没有旋转变换那些成分,会发生什么情况?
是的,旋转(正交)是必要的,因为它把由主成分捕获的方差之间的差异最大化。这使得主成分更容易解释。但是不要忘记我们做PCA的目的是选择更少的主成分(与特征变量个数相较而言),那些选上的主成分能够解释数据集中最大方差。
通过做旋转,各主成分的相对位置不发生变化,它只能改变点的实际坐标。如果我们没有旋转主成分,PCA的效果会减弱,那样我们会不得不选择更多个主成分来解释数据集里的方差。

朴素贝叶斯
1.什么是贝叶斯决策论?

贝叶斯决策论是概率框架下实施决策的基本方法。要了解贝叶斯决策论,首先得先了解以下几个概念:先验概率、条件概率、后验概率、误判损失、条件风险、贝叶斯判别准则。

先验概率: 所谓先验概率,就是根据以往的经验或者现有数据的分析所得到的概率。如,随机扔一枚硬币,则p(正面) = p(反面) = 1/2,这是我们根据已知的知识所知道的信息,即p(正面) = 1/2为先验概率。

条件概率: 所谓条件概率是指事件A在另一事件B发生的条件下发送的概率。用数学符号表示为:P(B|A),即B在A发生的条件下发生的概率。举个栗子,你早上误喝了一瓶过期了的牛奶(A),那我们来算一下你今天拉肚子的概率(B),这个就叫做条件概率。即P(拉肚子|喝了过期牛奶), 易见,条件概率是有因求果(知道原因推测结果)。

后验概率: 后验概率跟条件概率的表达形式有点相似。数学表达式为p(A|B), 即A在B发生的条件下发生的概率。以误喝牛奶的例子为例,现在知道了你今天拉肚子了(B),算一下你早上误喝了一瓶过期了的牛奶(A)的概率, 即P(A|B),这就是后验概率,后验概率是有果求因(知道结果推出原因)

误判损失:
数学表达式:L(j|i),
判别损失表示把一个标记为i类的样本误分类为j类所造成的损失。
比如,当你去参加体检时,明明你各项指标都是正常的,但是医生却把你分为癌症病人,这就造成了误判损失,用数学表示为:L(癌症|正常)。

条件风险: 是指基于后验概率P(i|x)可获得将样本x分类为i所产生的期望损失,公式为:R(i|x) = ∑L(i|j)P(j|x)。(其实就是所有判别损失的加权和,而这个权就是样本判为j类的概率,样本本来应该含有P(j|x)的概率判为j类,但是却判为了i类,这就造成了错判损失,而将所有的错判损失与正确判断的概率的乘积相加,就能得到样本错判为i类的平均损失,即条件风险。)

举个栗子,假设把癌症病人判为正常人的误判损失是100,把正常人判为癌症病人的误判损失是10,把感冒病人判为癌症的误判损失是8,即L(正常|癌症) = 100, L(癌症|正常) = 10,L(癌症|感冒) = 8, 现在,我们经过计算知道有一个来体检的员工的后验概率分别为:p(正常|各项指标) = 0.2, p(感冒|各项指标) = 0.4, p( 癌症|各项指标)=0.4。假如我们需要计算将这个员工判为癌症的条件风险,则:R(癌症|各项指标) = L(癌症|正常)* p(正常|各项指标) + L(癌症|感冒) * p(感冒|各项指标) = 5.2。

贝叶斯判别准则: 贝叶斯判别准则是找到一个使条件风险达到最小的判别方法。即,将样本判为哪一类,所得到的条件风险R(i|x)(或者说平均判别损失)最小,那就将样本归为那个造成平均判别损失最小的类。

此时:h*(x) = argminR(i|x) 就称为 贝叶斯最优分类器。

总结:贝叶斯决策论是基于先验概率求解后验概率的方法,其核心是寻找一个判别准则使得条件风险达到最小。而在最小化分类错误率的目标下,贝叶斯最优分类器又可以转化为求后验概率达到最大的类别标记,即 h*(x) = argmaxP(i|x)。(此时,L(i|j) = 0, if i = j;L(i|j) = 1, otherwise)

2.你知道什么叫做朴素贝叶斯吗?

朴素贝叶斯采用 属性条件独立性 的假设,对于给定的待分类观测数据X,计算在X出现的条件下,各个目标类出现的概率(即后验概率),将该后验概率最大的类作为X所属的类。而计算后验概率的贝叶斯公式为:p(A|B) =[ p(A) * p(B|A)]/p(B),因为p(B)表示观测数据X出现的概率,它在所有关于X的分类计算公式中都是相同的,所以我们可以把p(B)忽略,则 p(A|B)= p(A) * p(B|A)。

举个栗子,公司里面男性有60人,女性有40人,男性穿皮鞋的人数有25人,穿运动鞋的人数有35人,女性穿皮鞋的人数有10人,穿高跟鞋的人数有30人。现在你只知道有一个人穿了皮鞋,这时候你就需要推测他的性别是什么。如果推测出他是男性的概率大于女性,那么就认为他是男性,否则认为他是女性。(如果此时条件允许,你可以现场给面试官演示一下怎么计算, 计算过程如下:
在这里插入图片描述因为0.2502>0.1, 所以我们可以认为这个人是男性)
在这里插入图片描述3.朴素贝叶斯中的“朴素”怎么理解?
朴素贝叶斯中的朴素可以理解为是“简单、天真”的意思,因为“朴素”是假设了特征之间是同等重要、相互独立、互不影响的,但是在我们的现实社会中,属性之间并不是都是互相独立的,有些属性也会存在性,所以说朴素贝叶斯是一种很“朴素”的算法。

4.朴素贝叶斯有什么优缺点?
优点

朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。

对缺失数据不太敏感,算法也比较简单,常用于文本分类。

分类准确度高,速度快。

对小规模的数据表现很好,能处理多分类任务,适合增量式训练,当数据量超出内存时,我们可以一批批的去增量训练(朴素贝叶斯在训练过程中只需要计算各个类的概率和各个属性的类条件概率,这些概率值可以快速地根据增量数据进行更新,无需重新全量计算)。

缺点:

对训练数据的依赖性很强,如果训练数据误差较大,那么预测出来的效果就会不佳。
理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。
但是在实际中,因为朴素贝叶斯“朴素,”的特点,导致在属性个数比较多或者属性之间相关性较大时,分类效果不好。
而在属性相关性较小时,朴素贝叶斯性能最为良好。
对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
需要知道先验概率,且先验概率很多时候是基于假设或者已有的训练数据所得的,这在某些时候可能会因为假设先验概率的原因出现分类决策上的错误。
5.“朴素”是朴素贝叶斯在进行预测时候的缺点,那么有这么一个明显的假设缺点在,为什么朴素贝叶斯的预测仍然可以取得较好的效果?

对于分类任务来说,只要各个条件概率之间的排序正确,那么就可以通过比较概率大小来进行分类,不需要知道精确的概率值(朴素贝叶斯分类的核心思想是找出后验概率最大的那个类,而不是求出其精确的概率)
如果属性之间的相互依赖对所有类别的影响相同,或者相互依赖关系可以互相抵消,那么属性条件独立性的假设在降低计算开销的同时不会对分类结果产生不良影响。
6.朴素贝叶斯中有没有超参数可以调?

朴素贝叶斯是没有超参数可以调的,所以它不需要调参,朴素贝叶斯是根据训练集进行分类,分类出来的结果基本上就是确定了的,拉普拉斯估计器不是朴素贝叶斯中的参数,不能通过拉普拉斯估计器来对朴素贝叶斯调参。

7.朴素贝叶斯中有多少种模型?

朴素贝叶斯含有3种模型,分别是高斯模型,对连续型数据进行处理;多项式模型,对离散型数据进行处理,计算数据的条件概率(使用拉普拉斯估计器进行平滑的一个模型);伯努利模型,伯努利模型的取值特征是布尔型,即出现为ture,不出现为false,在进行文档分类时,就是一个单词有没有在一个文档中出现过。

8.你知道朴素贝叶斯有哪些应用吗?

朴素贝叶斯的应用最广的应该就是在文档分类、垃圾文本过滤(如垃圾邮件、垃圾信息等)、情感分析(微博、论坛上的积极、消极等情绪判别)这些方面,除此之外还有多分类实时预测、推荐系统(贝叶斯与协同过滤组合使用)、拼写矫正(当你输入一个错误单词时,可以通过文档库中出现的概率对你的输入进行矫正)等。

9.你觉得朴素贝叶斯对异常值敏不敏感?

朴素贝叶斯对异常值不敏感。所以在进行数据处理时,我们可以不去除异常值,因为保留异常值可以保持朴素贝叶斯算法的整体精度,而去除异常值则可能在进行预测的过程中由于失去部分异常值导致模型的泛化能力下降。
你觉得朴素贝叶斯对缺失值敏不敏感?
朴素贝叶斯是一种对缺失值不敏感的分类器,朴素贝叶斯算法能够处理缺失的数据,在算法的建模时和预测时数据的属性都是单独处理的。因此如果一个数据实例缺失了一个属性的数值,在建模时将被忽略,不影响类条件概率的计算,在预测时,计算数据实例是否属于某类的概率时也将忽略缺失属性,不影响最终结果。

10.朴素贝叶斯是高方差还是低方差模型?

朴素贝叶斯是低方差模型。(误差 = 偏差 + 方差)对于复杂模型来说,由于复杂模型充分拟合了部分数据,使得它们的偏差变小,但由于对部分数据过分拟合,这就导致预测的方差会变大。因为朴素贝叶斯假设了各个属性之间是相互的,算是一个简单的模型。对于简单的模型来说,则恰恰相反,简单模型的偏差会更大,相对的,方差就会较小。(偏差是模型输出值与真实值的误差,也就是模型的精准度,方差是预测值与模型输出期望的的误差,即模型的稳定性,也就是数据的集中性的一个指标)

11.朴素贝叶斯为什么适合增量计算?

因为朴素贝叶斯在训练过程中实际只需要计算出各个类别的概率和各个特征的类条件概率,这些概率值可以快速的根据增量数据进行更新,无需重新全量训练,所以其十分适合增量计算,该特性可以使用在超出内存的大量数据计算和按小时级等获取的数据计算中。

12.朴素贝叶斯与 LR 区别?

朴素贝叶斯是生成模型,LR是判别模型
朴素贝叶斯是基于很强的条件独立假设(在已知分类Y的条件下,各个特征变量取值是相互独立的),而 LR 则对此没有要求
朴素贝叶斯适用于数据集少的情景,而LR适用于大规模数据集。
13.高度相关的特征对朴素贝叶斯有什么影响?

假设有两个特征高度相关,相当于该特征在模型中发挥了两次作用(计算两次条件概率),使得朴素贝叶斯获得的结果向该特征所希望的方向进行了偏移,影响了最终结果的准确性,所以朴素贝叶斯算法应先处理特征,把相关特征去掉。

常见分类算法的优缺点
贝叶斯分类法
优点:
1)所需估计的参数少,对于缺失数据不敏感。
2)有着坚实的数学基础,以及稳定的分类效率。
缺点:
1)假设属性之间相互独立,这往往并不成立。(喜欢吃番茄、鸡蛋,却不喜欢吃番茄炒蛋)。
2)需要知道先验概率。
3)分类决策存在错误率。
决策树
优点:
1)不需要任何领域知识或参数假设。
2)适合高维数据。
3)简单易于理解。
4)短时间内处理大量数据,得到可行且效果较好的结果。
5)能够同时处理数据型和常规性属性。
缺点:
1)对于各类别样本数量不一致数据,信息增益偏向于那些具有更多数值的特征。
2)易于过拟合。
3)忽略属性之间的相关性。
4)不支持在线学习。
支持向量机
优点:
1)可以解决小样本下机器学习的问题。
2)提高泛化性能。
3)可以解决高维、非线性问题。超高维文本分类仍受欢迎。
4)避免神经网络结构选择和局部极小的问题。
缺点:
1)对缺失数据敏感。
2)内存消耗大,难以解释。
3)运行和调参略烦人。
K近邻
优点:
1)思想简单,理论成熟,既可以用来做分类也可以用来做回归;
2)可用于非线性分类;
3)训练时间复杂度为O(n);
4)准确度高,对数据没有假设,对outlier不敏感;
缺点:
1)计算量太大
2)对于样本分类不均衡的问题,会产生误判。
3)需要大量的内存。
4)输出的可解释性不强。
Logistic回归
优点:
1)速度快。
2)简单易于理解,直接看到各个特征的权重。
3)能容易地更新模型吸收新的数据。
4)如果想要一个概率框架,动态调整分类阀值。
缺点:
特征处理复杂。需要归一化和较多的特征工程。
神经网络
优点:
1)分类准确率高。
2)并行处理能力强。
3)分布式存储和学习能力强。
4)鲁棒性较强,不易受噪声影响。
缺点:
1)需要大量参数(网络拓扑、阀值、阈值)。
2)结果难以解释。
3)训练时间过长。
Adaboost
优点:
1)adaboost是一种有很高精度的分类器。
2)可以使用各种方法构建子分类器,Adaboost算法提供的是框架。
3)当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单。
4)简单,不用做特征筛选。
5)不用担心overfitting。
缺点:
对outlier比较敏感
原文链接:https://www.julyedu.com/question/topic_list/23
随机森林
优点:
1)可以处理高维数据,不同进行特征选择(特征子集是随机选择)
2)模型的泛化能力较强
3)训练模型时速度快,成并行化方式,即树之间相互独立
4)模型可以处理不平衡数据,平衡误差
5)最终训练结果,可以对特种额排序,选择比较重要的特征
6)随机森林有袋外数据(OOB),因此不需要单独划分交叉验证集
7)对缺失值、异常值不敏感
8)模型训练结果准确度高
9)相对Bagging能够收敛于更小的泛化误差
缺点:
1)当数据噪声比较大时,会产生过拟合现象
2) 对有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值