认真是我们
参与这个社会的方式

泰坦尼克乘客生存情况

涉及知识

熵表明的是一个事物的混乱程度,熵越大,混乱程度越高,熵越小,表明混乱程度越低。信息熵的概念也是一样的,就是用来表明信息的混乱程度,我们选择一个树根的时候,最好的情况肯定是通过这个属性把数据分成几类以后,这些数据的熵越小越好,因为越小代表越有序,分类越清晰。那么我们要做的就是计算每个条件作为当前的根结点的信息熵,最终选一个最小的分类方法作为根节点,并以此类推,直到叶节点

信息增益

特征A对训练数据集D的信息增益g(D,A),定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差,即公式为:

信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度

决策树

随机森林


参考:

https://www.jianshu.com/p/3183dd02d579

https://www.jianshu.com/p/7066d52b8f18

https://blog.csdn.net/chibangyuxun/article/details/60465956

https://www.cnblogs.com/Lin-Yi/p/8970609.html


导入和查看数据结构

#导入pandas用于数据分析
import pandas as pd
#利用pandas的read_csv模块直接从互联网手机泰坦尼克号乘客数据
titan = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
#观察前几行数据
print(titan.head())
#查看数据统计特性
titan.info()

 

处理数据

有可能影响存活率的因素有’pclass’, ‘age’, ‘sex’,目标值是是否存活。

#处理数据,找出特征值和目标值
x = titan[['pclass', 'age', 'sex']]
y = titan['survived']

通过titan.info() 可以看到age是有缺失的,所以取平均值填充

# 缺失值处理
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)
# 进行处理(特征工程)特征-》类别-》one_hot编码
from sklearn.feature_extraction import DictVectorizer
dict = DictVectorizer(sparse=False)
x_train = dict.fit_transform(x_train.to_dict(orient="records"))
#print(dict.get_feature_names())
x_test = dict.transform(x_test.to_dict(orient="records"))

这里忘记了为什么测试集用dict.transform 而不是 dict.fit_transform …

#用决策树进行预测
dec = DecisionTreeClassifier(max_depth=5)
dec.fit(x_train, y_train)
# 预测准确率
print("预测的准确率:", dec.score(x_test, y_test))
# 导出决策树的结构
export_graphviz(dec, out_file="./tree.dot", feature_names=['年龄', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', '女性', '男性'])

未完待续

没有故事 也没有酒

点也没用点也没用