数学建模--决策树的预测模型的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个特征维度了

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温柔济沧海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值