泰坦尼克号决策树预测(附:代码,常用参数,数据集)

操作环境:win10+python3.7,不同环境可能会有些许差异

  • 决策树API
    sklearn.tree.DecisionTreeClassifier(criterion=‘gini’,max_depth=None,random_state=None,class_weight=None,min_samples_split=2,min_samples_leaf=1)

  • 相关参数:
    1. criterion:默认是‘gini’系数,也可以选择信息增益的熵‘entropy’
    2. max_depth:树的深度大小:根节点到子节点层数,常用取值10-100之间。
    3. random_state:随机数种子
    4. class_weight:指定样本各类别权重,防止训练集某些类别样本量过多,导致训练集偏向这些类别。可以指定各个样本的权重,或者用"balanced"算法自动计算权重,类别少相应权重高。分布相对均匀,可以忽略该参数。
    5. min_samples_split:限制子树继续划分条件,如果样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。样本量不大的情况下,可以不用管这个值。样本量大,适当增大这个值,防止过拟合。
    6. min_samples_leaf:限制叶子节点最小样本数,如果某叶子节点小于样本数,则会和兄弟节点一起被剪枝。默认是1,可以输入最少样本整数,或者样本总数的百分比。

  • 决策树优缺点
    • 优点
      1. 简单的理解和解释,树木可视化
      2. 需要很少的数据准备,其他技术通常需要数据归一化
    • 缺点
      1. 过于复杂的树,使用决策树可能会存在过拟合。
    • 改进
      1. 剪枝cart算法(决策树API当中已经实现,随机森林参数调优有相关介绍)
      2. 随机森林

  • 决策树的本地保存dot-png转化工具
    • 下载GraphViz
      • 下载地址:https://graphviz.gitlab.io/_pages/Download/Download_windows.html
      • 下载文件:graphviz-2.38.msi
      • 设置环境变量:计算机右击-属性-高级-环境变量-系统变量-Path-编辑-新建(我这里是:C:\Program Files (x86)\Graphviz2.38\bin)
      • cmd终端命令示例:
        这里直接使用cd切换到安装目录了,可以在没设置环境变量下运行。转化命令:dot -Tpng dot文件 -o png文件
        C:\Users\Administrator>cd C:\Program Files (x86)\Graphviz2.38\bin
        C:\Program Files (x86)\Graphviz2.38\bin>dot -Tpng d:\桌面\tree.dot -o d:\桌面\tree.png
        
    • python安装,
      • cmd窗口:pip3 install graphviz

  • 生存预测代码示例:
    大家可以直接复制尝试,相关路径还请手动修改
    import pandas as pd
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.feature_extraction import DictVectorizer
    from sklearn.model_selection import train_test_split
    from sklearn.tree import export_graphviz
    import os
    
    def decision():
        """决策树泰坦尼克号数据预测生死"""
        os.chdir('d:/桌面')
        train = pd.read_csv('test.csv',sep=',')
        """处理数据,找出特征值和目标值"""
        x = train.loc[:,['Pclass','Age','Sex']]
        y = train.loc[:,['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)
        print(x_train)
        """进行处理(特征工程-特征-类别-one_hot编码)"""
        dict = DictVectorizer(sparse=False)
        x_train = dict.fit_transform(x_train.to_dict(orient='records'))     #pd转化字典:to_dict
        print(dict.get_feature_names())
        '''这里需要注意,为保证转化规则一致,直接使用transform,而不是使用fit_transform'''
        x_test = dict.transform(x_test.to_dict(orient='records'))
        """用决策树进行预测"""
        dec = DecisionTreeClassifier()
        dec.fit(x_train,y_train)
        '''
        监督学习估计器的predict方法是预测
        dec.predict(x_test)
        '''
        """预测准确率"""
        print('预测的准确率:{}'.format(dec.score(x_test,y_test)))
        '''决策树的结构本地保存'''
        '''feature_names参数也可以手动按照顺序指定为其他文字,第一个参数似乎分类器,这里即:dec'''
        export_graphviz(dec,out_file='./tree.dot',feature_names=dict.get_feature_names())
        return None
    
    if __name__ == '__main__':
        decision()
    

附:数据源链接
这里数据源测试集训练集直接分为两个文件,具体看大家使用喜欢了,或者也可以使用pandas的append方法进行数据聚合再分割。
链接:https://pan.baidu.com/s/1TlJOPLe5GCjTPoXd3M2GIQ
提取码:0nv1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值