【机器学习面试总结】————(二)

简介: 【机器学习面试总结】

e054cd02ff294658842bdd120eb514b2 (1).png


1、使用机器学习模型时,一般怎么处理数据集


  • 离散值的处理: 因为离散值的差值是没有实际意义的。比如如果用0,1,2代表红黄蓝,1-0的差值代表黄-红,是没有意义的。因此,我们往往会把拥有d个取值的离散值变为d个取值为0,1的离散值或者将其映射为多维向量。
  • 属性归一化: 归一化的目标是把各位属性的取值范围放缩到差不多的区间,例如[-0.5,0.5]。这里我们使用一种很常见的操作方法:减掉均值,然后除以原取值范围。
  • 分割数据集: 一般把数据集分为两部分,一部分为训练集,用于训练数据,一部分为测试集,用于测试训练的数据,测试集不应过多或过少,数据较少时训练集:测试集可以为8:2,较多时比例可以达到9:1 。


2、什么是训练误差和测试误差


  • 泛化能力:机器学习的目标是使学得的模型能够很好的适用于新的样本,而不是仅仅在训练样本上工作的很好。学得的模型对新样本(即新鲜数据)的适应能力称为泛化能力。
  • 误差:学习到的模型在样本上的预测结果与样本的真实结果之间的差 。
  • 训练误差:模型在训练集上的误差。
  • 泛化误差(测试误差):在新样本上的误差。
  • 显然,我们更希望得到泛化误差小的模型。


3、什么是过拟合与欠拟合?怎么解决

  • 欠拟合:学得的模型训练误差很大的现象。
  • 过拟合:学得的模型的训练误差很小,但泛化误差大(泛化能力较弱)的现象。


解决拟合的方法:

  • 正则化(Regularization)(L1和L2)。
  • 数据增强(Data augmentation),也就是增加训练数据样本。
  • Dropout


L1、L2正则化是通过改动代价函数来实现的,而Dropout则是通过改动神经网络本身来实现的,它是在训练网络时用的一种技巧(trike)。


  • early stopping


对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代方法,如梯度下降(Gradient descent)学习算法。Early stopping便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。


欠拟合是指模型在训练集、验证集和测试集上均表现不佳的情况


解决方法:


1. 模型复杂化

       •  对同一个算法复杂化。例如回归模型添加更多的高次项,增加决策树的深度,增加神经网络的隐藏层数和隐藏单元数等。


       •  弃用原来的算法,使用一个更加复杂的算法或模型。例如用神经网络来替代线性回归,用随机森林来代替决策树等。


2. 增加更多的特征,使输入数据具有更强的表达能力

       •  特征挖掘十分重要,尤其是具有强表达能力的特征,往往可以抵过大量的弱表达能力的特征,特征的数量往往并非重点,质量才是,总之强特最重要。


       •  能否挖掘出强特,还在于对数据本身以及具体应用场景的深刻理解,往往依赖于经验。


3. 调整参数和超参数

       •  超参数包括:神经网络中的学习率、学习衰减率、隐藏层数、隐藏层的单元数、Adam优化算法中的β1和β2参数、batch_size数值等。其他算法中:树模型(随机森林、GBDT、xgboost)的树数量,k-means中的cluster数,正则化参数λ等。


4. 增加训练数据往往没有用

       •  欠拟合本来就是模型的学习能力不足,增加再多的数据给它训练它也没能力学习好,因此,正如方法2一样,高质量的数据是前提,正如BAT这些大公司,为什么算法模型很强,那是因为平台积累的数据质量足够好。


5. 降低正则化约束

       •  正则化约束是为了防止模型过拟合,如果模型压根不存在过拟合而是欠拟合了,那么就考虑是否降低正则化参数λ或者直接去除正则化项,与过拟合相反操作。


4、机器学习当中的回归模型有哪些


线性回归模型

线性回归是一种经典的机器学习模型,它建立了自变量和因变量之间线性关系的模型,通过最小化残差平方和来求解最优参数。线性回归适用于特征和目标变量之间存在线性关系的情况。

fromsklearn.linear_modelimportLinearRegression#定义线性回归模型model=LinearRegression()
#拟合模型model.fit(X, y)
#预测y_pred=model.predict(X_test)

决策树回归模型

决策树回归是一种基于树结构的机器学习模型,它通过递归地将数据集划分为更小的子集,并在每个子集上递归地建立回归模型。决策树回归适用于特征和目标变量之间具有非线性关系的情况。

fromsklearn.treeimportDecisionTreeRegressor#定义决策树回归模型model=DecisionTreeRegressor()
#拟合模型model.fit(X, y)
#预测y_pred=model.predict(X_test)

支持向量机回归模型

支持向量机回归是一种基于核函数的机器学习模型,它通过找到一个超平面来最小化预测误差和正则化项之和。支持向量机回归适用于特征和目标变量之间具有非线性关系的情况。

fromsklearn.svmimportSVR#定义支持向量机回归模型model=SVR()
#拟合模型model.fit(X, y)
#预测y_pred=model.predict(X_test)

XGBoost回归模型

XGBoost是一种基于决策树的集成学习算法,它通过梯度提升的方式逐步提升模型的预测性能。XGBoost适用于处理大规模数据和高维特征的情况。


importxgboostasxgb#定义XGBoost回归模型model=xgb.XGBRegressor()
#拟合模型model.fit(X, y)
#预测y_pred=model.predict(X_test)

LightGBM回归模型

LightGBM也是一种基于决策树的集成学习算法,它采用了一些优化策略,如GOSS和EFB,来提高模型的训练速度和准确性。LightGBM适用于处理大规模数据和高维特征的情况。


/

importlightgbmaslgb#定义LightGBM回归模型model=lgb.LGBMRegressor()
#拟合模型model.fit(X, y)
#预测y_pred=model.predict(X_test)

神经网络回归模型

神经网络是一种基于人工神经元的机器学习模型,它通过前向传播和反向传播的方式逐步优化模型参数。神经网络适用于特征和目标变量之间具有非线性关系的情况,通常适合处理大规模数据和高维特征。

importtorchimporttorch.nnasnn#定义神经网络模型classNet(nn.Module):
definit(self):
super(Net, self).init()
self.fc1=nn.Linear(10, 5)
self.fc2=nn.Linear(5, 1)
defforward(self, x):
x=torch.relu(self.fc1(x))
x=self.fc2(x)
returnx#定义神经网络回归模型model=Net()
#定义损失函数criterion=nn.MSELoss()
#定义优化器optimizer=torch.optim.SGD(model.parameters(), lr=0.01)
#训练模型forepochinrange(100):
optimizer.zero_grad()
y_pred=model(X)
loss=criterion(y_pred, y)
loss.backward()
optimizer.step()
#预测y_pred=model(X_test)


5、机器学习当中的分类模型有哪些


逻辑回归

逻辑回归的本质就由线性回归演变而来,是一个线性分类器。sklearn实现的LogisticRegression不仅可用于二分类,也可以用于多分类。


  • 优点:

模型训练速度非常快,计算量只与特征的数目有关。模型的可解释性非常好,从特征的权重可以看到不同特征对最后结果的影响。内存资源占用小,只需要存储特征权重等信息。逻辑回归的抗噪能力比较强。


  • 缺点:

若数据集是非线性的,逻辑回归并不能得到很好的结果。逻辑回归对极不平衡的数据集训练效果不好。逻辑回归对数据特征的分布和相关性要求相对较高。逻辑回归本身无法筛选特征。

fromsklearn.linear_modelimportLogisticRegressionfromsklearn.datasetsimportload_breast_cancer#乳腺癌数据集fromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_scoreimportnumpyasnpimportmatplotlib.pyplotasplt%matplotlibinline#获得特征标签数据data=load_breast_cancer()
X=data['data']
y=data['target']
#分割训练姐测试集X_train, X_test, y_train, y_test=train_test_split(X, y, test_size=0.3, random_state=1)
lr_l1=LogisticRegression(penalty="l1", C=0.5, solver="liblinear")
lr_l2=LogisticRegression(penalty="l2", C=0.5, solver="liblinear")
#训练模型lr_l1.fit(X_train, y_train)
lr_l2.fit(X_train, y_train)


决策树

决策树是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规 则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。


  • 优点:

对数据不太敏感,无需做数据预处理。比如归一化、标准化。决策树模型可以进行可视化分析,便于理解和解释。训练速度快。


  • 缺点:

容易发生过拟合。泛化能力比较差。容易忽略数据中特征的相关性。


#决策分类树模型训练fromsklearnimporttreeclf=tree.DecisionTreeClassifier(criterion='entropy', 
random_state=1, 
splitter='random')
clf.fit(X_train, Y_train)
clf.score(X_vali, Y_vali)
#调参方式和逻辑回归一样,可以使用学习曲线和网格搜索。

决策树可调的参数比较多,criterion(衡量分枝质量的指标)、splitter(分枝策略)、max_depth(树的最大深度)、max_features(做最佳分枝时考虑特征的个数)等等,具体接口参见官方文档。


【数据挖掘】-决策树算法+代码实现


支持向量机


  • 优点:


  1. SVM利用内积核函数代替向高维空间的非线性映射。
  2. SVM分类决策是由少数的支持向量决定的。计算复杂性取决于支持向量的数目。


  • 缺点:

  1. SVM并不适合大规模训练样本
  2. SVM不能用于多分类问题
  3. 对于分类结果有"概率"值要求的不适用
#支持向量机SVMfromsklearn.svmimportSVCclf=SVC(kernel='linear'          ,gamma='auto'          ,degree=1          ,cache_size=5000).fit(X_train, Y_train)
clf.score(X_vali, Y_vali)
#调参方式和逻辑回归一样,可以使用学习曲线和网格搜索。

随机森林

随机森林是一个集成算法分类器,其所有的基分类器都是决策树,然后通过装袋法(Bagging)进行集成。


  • 优点:

可用于处理高维度的数据,并且不需要做特征选择。训练模型后可以知道哪些特征比较重要。对不平衡数据比较不敏感


  • 缺点:

当数据集中有特征数据噪声比较大时,容易出现过拟合。无法知道模型内部的运行,可解释性较差。

#随机森林分类器fromsklearn.ensembleimportRandomForestClassifierrfc=RandomForestClassifier()
rfc.fit(X_train, Y_train)
rfc.score(X_test, Y_test)
#调参方式和逻辑回归一样,可以使用学习曲线和网格搜索。

XGBoost模型

XGBoost模型是一种使用提升法(Boosting)集成的集成分类器,利用许多弱分类器集成在一起形成一个强分类器的模型。


  • 优点:

当样本存在缺失值时,XGBoost能自动学习分裂方向。

XGBoost借鉴RF的做法,支持列抽样,不仅能防止过拟合,还能降低计算。

XGBoost的代价函数引入正则化,控制了模型的复杂度,防止模型过拟合。


  • 缺点:

XGBoost在迭代之前需要对特征做预排序,大数据集下计算耗时。

XGBoost采用level-wise算法生成决策树,同时分裂同一层的叶子,这样导致很多不必要分裂叶子节点被分裂,带来了不必要的开销。


LightGBM模型

LightGBM模型也是一种使用提升法(Boosting)集成的集成分类器,利用弱分类器(决策树)迭代训练以得到最优模型。


LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业实践。


  • 优点:

训练速度快。相对XGBoost,采用直方图算法进行样本遍历,极大降低了时间复杂度;训练过程中,采用单边梯度算法过滤梯度小的样本,减少了大量的计算;基于leaf-wise算法的增长策略构建树,减少了很多不必要的计算;同时采用了并行(特征并行、数据并行)的方式加速计算,优化了缓存,增加了缓存命中率。内存消耗更小。


  • 缺点:

使用leaf-wise算法可能会长出比较深的决策树,而产生过拟合。

由于LightGBM是基于偏差的算法,所以对噪点数据比较敏感。


6、回归和分类模型的评价指标都有哪些


分类指标

MSE 均方误差、RMSE 均方根误差、MAE 平均绝对误差


分类问题

准确率和错误率、精确率和召回率、PR曲线图、 F1值、ROC、AUC值、 ROC 和 PR。


【数据挖掘】-模型的评估


参考链接:

https://blog.csdn.net/u010899985/article/details/79471909

http://t.csdn.cn/0DSxf

目录
相关文章
|
4月前
|
机器学习/深度学习 算法
【机器学习】过拟合和欠拟合怎么判断,如何解决?(面试回答)
本文介绍了如何通过观察训练误差和验证误差来判断模型是否出现过拟合或欠拟合,并提供了相应的解决方案,包括增加数据、调整模型复杂度、使用正则化技术等。
470 1
|
2月前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
4月前
|
机器学习/深度学习 算法 数据中心
【机器学习】面试问答:PCA算法介绍?PCA算法过程?PCA为什么要中心化处理?PCA为什么要做正交变化?PCA与线性判别分析LDA降维的区别?
本文介绍了主成分分析(PCA)算法,包括PCA的基本概念、算法过程、中心化处理的必要性、正交变换的目的,以及PCA与线性判别分析(LDA)在降维上的区别。
109 4
|
4月前
|
机器学习/深度学习 算法 Python
【机器学习】面试问答:决策树如何进行剪枝?剪枝的方法有哪些?
文章讨论了决策树的剪枝技术,包括预剪枝和后剪枝的概念、方法以及各自的优缺点。
69 2
|
4月前
|
机器学习/深度学习 算法
【机器学习】SVM面试题:简单介绍一下SVM?支持向量机SVM、逻辑回归LR、决策树DT的直观对比和理论对比,该如何选择?SVM为什么采用间隔最大化?为什么要将求解SVM的原始问题转换为其对偶问题?
支持向量机(SVM)的介绍,包括其基本概念、与逻辑回归(LR)和决策树(DT)的直观和理论对比,如何选择这些算法,SVM为何采用间隔最大化,求解SVM时为何转换为对偶问题,核函数的引入原因,以及SVM对缺失数据的敏感性。
89 3
|
4月前
|
机器学习/深度学习
【机器学习】面试题:LSTM长短期记忆网络的理解?LSTM是怎么解决梯度消失的问题的?还有哪些其它的解决梯度消失或梯度爆炸的方法?
长短时记忆网络(LSTM)的基本概念、解决梯度消失问题的机制,以及介绍了包括梯度裁剪、改变激活函数、残差结构和Batch Normalization在内的其他方法来解决梯度消失或梯度爆炸问题。
193 2
|
4月前
|
机器学习/深度学习 算法
【机器学习】简单解释贝叶斯公式和朴素贝叶斯分类?(面试回答)
简要解释了贝叶斯公式及其在朴素贝叶斯分类算法中的应用,包括算法的基本原理和步骤。
83 1
|
1月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
104 4
|
11天前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
30 2
|
29天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
45 1