美文网首页
泰坦尼克乘客生存预测

泰坦尼克乘客生存预测

作者: 疯狂的小强_94ee | 来源:发表于2019-04-11 23:01 被阅读0次

    决策树算法是经常使用的数据挖掘算法,这是因为决策树就像一个人脑中的决策模型一样,呈现出来非常直观。基于决策树还诞生了很多数据挖掘算法,比如随机森林(Random forest)。

    sklearn 中的决策树模型

    首先,我们需要掌握 sklearn 中自带的决策树分类器 DecisionTreeClassifier,方法如下:

    clf = DecisionTreeClassifier(criterion='entropy')

    到目前为止,sklearn 中只实现了 ID3 与 CART决策树,所以我们暂时只能使用这两种决策树,

    在构造 DecisionTreeClassifier 类时,其中有一个参数是 criterion,意为标准。它决定了构造的分类树是采用 ID3 分类树,还是 CART分类树,对应的取值分别是 entropy 或者 gini:

    entropy: 基于信息熵,也就是 ID3 算法,实际结果与 C4.5 相差不大;

    gini:默认参数,基于基尼系数。CART 算法是基于基尼系数做属性划分的,所以 criterion=gini 时实际上执行的是 CART 算法。

    Titanic 乘客生存预测

    泰坦尼克海难是著名的十大灾难之一,究竟多少人遇难,各方统计的结果不一。现在我们可以得到部分的数据,具体数据你可以从 GitHub下载:https://github.com/cystanford/Titanic_Data

    实现代码:

    import pandasas pd

    import numpyas np

    from sklearn.feature_extractionimport DictVectorizer

    from sklearn.treeimport DecisionTreeClassifier

    from sklearn.model_selectionimport cross_val_score

    from sklearnimport tree

    import graphviz

    def trans_sex(x):

    if x =='male':

    return 1

        else:

    return 0

    train_data = pd.read_csv('./../data/titanic/train.csv')

    test_data = pd.read_csv('./../data/titanic/test.csv', index_col=0)

    # 使用平均年龄来填充年龄中的 nan 值

    train_data['Age'].fillna(train_data['Age'].mean(), inplace=True)

    test_data['Age'].fillna(test_data['Age'].mean(), inplace=True)

    # 使用票价的均值填充票价中的 nan 值

    train_data['Fare'].fillna(train_data['Fare'].mean(), inplace=True)

    test_data['Fare'].fillna(test_data['Fare'].mean(), inplace=True)

    # 使用登录最多的港口来填充登录港口的 nan 值

    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_labels = train_data['Survived']

    test_features = test_data[features]

    dvec = DictVectorizer(sparse=False)

    train_features = dvec.fit_transform(train_features.to_dict(orient='record'))

    #train_features = dvec.transform(train_features.to_dict(orient='record'))

    print(dvec.feature_names_)

    # 构造 ID3 决策树

    clf = DecisionTreeClassifier(criterion='entropy')

    # 决策树训练

    clf.fit(train_features, train_labels)

    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(train_features, train_labels), 6)

    print(u'score 准确率为 %.4lf' % acc_decision_tree)

    # 使用 K 折交叉验证 统计决策树准确率

    print(u'cross_val_score 准确率为 %.4lf' % np.mean(cross_val_score(clf, train_features, train_labels, cv=10)))

    # 决策树可视化

    dot_data = tree.export_graphviz(clf, out_file=None)

    graph = graphviz.Source(dot_data)

    graph.view()

    相关文章

      网友评论

          本文标题:泰坦尼克乘客生存预测

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