美文网首页数据分析专栏
决策树,预测泰坦尼克号生存概率

决策树,预测泰坦尼克号生存概率

作者: Viva_Stephen | 来源:发表于2019-06-29 21:46 被阅读8次

    用id3算法,得出泰坦尼克号生存率预测:

    测试集与训练集:
    链接: https://pan.baidu.com/s/1AsWe81NfddCoWAwmHp97Iw 提取码: zp8x 复制这段内容后打开百度网盘手机App,操作更方便哦

    我们看下步骤:
    1、数据导入与探索
    使用 info() 了解数据表的基本情况:行数、列数、每列的数据类型、数据完整度;
    使用 describe() 了解数据表的统计情况:总数、平均值、标准差、最小值、最大值等;
    使用 describe(include=[‘O’]) 查看字符串类型(非数字)的整体情况;
    使用 head 查看前几行数据(默认是前 5 行);
    使用 tail 查看后几行数据(默认是最后 5 行)。

    import pandas as pd
    
    #数据加载
    train_data = pd.read_csv('./train.csv')
    test_data = pd.read_csv('./test.csv')
    #数据探索
    print(train_data.info())#了解数据表基本情况:行数RangeIndex、列数Data columns、每列的数据类型、数据完整度;
    print('_'*30)#分割线
    print(train_data.describe())#了解数据表的统计情况:总数cout、平均数mean、标准差std、最小值min、最大值max等;
    print('_'*30)#分割线
    print(train_data.describe(include=['O']))#查看字符串类型(非数字)的整体情况O为大写的哦
    print('_'*30)#分割线
    print(train_data.head())#前30行的情况
    print('_'*30)#分割线
    print(train_data.tail())
    

    2、数据清理与整合

    #缺失值为age年龄,fare船票价格,cabin船舱,Embarked为字符串
    #1、使用平均年龄来填充年龄中的nan值
    train_data['Age'].fillna(train_data['Age'].mean(),inplace=True)
    test_data['Age'].fillna(test_data['Age'].mean(),inplace=True)
    #2使用平均票价来填充票价中的nan值
    train_data['Fare'].fillna(train_data['Fare'].mean,inplace=True)
    test_data['Fare'].fillna(test_data['Fare'].mean,inplace=True)
    
    #查看Embarked的字段取值
    print(train_data['Embarked'].value_counts())
    #使用最多的s港口补齐缺失值
    train_data['Embarked'].fillna('S',inplace=True)
    test_data['Embarked'].fillna('S',inplace=True)
    

    3、特征选择

    #特征选择,除去无用信息
    features=['Pclass','Sex','Age','SibSp','Parch','Fare','Embarked']
    train_features=train_data[features]
    train_lables=train_data['Survived']
    test_features=train_data[features]
    

    4、将字符串转化成0/1字符替代
    特征选择是分类模型好坏的关键。选择什么样的特征,以及对应的特征值矩阵,决定了分类模型的好坏。通常情况下,特征值不都是数值类型,可以使用 DictVectorizer 类进行转化;

    #特征值里有一些字符串不方便计算,用DictVectorizer转换为字符串,如性别,可用1,2,代替male和female
    from sklearn.feature_extraction import DictVectorizer
    dvec=DictVectorizer(sparse=False)
    train_features=dvec.fit_transform(train_features.to_dict(orient='record'))#训练集特征矩阵
    

    5、模型建立,与测试集数据代入

    #决策树模型
    from sklearn.tree import DecisionTreeClassifier
    #构造id3决策树
    clf=DecisionTreeClassifier(criterion='entropy')
    #决策树训练
    clf.fit(train_features,train_lables)
    test_features=dvec.transform(test_features.to_dict(orient='record'))#测试集特征值矩阵
    

    6、交叉验证

    模型准确率需要考虑是否有测试集的实际结果可以做对比,当测试集没有真实结果可以对比时,需要使用 K 折交叉验证 cross_val_score;

    #k折交叉验证
    import numpy as np
    from sklearn.model_selection import cross_val_score
    #使用K折交叉验证 统计决策树准确率
    print(u'cross_val_score准确率为%.41f'%np.mean(cross_val_score(clf,train_features,train_lables,cv=10)))
    
    

    7、可视化
    Graphviz 可视化工具可以很方便地将决策模型呈现出来,帮助你更好理解决策树的构建。

    import graphviz
    from sklearn.tree import export_graphviz
    # 参数是回归树模型名称,不输出文件。
    dot_data = export_graphviz(clf,out_file=None)
    graph = graphviz.Source(dot_data)
    # render 方法会在同级目录下生成 Boston PDF文件,内容就是回归树。
    graph.view()
    

    完整代码请笑纳~~~

    # encoding=utf-8
    import pandas as pd
    
    #数据加载
    train_data = pd.read_csv('./train.csv')
    test_data = pd.read_csv('./test.csv')
    #数据探索
    print(train_data.info())#了解数据表基本情况:行数RangeIndex、列数Data columns、每列的数据类型、数据完整度;
    print('_'*30)#分割线
    print(train_data.describe())#了解数据表的统计情况:总数cout、平均数mean、标准差std、最小值min、最大值max等;
    print('_'*30)#分割线
    print(train_data.describe(include=['O']))#查看字符串类型(非数字)的整体情况O为大写的哦
    print('_'*30)#分割线
    print(train_data.head())#前30行的情况
    print('_'*30)#分割线
    print(train_data.tail())
    
    #数据清洗
    #缺失值为age年龄,fare船票价格,cabin船舱,Embarked为字符串
    #1、使用平均年龄来填充年龄中的nan值
    train_data['Age'].fillna(train_data['Age'].mean(),inplace=True)
    test_data['Age'].fillna(test_data['Age'].mean(),inplace=True)
    #2使用平均票价来填充票价中的nan值
    train_data['Fare'].fillna(train_data['Fare'].mean,inplace=True)
    test_data['Fare'].fillna(test_data['Fare'].mean,inplace=True)
    
    #查看Embarked的字段取值
    print(train_data['Embarked'].value_counts())
    #使用最多的s港口补齐缺失值
    train_data['Embarked'].fillna('S',inplace=True)
    test_data['Embarked'].fillna('S',inplace=True)
    
    
    #特征选择,出去无用信息
    features=['Pclass','Sex','Age','SibSp','Parch','Fare','Embarked']
    train_features=train_data[features]
    train_lables=train_data['Survived']
    test_features=train_data[features]
    
    #特征值里有一些字符串不方便计算,用DictVectorizer转换为字符串,如性别,可用1,2,代替male和female
    from sklearn.feature_extraction import DictVectorizer
    dvec=DictVectorizer(sparse=False)
    train_features=dvec.fit_transform(train_features.to_dict(orient='record'))#训练集特征矩阵
    print(dvec.feature_names_)
    
    #决策树模型
    from sklearn.tree import DecisionTreeClassifier
    #构造id3决策树
    clf=DecisionTreeClassifier(criterion='entropy')
    #决策树训练
    clf.fit(train_features,train_lables)
    test_features=dvec.transform(test_features.to_dict(orient='record'))#测试集特征值矩阵
    #决策树预测
    pred_labels=clf.predict(test_features)
    print(pred_labels)
    
    #得到决策树准确率
    # acc_decision_tree=round(clf.score(test_features,train_lables),6)
    # print(u'score准确率为%.41f'%acc_decision_tree)
    
    #k折交叉验证
    import numpy as np
    from sklearn.model_selection import cross_val_score
    #使用K折交叉验证 统计决策树准确率
    print(u'cross_val_score准确率为%.41f'%np.mean(cross_val_score(clf,train_features,train_lables,cv=10)))
    
    import graphviz
    from sklearn.tree import export_graphviz
    # 参数是回归树模型名称,不输出文件。
    dot_data = export_graphviz(clf,out_file=None)
    graph = graphviz.Source(dot_data)
    # render 方法会在同级目录下生成 Boston PDF文件,内容就是回归树。
    graph.view()
    
    

    数据存在百度云盘,可以自己练练手,理论不讲了。

    相关文章

      网友评论

        本文标题:决策树,预测泰坦尼克号生存概率

        本文链接:https://www.haomeiwen.com/subject/fgoucctx.html