chapter02 三种决策树模型:单一决策树、随机森林、GBDT(梯度提升决策树) 预测泰坦尼克号乘客生还情况
单一标准的决策树:会根每维特征对预测结果的影响程度进行排序,进而决定不同特征从上至下构建分类节点的顺序。
Random Forest Classifier:使用相同的训练样本同时搭建多个独立的分类模型,然后通过投票的方式,以少数服从多数的原则做出最终的分类决策。随机选取特征。
GBDT:按照一定次序搭建多个分类模型,模型之间存在依赖关系,一般,每一个后续加入的模型都需要对集成模型的综合性能有所贡献,最终期望整合多个弱分类器,搭建出具有更强分类能力的模型。
#coding=utf8 # 导入pandas用于数据分析。 import pandas as pd # 从sklearn.tree中导入决策树分类器。 from sklearn.tree import DecisionTreeClassifier # 使用随机森林分类器进行集成模型的训练以及预测分析。 from sklearn.ensemble import RandomForestClassifier # 使用梯度提升决策树进行集成模型的训练以及预测分析。 from sklearn.ensemble import GradientBoostingClassifier # 从sklearn.model_selection中导入train_test_split用于数据分割。 from sklearn.model_selection import train_test_split # 我们使用scikit-learn.feature_extraction中的特征转换器 from sklearn.feature_extraction import DictVectorizer # 依然使用sklearn.metrics里面的classification_report模块对预测结果做更加详细的分析。 from sklearn.metrics import classification_report titanic = pd.read_csv('./Datasets/Titanic/train.csv') # 机器学习有一个不太被初学者重视,并且耗时,但是十分重要的一环,特征的选择,这个需要基于一些背景知识。根据我们对这场事故的了解,sex, age, pclass这些都很有可能是决定幸免与否的关键因素。 print titanic.info() X = titanic[['Pclass', 'Age', 'Sex']] y = titanic['Survived'] # 对当前选择的特征进行探查。 X['Age'].fillna(X['Age'].mean(), inplace=True) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state = 33) vec = DictVectorizer(sparse=False) # 转换特征后,我们发现凡是类别型的特征都单独剥离出来,独成一列特征,数值型的则保持不变。 X_train = vec.fit_transform(X_train.to_dict(orient='record')) # 同样需要对测试数据的特征进行转换。 X_test = vec.transform(X_test.to_dict(orient='record')) # 使用默认配置初始化单一决策树分类器。 dtc = DecisionTreeClassifier() # 使用分割到的训练数据进行模型学习。 dtc.fit(X_train, y_train) # 用训练好的决策树模型对测试特征数据进行预测。 y_predict = dtc.predict(X_test) # 使用随机森林分类器进行集成模型的训练以及预测分析。 rfc = RandomForestClassifier() rfc.fit(X_train, y_train) rfc_y_pred = rfc.predict(X_test) # 使用梯度提升决策树进行集成模型的训练以及预测分析。 gbc = GradientBoostingClassifier() gbc.fit(X_train, y_train) gbc_y_pred = gbc.predict(X_test) print dtc.score(X_test, y_test) # 输出更加详细的分类性能。 print classification_report(y_predict, y_test, target_names = ['died', 'survived']) # 输出随机森林分类器在测试集上的分类准确性,以及更加详细的精确率、召回率、F1指标。 print 'The accuracy of random forest classifier is', rfc.score(X_test, y_test) print classification_report(rfc_y_pred, y_test) # 输出梯度提升决策树在测试集上的分类准确性,以及更加详细的精确率、召回率、F1指标。 print 'The accuracy of gradient tree boosting is', gbc.score(X_test, y_test) print classification_report(gbc_y_pred, y_test)
单一决策树结果:
随机森林,GDBT结果:
预测性能: GDBT最佳,随机森林次之
一般,工业界为了追求更加强劲的预测性能,使用随机森林作为基线系统(Baseline System)。
分类:
深度学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)