数学建模--决策树的预测模型的Python实现

目录

1.算法流程简介

2.算法核心代码

3.算法效果展示

1.算法流程简介

复制代码
"""
决策树的应用:对泰坦尼克号数据集成员进行预测生死
算法流程还是比较简单的,简单学习一下决策树跟着注释写即可
文章参考:https://zhuanlan.zhihu.com/p/133838427
算法种遇上sklearn的函数还是比较多的,请将sklearn函数更新到最新
更新代码如下所示:
pip install --upgrade sklearn
"""

2.算法核心代码

复制代码
#首先导入需要的包
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.feature_extraction import  DictVectorizer
import pandas as pd

titan= pd.read_csv(r'C:\Users\Zeng Zhong Yan\Desktop\train.csv')
# 处理数据,找出特征值和目标值
x = titan[['Pclass', 'Age', 'Sex']]
y = titan['Survived']
print(x)
# 缺失值处理
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)
# 进行处理(特征工程)
dict = DictVectorizer(sparse=False)
x_train = dict.fit_transform(x_train.to_dict(orient="records"))
dict = DictVectorizer(sparse=False)
x_test = dict.fit_transform(x_test.to_dict(orient='records'))
print(dict.get_feature_names_out())
#X_test = vec.fit_transform(X_features)
print(x_train)
# 用决策树进行预测
dec = DecisionTreeClassifier()
dec.fit(x_train, y_train)
# 预测准确率
print("预测的准确率为:", dec.score(x_test, y_test))
# 导出决策树的结构
export_graphviz(dec, out_file=r"C:\Users\Zeng Zhong Yan\Desktop\py.vs\.vscode\数学建模\decision_tree.dot", feature_names=['Age', 'Pclass', 'Sex=female', 'Sex=male'])

算法最终取得的预测正确率:0.78-0.84左右
整体上来看波动还是比较大的
可能是我的数据集不够多,只有800来个,如果用真正的titanic数据集的话,大概会稳定在0.79-0.82之间

3.算法BUG解决

复制代码
由于现在各种函数库更新比较快,所以有的时候一个看似正常的函数会一直报错.
这个可能与你的库的版本有关,过高或者过低了,没能正确匹配上,我的建议是统一升级到最新版本

1.bug1:AttributeError: 'DictVectorizer' object has no attribute 'feature_names_out'
这个就是典型的版本不符合的问题.
我们需要做以下更改:
#老版本代码
dict = DictVectorizer(sparse=False)
x_test = dict.transform(x_test.to_dict(orient='records'))
print(dict.feature_names_out())
#新版本代码
dict = DictVectorizer(sparse=False)
x_test = dict.fit_transform(x_test.to_dict(orient='records'))
print(dict.get_feature_names_out())
#改完就不会报AttributeError: 'DictVectorizer' object has no attribute 'feature_names_out'

2.bug2:ValueError: Length of feature_names, 4 does not match number of features, 6
#老版本代码:
export_graphviz(dec, out_file=r"C:\Users\Zeng Zhong Yan\Desktop\py.vs\.vscode\数学建模\decision_tree.dot", feature_names=['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', 'sex=female', 'sex=male'])
#新版本代码:
export_graphviz(dec, out_file=r"C:\Users\Zeng Zhong Yan\Desktop\py.vs\.vscode\数学建模\decision_tree.dot", feature_names=['Age', 'Pclass', 'Sex=female', 'Sex=male'])
#解释:因为你原先报错提示你只有4个长度,却要容下6个特征类,这显然是不对的,但是我们发现Pclass=1st/2nd/3rd本质上就属于'Pclass',所以就简化成4个特征维度了
相关推荐
AIFQuant33 分钟前
2026 全球股票/外汇/贵金属行情 API 深度对比:延迟、覆盖、价格与稳定性
python·websocket·ai·金融·mcp
Ray Liang1 小时前
吐血整理JSON-RPC2.0的原理与应用
python
㳺三才人子1 小时前
簡單的 語音助手
python·ai编程·pip
计算机毕业编程指导师1 小时前
【计算机毕设推荐】Python+Hadoop+Spark共享单车数据可视化分析系统 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·数据挖掘·spark·课程设计
2301_795099741 小时前
golang如何在Gin中自定义验证器_golang Gin自定义验证器实现方法
jvm·数据库·python
计算机毕业编程指导师1 小时前
【计算机毕设】基于Hadoop的共享单车订单数据分析系统+Python+Django全栈开发 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·数据挖掘·spark·django
2301_766283442 小时前
如何在MongoDB GridFS中进行按文件大小(length)范围的查询
jvm·数据库·python
他是龙5512 小时前
71:Python安全 & 反序列化 & PYC反编译 & 格式化字符串安全
开发语言·python·安全
2601_956139422 小时前
文体娱媒品牌全案公司哪家强
大数据·人工智能·python
水木流年追梦2 小时前
【python因果库实战27】逆概率加权模型2
开发语言·python