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

举报
Lingxw_w 发表于 2023/04/27 12:33:14 2023/04/27
【摘要】 目录1、使用机器学习模型时,一般怎么处理数据集2、什么是训练误差和测试误差3、什么是过拟合与欠拟合?怎么解决4、机器学习当中的回归模型有哪些5、机器学习当中的分类模型有哪些6、回归和分类模型的评价指标都有哪些1、使用机器学习模型时,一般怎么处理数据集离散值的处理: 因为离散值的差值是没有实际意义的。比如如果用0,1,2代表红黄蓝,1-0的差值代表黄-红,是没有意义的。因此,我们往往会把拥有d...

目录

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

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

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

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

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

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



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、机器学习当中的回归模型有哪些

线性回归模型

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

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

决策树回归模型

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

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

支持向量机回归模型

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

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

XGBoost回归模型

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

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

LightGBM回归模型

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

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

神经网络回归模型

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

import torch
import torch.nn as nn
#定义神经网络模型
class Net(nn.Module):
    def init(self):
        super(Net, self).init()
        self.fc1 = nn.Linear(10, 5)
        self.fc2 = nn.Linear(5, 1)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
#定义神经网络回归模型
model = Net()
#定义损失函数
criterion = nn.MSELoss()
#定义优化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
#训练模型
for epoch in range(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不仅可用于二分类,也可以用于多分类。

  • 优点:

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

  • 缺点:

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

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer # 乳腺癌数据集
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline

# 获得特征标签数据
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)

决策树

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

  • 优点:

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

  • 缺点:

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

# 决策分类树模型训练
from sklearn import tree
clf = 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. 对于分类结果有"概率"值要求的不适用
# 支持向量机 SVM
from sklearn.svm import SVC
clf = SVC(kernel='linear'
          ,gamma='auto'
          ,degree=1
          ,cache_size=5000).fit(X_train, Y_train)
clf.score(X_vali, Y_vali)
# 调参方式和逻辑回归一样,可以使用学习曲线和网格搜索。

随机森林

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

  • 优点:

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

  • 缺点:

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

# 随机森林分类器
from sklearn.ensemble import RandomForestClassifier
rfc = 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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。