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


    目录

    1.算法流程简介

    2.算法核心代码

    3.算法效果展示

    1.算法流程简介

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

    2.算法核心代码

    1. #首先导入需要的包
    2. from sklearn.model_selection import train_test_split, GridSearchCV
    3. from sklearn.preprocessing import StandardScaler
    4. from sklearn.metrics import classification_report
    5. from sklearn.tree import DecisionTreeClassifier, export_graphviz
    6. from sklearn.feature_extraction import DictVectorizer
    7. import pandas as pd
    8. titan= pd.read_csv(r'C:\Users\Zeng Zhong Yan\Desktop\train.csv')
    9. # 处理数据,找出特征值和目标值
    10. x = titan[['Pclass', 'Age', 'Sex']]
    11. y = titan['Survived']
    12. print(x)
    13. # 缺失值处理
    14. x['Age'].fillna(x['Age'].mean(), inplace=True)
    15. # 分割数据集到训练集和测试集
    16. x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)
    17. # 进行处理(特征工程)
    18. dict = DictVectorizer(sparse=False)
    19. x_train = dict.fit_transform(x_train.to_dict(orient="records"))
    20. dict = DictVectorizer(sparse=False)
    21. x_test = dict.fit_transform(x_test.to_dict(orient='records'))
    22. print(dict.get_feature_names_out())
    23. #X_test = vec.fit_transform(X_features)
    24. print(x_train)
    25. # 用决策树进行预测
    26. dec = DecisionTreeClassifier()
    27. dec.fit(x_train, y_train)
    28. # 预测准确率
    29. print("预测的准确率为:", dec.score(x_test, y_test))
    30. # 导出决策树的结构
    31. 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'])
    1. 算法最终取得的预测正确率:0.78-0.84左右
    2. 整体上来看波动还是比较大的
    3. 可能是我的数据集不够多,只有800来个,如果用真正的titanic数据集的话,大概会稳定在0.79-0.82之间

    3.算法BUG解决

    1. 由于现在各种函数库更新比较快,所以有的时候一个看似正常的函数会一直报错.
    2. 这个可能与你的库的版本有关,过高或者过低了,没能正确匹配上,我的建议是统一升级到最新版本
    3. 1.bug1:AttributeError: 'DictVectorizer' object has no attribute 'feature_names_out'
    4. 这个就是典型的版本不符合的问题.
    5. 我们需要做以下更改:
    6. #老版本代码
    7. dict = DictVectorizer(sparse=False)
    8. x_test = dict.transform(x_test.to_dict(orient='records'))
    9. print(dict.feature_names_out())
    10. #新版本代码
    11. dict = DictVectorizer(sparse=False)
    12. x_test = dict.fit_transform(x_test.to_dict(orient='records'))
    13. print(dict.get_feature_names_out())
    14. #改完就不会报AttributeError: 'DictVectorizer' object has no attribute 'feature_names_out'
    15. 2.bug2:ValueError: Length of feature_names, 4 does not match number of features, 6
    16. #老版本代码:
    17. 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'])
    18. #新版本代码:
    19. 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'])
    20. #解释:因为你原先报错提示你只有4个长度,却要容下6个特征类,这显然是不对的,但是我们发现Pclass=1st/2nd/3rd本质上就属于'Pclass',所以就简化成4个特征维度了

  • 相关阅读:
    【GPTs分享】GPTs分享之Write For Me
    2022-08-23 第二小组 张明旭 前端学习记录
    基础算法:排序 二分 高精度 前缀和与差分 双指针算法 位运算 离散化 区间合并
    聚焦新一代技术平台,智能低代码平台成为新趋势
    react render的作用
    Python实战项目:并夕夕版飞机大战(源码分享)(文章较短,直接上代码)
    取色器实战(Qt含源码)
    elasticsearch源码解析TODO列表
    赞!图像几何三维重建代码实战教程来啦!深度计算+点云处理+网格重建优化+纹理贴图!
    java计算机毕业设计家庭安防系统MyBatis+系统+LW文档+源码+调试部署
  • 原文地址:https://blog.csdn.net/m0_71819746/article/details/132718111