Skip to content

Latest commit

 

History

History
115 lines (63 loc) · 6.86 KB

titanic-machine-learning-guide-part-2.md

File metadata and controls

115 lines (63 loc) · 6.86 KB

你会在泰坦尼克号上生存吗?Python 机器学习指南第二部分

原文:www.kdnuggets.com/2016/07/titanic-machine-learning-guide-part-2.html/2

分类 - 有趣的部分

我们将从一个简单的决策树分类器开始。决策树一次检查一个变量,并根据该值的结果分裂成两个分支之一,然后对下一个变量执行相同的操作。关于决策树如何工作的精彩可视化解释可以在这里找到。

如果我们将最大层数设置为 3,这就是经过训练的泰坦尼克号数据集的决策树的样子:

决策树

树首先按性别分裂,然后按类别分裂,因为它在训练阶段了解到这些是决定生存的两个最重要的特征。深蓝色框表示可能生存的乘客,而深橙色框则代表几乎肯定会遇难的乘客。有趣的是,在按类别分裂后,决定女性生存的主要因素是她们支付的票价,而男性的决定因素是他们的年龄(儿童更有可能生存)。

要创建这个树,首先我们初始化一个未训练的决策树分类器(这里我们将树的最大深度设置为 10)。接下来,我们将这个分类器“拟合”到我们的训练集上,使其能够学习不同因素如何影响乘客的生存率。现在决策树已经准备好了,我们可以使用测试数据对其进行“评分”,以确定它的准确性。

clf_dt = tree.DecisionTreeClassifier(max_depth=10)

clf_dt.fit (X_train, y_train)
clf_dt.score (X_test, y_test)

# 0.78947368421052633

点击这里查看要点。

结果为 0.7703,意味着模型正确预测了 77%的测试集生存情况。对于我们的第一个模型来说,表现不错!

如果你是一个细心、怀疑的读者(你应该这样),你可能会想到模型的准确性可能会根据选择的训练和测试集的行而有所不同。我们将通过使用洗牌验证器来解决这个问题。

shuffle_validator = cross_validation.ShuffleSplit(len(X), n_iter=20, test_size=0.2, random_state=0)
def test_classifier(clf):
    scores = cross_validation.cross_val_score(clf, X, y, cv=shuffle_validator)
    print("Accuracy: %0.4f (+/- %0.2f)" % (scores.mean(), scores.std()))

test_classifier(clf_dt)

# Accuracy: 0.7742 (+/- 0.02)

点击这里查看要点。

这个洗牌验证器应用了与之前相同的随机 20:80 拆分,但这次生成了 20 个独特的拆分排列。通过将此洗牌验证器作为参数传递给“cross_val_score”函数,我们可以针对每个不同的拆分对分类器进行评分,并计算结果的平均准确性和标准差。

结果显示我们的决策树分类器的总体准确率为 77.34%,虽然根据训练/测试拆分,准确率可能会高达 80%或降到 75%。使用 scikit-learn,我们可以轻松地用完全相同的语法测试其他机器学习算法。

clf_rf = ske.RandomForestClassifier(n_estimators=50)
test_classifier(clf_rf)

# Accuracy: 0.7837 (+/- 0.02)

clf_gb = ske.GradientBoostingClassifier(n_estimators=50)
test_classifier(clf_gb)

# Accuracy: 0.8201 (+/- 0.02)

eclf = ske.VotingClassifier([('dt', clf_dt), ('rf', clf_rf), ('gb', clf_gb)])
test_classifier(eclf)

# Accuracy: 0.8036 (+/- 0.02)

点击这里查看概要。

“随机森林”分类算法将创建大量(通常质量较差的)树,使用输入变量的不同随机子集,并返回最多树所返回的预测。这有助于避免“过拟合”,这是一种当模型过于紧密地拟合训练数据中的任意相关性,以至于在测试数据上表现不佳的问题。

“梯度提升”分类器将生成许多弱小、浅层的预测树,并将它们组合或“提升”成一个强大的模型。该模型在我们的数据集上表现非常好,但缺点是相对较慢且难以优化,因为模型构建是顺序进行的,因此不能并行化。

“投票”分类器可以用来将多个概念上不同的分类模型应用于同一数据集,并返回所有分类器中的多数票。例如,如果梯度提升分类器预测乘客将不会生存,而决策树和随机森林分类器预测他们将生存,则投票分类器将选择后者。

这是对每种技术的非常简要和非技术性概述,因此我鼓励你深入了解所有这些算法的数学实现,以获得对它们相对优缺点的更深入理解。更多分类算法可以在 scikit-learn 中“开箱即用”,可以在这里探索。

Patrick Triest简介:Patrick Triest 是一位 23 岁的 Android 开发者/物联网工程师/数据科学家/有志成为先驱者,来自波士顿,现在在 SocialCops 工作。他热衷于学习,有时在发现一些特别酷的东西后会非常兴奋并写下自己的见解。

原文。经许可转载。

相关:

  • 掌握 Python 机器学习的 7 个步骤

  • 数据科学和机器学习的前 10 大 IPython 笔记本教程

  • R 学习路径:从 R 初学者到专家的 7 个步骤


我们的前三大课程推荐

1. 谷歌网络安全证书 - 快速进入网络安全职业轨道

2. 谷歌数据分析专业证书 - 提升你的数据分析能力

3. 谷歌 IT 支持专业证书 - 支持你的组织在 IT 领域


更多相关主题