XGBoost
多年来,机器学习研究人员提出了许多构建决策树的方法,目前最常用的方法是对样本或决策树的实现收费。其中,XGBoost 是一种非常快速且易于使用的开源实现,已成功用于赢得许多机器学习竞赛和商业应用。
算法原理
- 基本思想:在构建决策树时,不是每次都以等概率选择训练样本,而是对那些之前已训练的树集合仍判断错误的样本给予更高的选择概率。这类似于在训练和教育中的 “刻意练习”,例如学钢琴时专注于弹奏不好的部分,而不是反复练习整个片段,这样能使学习算法更快更好地学习。
- 具体过程:以一个包含十个样本的训练集为例,先训练一棵决策树,然后查看这棵树对这十个样本的预测结果,标记出预测错误的样本。在第二次循环生成新的训练集时,从这十个样本中选择样本,此时让之前预测错误的样本有更高的被选中几率,从而使下一棵决策树更关注这些还没处理好的样本。这个增强过程会重复 B 次,每次迭代都关注之前树集合还没处理好的样本。
算法特点
- 广泛使用:在实现增强的不同方法中,XGBoost 是目前使用最广泛的,它是一种开源的实现,速度快且高效。
- 默认值和标准:XGBoost 对标准内的默认值有很好的选择,并且有何时停止分裂的标准。
- 防止过拟合:内置了正则化以防止过拟合,这是它的一个创新之处。
- 权重分配:与传统方法不同,XGBoost 没有使用替换方法,而是为不同的训练样本分配不同的权重,这样无需生成大量随机选择的训练集,使其比使用替换过程更有效。
python代码
import xgboost as xgb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建XGBoost分类器
model = xgb.XGBClassifier(objective='multi:softmax', num_class=3, random_state=42)
# 训练模型
model.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")
决策树与神经网络
决策树(包括样本树)和神经网络都很强大且有效,需要根据具体情况选择使用哪种方法。但这两种方法各自的优缺点。
决策树的特点
- 适用数据类型:决策树通常适用于类似巨大电子表格的制表器数据,即结构化数据,如在房价预测应用中,包含房屋大厅大小、卧室数量、楼层数量等特征的数据。无论是分类还是回归任务,决策树在处理这类数据时表现良好。但不建议用于非结构化数据(如图像、视频、音频和文本),因为这类数据不太可能以电子表格格式存储,处理效果不如神经网络。
- 训练速度:决策树(包括树集合)的训练速度非常快,这使得在机器学习的迭代循环发展中,能够更快地改进算法性能,而无需像训练时间长的模型那样等待较长时间。
- 可解释性:若决策树只有几十个节点,可通过打印决策过程来准确理解其决策方式。不过,当构建由 100 棵树组成的树集合且每棵树有数百个节点时,就难以通过观察集合来了解决策过程,可能需要借助单独的可视化技术。
- 实际应用选择:在实际应用中,如果决定使用决策树,对于大多数应用程序,建议使用 XGboost。树集合相比单个决策树,计算成本会更高一些,所以在计算预算非常有限的情况下,可能会选择单个决策树,但一般情况下更倾向于使用树集合(特别是 XGboost)。
神经网络的特点
- 适用数据类型:与决策树不同,神经网络可以很好地处理所有类型的数据,包括结构化数据、非结构化数据以及包含结构化和非结构化组件的混合数据。在处理非结构化数据(如图像、视频、音频和文本)时,神经网络是首选算法,而决策树或树集合则不太适用;在处理结构化数据时,神经网络和决策树通常都具有竞争力。
- 训练速度:神经网络的一个缺点是训练速度可能比决策树慢,大型神经网络的训练需要很长时间。
- 迁移学习:神经网络的优势在于可以与迁移学习结合使用,对于许多只有小数据集的应用程序,利用迁移学习在更大的数据集上进行预训练,对于获得有竞争力的性能至关重要。
两者比较
从技术角度看,将多个神经网络串联起来构建更大的机器学习系统相对更容易。因为神经网络将输出 Y 计算为输入 X 的平滑或连续函数,即使串联多个不同模型,这些模型的输出也是可微的,所以可以使用梯度下降法同时训练它们;而决策树一次只能训练一棵树。如果要构建由多个协同工作的机器学习模型组成的系统,训练多个神经网络比训练多个决策树更容易,这涉及到一些较技术的原因,在实际项目中会遇到。
笔者注
至此,深度学习课程复盘完毕。这里所有的复盘都是基础,如果深入学习还需要扩大自己的代码阅读量和尝试做项目,比如读开源的sd的源代码。
机器学习和深度学习都是监督学习,相对的是无监督学习,强化学习就是一种无监督学习,后面会开新专题复盘强化学习基础。