赞
踩
目录
泰坦尼克号沉没是历史上最臭名昭着的沉船之⼀。 1912年4⽉ 15⽇ , 在她的处⼥航中, 泰坦尼克号在与冰⼭相撞后沉没, 在2224名乘客和机组⼈员中造成1502⼈死亡。 这场耸⼈听闻的悲剧震惊了国际社会, 并为船舶制定了更好的安全规定。 造成海难失事的原因之⼀是乘客和机组⼈员没有⾜够的救⽣艇。 尽管幸存下沉有⼀些运⽓因素, 但有些⼈⽐其他⼈更容易⽣存, 例如妇⼥, ⼉童和上流社会。 在这个案例中, 我们要求您完成对哪些⼈可能存活的分析。 特别是,我们要求您运⽤机器学习⼯具来预测哪些乘客幸免于悲剧。
案例: https://www.kaggle.com/c/titanic/overview
我们提取到的数据集中的特征包括票的类别, 是否存活, 乘坐班次, 年龄, 登陆home.dest, 房间, 船和性别等。
数据: http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt
1.criterion
特征选择标准
"gini"或者"entropy", 前者代表基尼系数, 后者代表信息增益。 ⼀默认"gini", 即CART算法。
2.min_samples_split
内部节点再划分所需最⼩样本数
这个值限制了⼦树继续划分的条件, 如果某节点的样本数少于min_samples_split, 则不会继续再尝试选择最优特征来进⾏划分。 默认是2.如果样本量不⼤, 不需要管这个值。 如果样本量数量级⾮常⼤, 则推荐增⼤这个值。 我之前的⼀个项⽬例⼦, 有⼤概10万样本, 建⽴决策树时, 我选择了min_samples_split=10。可以作为参考。
3.min_samples_leaf
叶⼦节点最少样本数
这个值限制了叶⼦节点最少的样本数, 如果某叶⼦节点数⽬⼩于样本数, 则会和兄弟节点⼀起被剪枝。默认是1,可以输⼊最少的样本数的整数, 或者最少样本数占样本总数的百分⽐。 如果样本量不⼤, 不需要管这个值。 如果样本量数量级⾮常⼤, 则推荐增⼤这个值。 之前的10万样本项⽬使⽤min_samples_leaf的值为5, 仅供参考。
4.max_depth
决策树最⼤深度
决策树的最⼤深度, 默认可以不输⼊, 如果不输⼊的话, 决策树在建⽴⼦树的时候不会限制⼦树的深度。⼀般来说, 数据少或者特征少的时候可以不管这个值。 如果模型样本量多, 特征也多的情况下, 推荐限制这个最⼤深度, 具体的取值取决于数据的分布。 常⽤的可以取值10-100之间。
5.random_state
随机数种⼦
2.1 确定特征值,目标值
2.2 缺失值处理
2.3 数据集划分
特征中出现类别符号, 需要进⾏one-hot编码处理(DictVectorizer) ;x.to_dict(orient="records") 需要将数组特征转换成字典数据。
决策树API当中, 如果没有指定max_depth那么会根据信息熵的条件直到最终结束。 这⾥我们可以指定树的深度来进⾏限制树的⼤⼩。
- # 1.获取数据
- # 2.数据基本处理
- # 2.1 确定特征值,目标值
- # 2.2 缺失值处理
- # 2.3 数据集划分
- # 3.特征工程(字典特征抽取)
- # 4.机器学习(决策树)
- # 5.模型评估
- import pandas as pd
- import numpy as np
- from sklearn.model_selection import train_test_split
- from sklearn.feature_extraction import DictVectorizer
- from sklearn.tree import DecisionTreeClassifier, export_graphviz
- # 1.获取数据
- titan =pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")
- # 2.数据基本处理
- # 2.1 确定特征值,目标值
- x = titan[["pclass", "age", "sex"]]
- y = titan["survived"]
- # 2.2 缺失值处理
- x['age'].fillna(value=titan["age"].mean(), inplace=True)
- # 2.3 数据集划分
- x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22, test_size=0.2)
- # 3.特征工程(字典特征抽取)
- x_train = x_train.to_dict(orient="records")
- x_test = x_test.to_dict(orient="records")
- transfer = DictVectorizer()
- x_train = transfer.fit_transform(x_train)
- x_test = transfer.fit_transform(x_test)
- # 4.机器学习(决策树)
- estimator = DecisionTreeClassifier(max_depth=15)
- estimator.fit(x_train, y_train)
- # 5.模型评估
- y_pre = estimator.predict(x_test)
- ret = estimator.score(x_test, y_test)
- print(ret)
- export_graphviz(estimator, out_file="./data/tree.dot", feature_names=['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', '女性', '男性'])
tree.export_graphviz(estimator,out_file='tree.dot’,feature_names=[‘’,’’])
dot文件当中的内容如下
那么这个结构不能看清结构, 所以可以在⼀个⽹站上显示
简单的理解和解释,树木可视化
决策树学习者可以创建不能很好地推广数据的过于复杂的树,容易发生过拟合。
剪枝cart算法
随机森林
参考:黑马程序员课程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。