本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、树形结构为什么不需要归一化?
原因:因为进行归一化后不会影响分裂点的位置,对树模型的结构不会造成影响。 (按照特征值进行排序的,归一化后排序的顺序不变,所以树形结构分裂点的位置也不变)
二、请详细说说支持向量机(SVM)的原理?
三、逻辑斯特回归为什么要对特征进行离散化?
四、overfitting怎么解决?
overfitting就是过拟合。 特点: 随着训练过程的进行,模型在训练数据上的拟合效果越来越好,而在验证集上的效果则越来越差。 解决方法: 1、正则化: L1正则化:逼迫更多w为0,变得稀疏。 L2正则化:逼迫所有w尽可能趋向于0但是不为0,顾及到了每一个点。 2、随机失活(dropout):让神经元以一定概率被激活。 3、逐层归一化(batch normalization):这个方法给每层的输出都做一次归一化。使得下一层的输入接近正态分布。 4、提前终止:不去过分的追求精确的最小值,根据交叉验证来提前终止训练。
五、说说梯度下降法?
1、梯度下降法定义:是一个一阶优化算法,通常也称为最速下降法。 2、梯度定义:对于一个线性函数,梯度就是线的斜率。 3、梯度一般定义:对多元函数的参数求偏导,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。 4、求梯度的意义是什么?是为了得出函数变化最快的地方,以找到函数的最小值。 5、梯度下降的直观解释:在山上下山,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,下一步继续沿着当前最陡峭的位置向下走,一直到走到山脚。 6、梯度下降有: 1)批量梯度下降法(BGD):更新参数时使用所有的样本来进行更新。(即求梯度时用了所有的样本数据)。训练速度慢,但准确度较高。 2)随机梯度下降法(SGD):更新参数时只用一个样本来进行更新。训练速度快,但是准确度不稳定,有可能陷入局部最优解。 3)小批量梯度下降法(MBGD):是对于随机梯度下降法和批量梯度下降法的一个折中。
六、为什么xgboost要用泰勒展开,优势在哪里?
七、谈谈判别式模型和生成式模型?
八、请详细说说EM算法?
九、机器学习中,为何要经常对数据做归一化?
归一化定义:把每个特征向量的值都缩放到相同的数值范围。 为什么: 1、加快了梯度下降求最优解的速度(否则很难收敛甚至不能收敛)。 归一化使得损失等高线尽可能的接近圆形。 2、有可能会提高精度。 归一化类型: 1、线性归一化:适合用在数值比较集中的情况,容易受到极大极小值的影响。 2、标准差标准化:经过处理的数据符合正态分布。
十、简单说说贝叶斯定理?
10-1、相关概念介绍
先验概率(边缘概率):某个事件发生的概率,即通过经验来判断事情发生的概率。 条件概率(后验概率):事件A在事件B已经发生条件下的发生概率。 联合概率:两个事件共同发生的概率。 条件独立: 注意:朴素贝叶斯定理假设特征之间相互独立。
10-2、贝叶斯定理
贝叶斯原理:实际上就是求解后验概率。
贝叶斯公式(根据联合概率求得):
推导贝叶斯公式:
根据上边两个条件概率公式即可推导出贝叶斯公式。
10-3、贝叶斯算法的优缺点
优点 1、对小规模数据的表现很好,能处理多分类任务,适合增量式训练。 2、算法简单,训练速度快。
缺点 1、对缺失数据不太敏感。 2、因为朴素贝叶斯模型假设了属性之间相互独立,这在实际应用中往往是不成立的,在属性之间相关性比较大的时候,分类效果并不好。适合属性之间相关性较小的样本。 3、需要首先知道先验概率。如果先验概率是假设的,那么往往预测结果不会那么准确。 4、对于输入数据的表达形式很敏感。
10-4、拓展延伸
10-4-1、MLE(最大似然)
似然函数: 总体X为离散型时: 总体X为连续型时:
注意:最大似然估计会寻找关于 θ的最可能的值(即,在所有可能的θ取值中,寻找一个值使这个采样的“可能性”最大化)。
10-4-2、MAP(最大后验概率)
十一、如何进行特征选择?
特征选择: 1、是一个重要的数据预处理过程。 2、可以减少特征的数量、降维,使得模型的泛化能力更强。 3、增强对特征和特征值之间的理解。 如何特征选择? 1、去除方差较小的特征(影响小) 2、正则化,有用的特征往往对应系数非0。
十二、机器学习和统计里面的auc的物理意义是什么?
1、AUC的定义:AUC(Area under curve,即一条曲线下面区域的面积,而这条曲线叫做ROC曲线)是评价模型好坏的常见指标之一,是一个概率值,只能用于二分类模型的评价。 2、ROC曲线:横坐标为假阳率(负例中有多少被预测为正例的概率),纵坐标为真阳率(正例中被预测为正例的概率)。 3、ROC曲线的作用:ROC曲线主要是用来判断分类器的性能。ROC曲线越接近左上角,则该分类器的性能越好。
十二、扩展知识(准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F值(F-Measure)、AUC、ROC的理解)
前言:以下的几个概念都是用来评价分类器的优良。
12-1、准确率
准确率:即所有预测正确的占总的比重。 注意:数据不均衡的时候不适合使用准确率。
12-2、精确率
精确率:查准率,即正确预测为正的占全部预测为正的比例。 备注:第一次接触这个概念有一些不理解,后来慢慢了解了,精确率这个概念适用于医学诊断等,举个栗子,疾病诊断,就算是健康的被判断为不健康,那关系也不是特别大。但是,如果不健康被判定为健康,那这个问题就大了,精确率在这里就显得尤为重要!
12-3、召回率
召回率:即正确预测为正的占全部实际为正的比例。 备注:这个概念适用于一些电子产品故障召回,比如说某某手机销售后发现故障,需要紧急召回,一些人知道这个消息并且给厂家退回去手机,但是另一些人压根不知道这个消息。
12-4、F1 score值
F1 score值:基于精确率和召回率的一个值,融合了这两个标准。 总结:越大越好
12-5、AUC、ROC
1、ROC曲线
横坐标:伪正类率(False positive rate,FPR)
纵坐标:真正类率,即召回率(True positive rate,TPR)
即:TPR越大越好,而FPR越小越好,理想情况是(0,1)点,即ROC曲线越靠拢(0,1)点,左上角,越偏离45°对角线越好。 2、AUC值 AUC值是ROC曲线下的面积,取值范围一般是在0.5到1之间,使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。 从AUC判断分类器(预测模型)优劣的标准: (1)AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。 (2)0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。 (3)AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。 (4)AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测 即:AUC值越大的分类器,正确率越高。
12-6 、小结
精确率和召回率的关系:精确率和召回率具有互斥的关系。
十三、常见的分类算法有哪些?他们各自的优缺点是什么?
13-1、贝叶斯分类法
优点 1、对小规模数据的表现很好,能处理多分类任务,适合增量式训练。 2、算法简单,训练速度快。
缺点 1、对缺失数据不太敏感。 2、因为朴素贝叶斯模型假设了属性之间相互独立,这在实际应用中往往是不成立的,在属性之间相关性比较大的时候,分类效果并不好。适合属性之间相关性较小的样本。 3、需要首先知道先验概率。如果先验概率是假设的,那么往往预测结果不会那么准确。 4、对于输入数据的表达形式很敏感。
13-2、决策树
优点: 1): 2): 3): 4): 缺点 1): 2): 3):
13-3、K近邻
优点: 1): 2): 3): 4): 缺点 1): 2): 3):
13-4、逻辑回归
优点: 1): 2): 3): 4): 缺点 1): 2): 3):
13-5、神经网络
优点: 1):分类准确率比较高 2): 3): 4): 缺点 1):需要大量的参数。 2):训练时间过长。 3):
十四、RF与GBDT之间的区别与联系?
十五、请问怎么处理特征向量的缺失值?
1、如果缺失值较多的话,应该直接将该特征舍弃。 2、缺失值较少的话,一般的处理方法有: 1):均值填充。 2):用随机森林等算法预测填充。 3、相关API介绍:
15-1、 API:SimpleImputer(均值、中值、众值填充)
from sklearn.impute import SimpleImputer 参数: missing_values: 缺失值,默认为空值np.nan strategy: 填充缺失值时的策略,输入mean为均值填充,输入median为中值填充,输入most_frequent为众数填充。 fill_value:当参数strategy参数为constant时可用,可输入字符表示即将要填充的值,常用的是0. copy:默认为True,将创建特征矩阵的副本,反之则会将缺失值填充到原本的特征矩阵中去。
15-2、API:KNNImputer(邻近值填充)
from sklearn.impute import KNNImputer 参数: n_neighbors:选择邻居的样本个数。
注意:fit是训练的意思,得到均值中值众值等,而transform是应用的意思。要注意fit_transform一起用和分开用的区别。
十六、简述KNN最近邻分类算法的过程?
KNN算法概述:每个样本都可以由它最接近的k个邻居来代表,分类算法。 算法过程: 1、计算要测试的数据与各个数据之间的距离。 2、将这些距离进行排序。 3、选取距离最小的K个点。 4、统计这k个点的类别,哪个类别出现的频率最高则作为测试数据的预测分类。
十七、请写出你了解的机器学习特征工程操作,以及它的意义?
特征工程:包括数据与特征处理、特征选择和降维。 1、数据与特征处理包括: 1):数据选择、清洗、采样 数据清洗:填充缺失值,将不可靠的样本丢弃。 采样:保证不同类别样本的比例。 2):不同类型数据的特征处理 数值型:归一化、离散化。 API: MinMaxScaler:归一到 [ 0,1 ] from sklearn import preprocessing preprocessing.MinMaxScaler() MaxAbsScaler:归一到 [ -1,1 ] ,不常用。
类别型:one-hot编码,处理特征是分类型的数据。 from sklearn import preprocessing preprocessing.OneHotEncoder()
文本型:使用tf-idf(词频--逆文件频率)处理,评估一个词对于一个文件集中的一个文件的重要程度。 核心思想:一个词语在一篇文章中出现次数越多, 同时在所有文档中出现次数越少, 越能够代表该文章,认为该词具有很好的类别区分能力,可以用来分类。 TF:词频,表现词条在文本中出现的频率,被归一化,防止偏向长的文件。 tf = 某一类中词条w出现的数目/某一类中所有的词条数目 IDF:逆文件频率 idf = log(文档总数/(包含该词的文档数+1)) 某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到。 公式: TF*IDF API:from sklearn.feature_extraction.text import TfidfVectorizer 缺点: 1、每次增加语料时,需要重新计算,不适合增量编写 2、没有考虑特征词的位置对文本的区分程度,词条出现在不同位置,其重要性程度是不一样的。
from sklearn.feature_extraction.text import TfidfVectorizer
train_document = ["The flowers are beautiful.",
"The name of these flowers is rose, they are very beautiful.",
"Rose is beautiful",
"Are you like these flowers?"]
test_document = ["The flowers are mine.",
"My flowers are beautiful"]
#利用函数获取文档的TFIDF值
print("计算TF-IDF权重")
transformer = TfidfVectorizer()
# fit(): 根据训练集生成词典和逆文档词频
# transform():使用fit学习的词汇和文档频率,将文档转化为文档-词矩阵。
X_train = transformer.fit_transform(train_document)
X_test = transformer.transform(test_document)
#观察各个值
#(1)统计词列表
word_list = transformer.get_feature_names() # 所有统计的词
print("统计词列表")
print(word_list)
#(2)统计词字典形式
print("统计词字典形式")
print(transformer.fit(test_document).vocabulary_)
#(3)TFIDF权重
weight_train = X_train.toarray()
weight_test = X_test.toarray()
print("train TFIDF权重")
print(weight_train)
print("test TFIDF权重")
print(weight_test)
#(4)查看逆文档率(IDF)
print("train idf")
print(transformer.fit(train_document).idf_)
时间型:提取出离散的年、月、日。比如说一周的星期几。
2、特征选择: 1):Filter:使用方差过滤特征,评估单个特征和结果值的相关程度,留下相关性较强的特征。
3、降维: 1):主成成分分析(PCA):将较高维度样本空间映射到较低维度的样本空间上。 API:from sklearn.decomposition import PCA 2):线性判别分析(LDA):
4、意义: 1):对数据进行预处理,可以提高数据的质量。 2):使用正确的采样方法可以解决数据不平衡带来的预测偏差。 3):对不同类型数据的特征处理有助于提高特征的可用性。 4):特征选择有助于去除对结果不太重要的特征,提高计算性能。 5):降维有助于减少模型的训练时间,提高计算性能。
十八、如何降低数据集的维度以减少模型的计算时间?
1、首先关闭机器上正在运行的其他程序,确保大部分内存可用。 使用特征工程: 1、数据清洗:对于缺失值很多的特征直接删除。 2、随机采样数据,创建一个较小的数据集。 3、特征选择:相互关联的特征直接删除。对于结果影响不大的特征也直接删除。 4、降维:使用PCA(主成分分析):将较高维度样本空间映射到较低维度的样本空间上。
十九、如何提升已经达到96%精度的分类模型性能?
1、可能是数据不平衡,我们可以给分类分配权重,让较少的分类获得较大的权重。 2、我们可以通过AUC-ROC曲线找到最佳阈值来调整预测阈值。
二十、如何在一个数据集上选择重要的变量?给出解释?
1、使用信息增益来判断哪个特征是重要的。 2、选择重要的变量之前先去除相关变量。 3、使用随机森林,画出变量重要性图。
二十一、GBM和随机森林的区别?
二十二、如何理解模型的过拟合与欠拟合?以及如何解决?
欠拟合特点:模型在训练集和验证集上的效果都差。 1、添加更多的特征项。 2、增加模型的复杂度。比如说把低维不可分的数据映射到高维空间。 3、集成学习方法boosting(比如说GBDT)。
过拟合特点:随着训练过程的进行,模型在训练数据上的拟合效果越来越好,而在验证集上的效果则越来越差。 解决方法: 1、正则化: L1正则化:逼迫更多w为0,变得稀疏。 L2正则化:逼迫所有w尽可能趋向于0但是不为0,顾及到了每一个点。 2、随机失活(dropout):让神经元以一定概率被激活。 3、逐层归一化(batch normalization):这个方法给每层的输出都做一次归一化。使得下一层的输入接近正态分布。 4、提前终止:不去过分的追求精确的最小值,根据交叉验证来提前终止训练。
5、减少特征个数:将与结果没什么关系的特征删除,防止噪声干扰模型。 6、集成学习方法Bagging。
二十三、xgboost的原理?
二十四、请详细说说梯度提升树(GBDT)的原理?
二十五、请说说Adaboost算法的原理与推导?
二十六、机器学习中的正则化到底是什么意思?
正则化:将系数估计朝0的方向进行约束、调整或者缩小。也就是说,正则化可以在学习过程中降低模型复杂度和不稳定程度,从而避免过拟合的危险。(即正则化是给损失函数加上一些限制。避免其过拟合) 过拟合函数:过拟合函数往往都是一个高阶多项式,正则化的目的就是使得高次项系数尽可能的为0或者是接近于0。 线性回归模型的代价函数:代价函数=损失函数+正则化项 备注:λ是正则化参数,参数越大,则对其惩罚的力度也越大,相应的会把所有的参数最小化,能起到规范的作用。平方是为了求导方便。 L1、L2正则化:又叫做L1范数、L2范数。目的是对损失函数加上一个约束,减小其解的范围。 L1正则化:逼迫更多w为0,变得稀疏。(Lasso回归) L2正则化:逼迫所有w尽可能趋向于0但是不为0,顾及到了每一个点。(岭回归)
二十七、决策树、回归、SVM、神经网络等算法各自的优缺点?
决策树: 回归: SVM: 神经网络: