手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

决策树API、泰坦尼克号生存预测案例

时间:2021/3/31 18:27:41|来源:|点击: 次

一、决策树API

在sklearn中使用sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None)构建决策树

其中:

  • criterion
    • 特征选择标准
    • "gini"或者"entropy",前者代表基尼系数,后者代表信息增益。一默认"gini",即CART算法。
  • min_samples_split
    • 内部节点再划分所需最小样本数
    • 这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。我之前的一个项目例子,有大概10万样本,建立决策树时,我选择了min_samples_split=10。可以作为参考。
  • min_samples_leaf
    • 叶子节点最少样本数
    • 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。之前的10万样本项目使用min_samples_leaf的值为5,仅供参考。
  • max_depth
    • 决策树最大深度
    • 决策树的最大深度,默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间
  • random_state
    • 随机数种子

二、泰坦尼克号生存预测案例

代码:

import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer


# 数据获取
titan_data = pd.read_csv('./titan/train.csv')

# 数据预处理
x = titan_data[["Pclass", "Sex", "Age"]]
y = titan_data["Survived"]
# 填充空值
x['Age'].fillna(x['Age'].mean(),inplace=True)
# 数据分割
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22)

# 将pclass和性别进行特征提取,也就是转换为数字
transfer = DictVectorizer(sparse=True)
x_train = transfer.fit_transform(x_train.to_dict(orient="records"))
x_test = transfer.fit_transform(x_test.to_dict(orient="records"))

# 机器学习
estimator = DecisionTreeClassifier(criterion="entropy",max_depth=13)
estimator.fit(x_train, y_train)

# 模型评估
estimator.score(x_test,y_test)

 

训练集数据来自kaggle平台: https://www.kaggle.com/c/titanic/overview

Copyright © 2002-2019 某某自媒体运营 版权所有