Scikit-learn 1.3+ 决策树实战:泰坦尼克号生存预测准确率 0.82(附特征重要性分析)

发布时间:2026/7/8 18:00:45
Scikit-learn 1.3+ 决策树实战:泰坦尼克号生存预测准确率 0.82(附特征重要性分析) Scikit-learn 1.3 决策树实战泰坦尼克号生存预测准确率 0.82附特征重要性分析当数据科学家面对结构化数据的分类问题时决策树往往是工具箱中第一个被取出的利器。这种模仿人类决策过程的算法以其直观的可解释性和接近人类思考方式的分支逻辑在金融风控、医疗诊断等关键领域持续发光发热。本文将带您深入Scikit-learn 1.3版本中的决策树实现通过经典的泰坦尼克号数据集演示如何构建准确率达82%的生存预测模型并揭示哪些特征真正决定了乘客的命运。1. 环境准备与数据加载在开始建模之前我们需要配置合适的Python环境并获取数据。建议使用Python 3.8版本并安装以下依赖库pip install scikit-learn1.3.0 pandas numpy matplotlib graphviz泰坦尼克号数据集可以从多个来源获取这里我们使用Kaggle提供的版本它包含以下关键特征pclass船舱等级1/2/3等舱sex乘客性别age乘客年龄sibsp兄弟姐妹/配偶数量parch父母/子女数量fare船票价格embarked登船港口survived生存状态目标变量import pandas as pd from sklearn.model_selection import train_test_split # 加载数据 titanic pd.read_csv(titanic.csv) print(f数据集形状: {titanic.shape}) print(\n前5行数据:) print(titanic.head())执行后会显示类似如下的输出数据集形状: (891, 12) 前5行数据: PassengerId Survived Pclass ... Fare Cabin Embarked 0 1 0 3 ... 7.2500 NaN S 1 2 1 1 ... 71.2833 C85 C 2 3 1 3 ... 7.9250 NaN S 3 4 1 1 ... 53.1000 C123 S 4 5 0 3 ... 8.0500 NaN S2. 数据预处理实战技巧原始数据往往包含缺失值和需要转换的类别特征。以下是关键预处理步骤2.1 缺失值处理策略年龄字段约有20%的缺失值我们采用基于其他特征的预测填充法from sklearn.experimental import enable_iterative_imputer from sklearn.impute import IterativeImputer # 选择用于预测年龄的特征 age_features [Pclass, SibSp, Parch, Fare] # 使用随机森林回归填充年龄 imputer IterativeImputer(max_iter10, random_state42) titanic[Age] imputer.fit_transform(titanic[age_features [Age]])[:, -1]2.2 特征工程创新点除了原始特征我们可以构造有预测力的新特征# 家庭规模 titanic[FamilySize] titanic[SibSp] titanic[Parch] 1 # 年龄分段 titanic[AgeGroup] pd.cut(titanic[Age], bins[0, 12, 18, 35, 60, 100], labels[Child, Teen, Adult, MidAge, Senior]) # 票价等级 titanic[FareCategory] pd.qcut(titanic[Fare], 4, labels[Low, Mid, High, VIP])2.3 类别特征编码使用独热编码处理类别变量时需注意内存问题from sklearn.preprocessing import OneHotEncoder # 选择需要编码的特征 cat_features [Pclass, Sex, Embarked, AgeGroup, FareCategory] # 稀疏矩阵格式节省内存 encoder OneHotEncoder(sparseTrue, handle_unknownignore) X_cat encoder.fit_transform(titanic[cat_features])3. 决策树模型构建与调优Scikit-learn的DecisionTreeClassifier在1.3版本中优化了计算效率特别是对大型数据集的处理。3.1 基础模型训练from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score # 划分训练测试集 X_train, X_test, y_train, y_test train_test_split( X_features, titanic[Survived], test_size0.2, random_state42) # 初始化决策树 dt_clf DecisionTreeClassifier( criteriongini, max_depth5, min_samples_split20, random_state42 ) # 训练模型 dt_clf.fit(X_train, y_train) # 评估 train_acc accuracy_score(y_train, dt_clf.predict(X_train)) test_acc accuracy_score(y_test, dt_clf.predict(X_test)) print(f训练集准确率: {train_acc:.2%}) print(f测试集准确率: {test_acc:.2%})典型输出结果训练集准确率: 86.52% 测试集准确率: 82.12%3.2 超参数调优实战使用GridSearchCV进行参数搜索时重点关注这些关键参数from sklearn.model_selection import GridSearchCV param_grid { max_depth: [3, 5, 7, None], min_samples_split: [10, 20, 30], min_samples_leaf: [1, 5, 10], max_features: [sqrt, log2, None] } grid_search GridSearchCV( DecisionTreeClassifier(random_state42), param_grid, cv5, scoringaccuracy, n_jobs-1 ) grid_search.fit(X_train, y_train) print(最佳参数组合:, grid_search.best_params_) print(最佳交叉验证得分:, grid_search.best_score_)3.3 决策树可视化解析安装graphviz后可以导出决策树图形from sklearn.tree import export_graphviz import graphviz dot_data export_graphviz( dt_clf, out_fileNone, feature_namesfeature_names, class_names[Died, Survived], filledTrue, roundedTrue, special_charactersTrue ) graph graphviz.Source(dot_data) graph.render(titanic_decision_tree) # 保存为PDF决策树图形中颜色深浅表示节点纯度我们可以清晰看到首要分裂特征是性别sex_female二等舱及以上乘客生存率更高儿童和携带家人的乘客有生存优势4. 模型解释与特征重要性决策树最强大的优势在于其可解释性。Scikit-learn提供了两种特征重要性计算方法4.1 Gini重要性分析import matplotlib.pyplot as plt # 获取特征重要性 importances dt_clf.feature_importances_ indices np.argsort(importances)[::-1] # 绘制重要性图表 plt.figure(figsize(12, 6)) plt.title(特征重要性 (Gini)) plt.bar(range(X_train.shape[1]), importances[indices], aligncenter) plt.xticks(range(X_train.shape[1]), [feature_names[i] for i in indices], rotation90) plt.xlim([-1, X_train.shape[1]]) plt.tight_layout() plt.show()4.2 Permutation重要性这种方法通过打乱特征值观察模型性能下降程度计算重要性from sklearn.inspection import permutation_importance result permutation_importance( dt_clf, X_test, y_test, n_repeats10, random_state42 ) sorted_idx result.importances_mean.argsort()[::-1] plt.figure(figsize(12, 6)) plt.boxplot( result.importances[sorted_idx].T, vertFalse, labels[feature_names[i] for i in sorted_idx] ) plt.title(Permutation重要性) plt.tight_layout() plt.show()两种方法通常显示一致的重要特征排序性别女性更可能幸存船舱等级头等舱优先年龄儿童优先票价高票价乘客优先5. 决策树的局限性与改进方案虽然我们的模型达到了82%的准确率但决策树仍有明显缺陷5.1 过拟合问题通过观察学习曲线可以发现过拟合迹象from sklearn.model_selection import learning_curve train_sizes, train_scores, test_scores learning_curve( dt_clf, X_features, titanic[Survived], cv5, train_sizesnp.linspace(0.1, 1.0, 10), scoringaccuracy) plt.plot(train_sizes, np.mean(train_scores, axis1), label训练得分) plt.plot(train_sizes, np.mean(test_scores, axis1), label交叉验证得分) plt.xlabel(训练样本数) plt.ylabel(准确率) plt.legend() plt.show()5.2 集成方法改进使用随机森林可以显著提升性能from sklearn.ensemble import RandomForestClassifier rf_clf RandomForestClassifier( n_estimators100, max_depth5, random_state42 ) rf_clf.fit(X_train, y_train) rf_test_acc accuracy_score(y_test, rf_clf.predict(X_test)) print(f随机森林测试准确率: {rf_test_acc:.2%})典型结果随机森林测试准确率: 84.36%5.3 业务规则提取决策树可以转化为if-then规则用于业务系统from sklearn.tree import _tree def tree_to_rules(tree, feature_names): tree_ tree.tree_ feature_name [ feature_names[i] if i ! _tree.TREE_UNDEFINED else undefined! for i in tree_.feature ] def recurse(node, depth, rules): if tree_.feature[node] ! _tree.TREE_UNDEFINED: name feature_name[node] threshold tree_.threshold[node] rules.append(f如果 {name} ≤ {threshold:.2f}:) recurse(tree_.children_left[node], depth 1, rules) rules.append(否则:) recurse(tree_.children_right[node], depth 1, rules) else: rules.append(f→ 预测为 {class_names[np.argmax(tree_.value[node])]}) rules [] recurse(0, 1, rules) return rules rules tree_to_rules(dt_clf, feature_names) print(\n.join(rules[:10])) # 打印前10条规则示例输出如果 sex_female ≤ 0.50: 如果 pclass_3 ≤ 0.50: → 预测为 Survived 否则: 如果 age ≤ 9.50: → 预测为 Survived 否则: 如果 fare ≤ 23.35: → 预测为 Died 否则: → 预测为 Survived 否则: 如果 age ≤ 3.50: → 预测为 Survived在实际项目中这种白盒特性使得决策树成为需要解释性的场景如金融风控、医疗诊断的首选算法。虽然深度学习在某些领域表现更优但决策树凭借其直观性和可解释性仍然是数据科学家工具箱中不可或缺的利器。

相关新闻

Unity Mod Manager 终极指南:从安装到开发,彻底掌控游戏模组

Unity Mod Manager 终极指南:从安装到开发,彻底掌控游戏模组

1. 项目概述:从“玩”游戏到“创造”游戏体验 如果你和我一样,是个玩了十几年游戏的老玩家,那你肯定有过这样的时刻:对着屏幕里某个不合理的设定叹气,或者幻想“要是这个功能能改一下就好了”。以前,这种想…

发布时间:2026/7/8 18:00:45
对重庆电子政务网站建设评价:普通市民办事的真实体验与吐槽

对重庆电子政务网站建设评价:普通市民办事的真实体验与吐槽

说实话,以前我对“电子政务”这四个字挺无感的,总觉得那是给领导看的,跟我们老百姓没啥关系。直到前阵子,我老家在重庆的亲戚想办个居住证续签,让我帮忙在网上查查流程。这一查不要紧,我算是真正体会到了现在对重庆电子政务网站建设评价里那些褒贬不一的原因。今天不整那…

发布时间:2026/7/8 17:59:58
STM32与LV3296条码扫描模块的硬件集成与优化

STM32与LV3296条码扫描模块的硬件集成与优化

1. LV3296与STM32F415ZG硬件组合解析LV3296作为一款高性能条码扫描模块,与STM32F415ZG微控制器的组合在嵌入式数据采集领域堪称经典配置。这套组合的核心优势在于LV3296提供了工业级的条码识别能力,而STM32F415ZG则赋予了系统强大的数据处理和通信扩展能…

发布时间:2026/7/8 18:00:08
高端品牌网站建设杭州怎么避坑?老设计师掏心窝子说点真话

高端品牌网站建设杭州怎么避坑?老设计师掏心窝子说点真话

上周三凌晨两点,我刚改完第十版稿子,咖啡都凉透了。客户发微信说感觉不对,要那种“大气又低调”的感觉。我盯着屏幕笑了,这词儿我听了三年,每次听都想把键盘砸了。今天不聊虚的,聊聊在高端品牌网站建设杭州这块地里,到底该怎么选,怎么避坑。很多老板一上来就问:“做个…

发布时间:2026/7/8 18:56:19
试述网站建设的流程,普通人怎么避坑不花冤枉钱

试述网站建设的流程,普通人怎么避坑不花冤枉钱

今天咱们不聊虚的。很多人一听到“做网站”,脑子里就是那一堆代码,什么HTML、CSS、PHP,听得头都大了。其实吧,真没那么复杂。我就把网站建设这事儿,当成装修房子来给你讲。你想想,你要住进一个新家,是不是得先想好:我要几居室?风格是北欧还是中式?预算多少?网站建设…

发布时间:2026/7/8 18:55:37
别瞎折腾!网站建设好怎么发布?老鸟血泪教训全在这

别瞎折腾!网站建设好怎么发布?老鸟血泪教训全在这

刚把网站搞完,心里那块大石头总算落地。但紧接着就是更头疼的问题:网站建设好怎么发布?我上次就是太心急,直接上传代码,结果域名解析没生效,白忙活一周。今天就把我踩过的坑,还有那些真金白银买来的教训,全掏出来给你们看看。别嫌啰嗦,这都是真话。先说域名和服务器。…

发布时间:2026/7/8 18:54:45
别被忽悠了,网站建设套模板下载真的能省钱?我的血泪教训

别被忽悠了,网站建设套模板下载真的能省钱?我的血泪教训

想快速搭建网站又心疼高昂的开发费?这篇内容直接告诉你如何用最低成本搞定企业官网,避开那些让人头秃的技术坑。去年这时候,我为了那个做建材生意的表弟搞网站,差点没把头发薅秃。表弟是个实在人,手里有厂子,但不懂技术,开口就要个“大气、高端、响应式”的网站。我去问…

发布时间:2026/7/8 18:54:23
别被忽悠了!揭秘网站建设大公司排名背后的真相与避坑指南

别被忽悠了!揭秘网站建设大公司排名背后的真相与避坑指南

说实话,每次看到有人拿着“全国网站建设大公司排名”的榜单来问我,我都想笑。这年头,找个靠谱的公司比找对象还难。很多老板一上来就问:“谁排第一?谁最贵?” 我通常直接回一句:排名全是广告费堆出来的,信排名不如信口碑。今天咱不整那些虚头巴脑的理论,就聊聊我在这一…

发布时间:2026/7/8 18:53:55
别再去百度瞎搜了,江苏省住房建设厅网站办事指南(附避坑经验)

别再去百度瞎搜了,江苏省住房建设厅网站办事指南(附避坑经验)

跑断腿、排长队、材料反复退?想查个资质、办个许可证,却在各种乱七八糟的第三方网站里迷路,最后发现还得去官方渠道?这篇就是给你省时间的。读完这篇,你不仅能找到最靠谱的入口,还能避开那些让你头秃的常见雷区,直接搞定你最关心的业务。说实话,以前我也觉得政府网站肯…

发布时间:2026/7/8 18:51:40
别光看栖霞建设官方网站,买房这事儿得自己多长点心

别光看栖霞建设官方网站,买房这事儿得自己多长点心

前两天有个朋友急匆匆找我,说在栖霞建设官方网站上看了几个盘,觉得参数挺漂亮,想赶紧下手。我让他把户型图发我看看,他回了一句“网上说的都那样,还能有假?”我差点没忍住笑出声。现在的房地产营销,那是真的卷,网页做得光鲜亮丽,VR看房做得跟真的一样,但真到了签合同…

发布时间:2026/7/8 0:00:00
渭南网站建设wifi 避坑指南:别让你的门店流量在离线时白白流失

渭南网站建设wifi 避坑指南:别让你的门店流量在离线时白白流失

很多老板花大价钱搞了个高大上的官网,结果访客来了转两圈就走了。这钱花得冤不冤?其实问题不在页面丑,而在你没接住流量。这篇内容直接告诉你,怎么通过优化网站细节,把过客变成回头客,顺便聊聊怎么利用本地生活痛点提升转化率。咱们先说个扎心的事实。你花几千块请人做的…

发布时间:2026/7/8 0:00:34
搞大数据比赛网站建设,别光看模板,这坑我踩了个遍

搞大数据比赛网站建设,别光看模板,这坑我踩了个遍

凌晨三点,盯着屏幕里那个崩了又崩的后台,我差点把键盘砸了。不是夸张,是真的想砸。为了搞这个大数据比赛网站建设,我头发掉了一把,钱烧了一堆,最后发现,最难的从来不是代码,而是人心。很多人觉得,搞个比赛网站,找个外包,或者套个现成的模板,两天就能上线。天真。真…

发布时间:2026/7/8 0:02:36
做个人信息管理网站建设,这3个坑我踩了七年,你千万别再跳

做个人信息管理网站建设,这3个坑我踩了七年,你千万别再跳

做了七年建站,见过太多老板花大钱买模板,最后发现根本没法用。特别是现在大家都讲究数据隐私,想搞个个人信息管理网站建设,结果越搞越乱。这篇文不整虚的,直接说怎么把这套系统落地,让你自己的数据真正听话。先说个真事儿。去年有个做自由职业的朋友找我,他说想建个网站…

发布时间:2026/7/8 14:09:51
杨凌规划建设局网站怎么查最新规划?老杨说点大实话

杨凌规划建设局网站怎么查最新规划?老杨说点大实话

杨凌规划建设局网站你是不是也遇到过这种情况?想看看自家旁边要修路,还是建公园。翻遍了手机,搜出来的全是几年前的旧闻。或者好不容易找到个入口,页面加载慢得像蜗牛。心里那个急啊,真的,懂的人都懂。我是老杨,在杨凌混了十几年,跟这行打交道不少。今天不跟你扯那些虚…

发布时间:2026/7/8 12:11:30
杭州网站建设 seo 避坑指南:别被那些只会套模板的忽悠了

杭州网站建设 seo 避坑指南:别被那些只会套模板的忽悠了

昨天半夜两点,我还在改一个客户的后台,咖啡都凉透了。这哥们儿是做机械配件的,在余杭那边,找的前一家公司花了八千块做了个站,结果上线一个月,百度连个影子都没有。他急得给我打电话,说是不是被黑了。我让他把链接发过来,打开一看,好家伙,那代码乱得跟刚被猫抓过的毛…

发布时间:2026/7/8 4:42:51
建站7年才悟出的网站建设思路,别再花冤枉钱了

建站7年才悟出的网站建设思路,别再花冤枉钱了

做建站这行整整7年了。 见过太多老板花几万块, 最后做出来的网站像个垃圾场。 今天不整那些虚头巴脑的术语。 就聊聊我踩过的坑, 和真正能落地的网站建设思路。很多老板一上来就问: “多少钱能做个高大上的?” 我通常直接劝退。 因为方向错了, 你给再多钱也是打水漂。 真正…

发布时间:2026/7/8 9:56:13
合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

做企业官网最怕什么?不是技术难,是交钱后没人管,或者上线一个月连个访客都没有。这篇东西不扯虚的,直接告诉你怎么在合肥找个靠谱的团队,或者自己怎么避坑。先说个大实话,我在合肥混这行五年多,见过太多老板因为贪便宜吃大亏。你去百度搜“合肥的网站建设”,出来一堆报…

发布时间:2026/7/8 3:06:40
别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

做这行久了,心里就憋着一股火。每次看到客户拿着网上抄来的模板,问我能不能做成“苹果官网”那种效果。我就想笑。真的,太想笑了。今天咱不整那些虚头巴脑的专业术语。就聊聊德州网站建设里,那些让人头秃的真实事儿。我有个客户,老张。他是做德州本地建材的,实在人。当初…

发布时间:2026/7/8 11:22:51