决策树重要概念:
信息熵:信息越纯信息熵越小,信息越杂信息熵越大,决策树生成的原则就是不断减小信息熵的过程,而分支依据就是哪个变量提供信息增益(信息增益比,基尼系数)越大,就选择哪个变量作为分类依据
衡量信息熵变化大小的指标:信息增益,信息增益比,基尼系数(sklearn默认),三者的基本原则都是计算分支前后信息熵的变化,变化最大的将作为分支依据
算法:C4.5,CART等
1 import pandas as pd 2 from sklearn.feature_extraction import DictVectorizer 3 from sklearn.model_selection import train_test_split 4 from sklearn.tree import DecisionTreeClassifier # 决策树API 5 from sklearn.tree import export_graphviz # 导出树结构 6 def titan(): 7 '''决策树泰坦尼克生存预测''' 8 # 读入数据 9 titanic = pd.read_csv(r"E:360DownloadsSoftware ableauTableaudata itanic_passenger_list.csv") 10 # print(titanic.columns) 11 x = titanic[['pclass', 'age', 'sex']] 12 y = titanic['survived'] 13 14 # 处理年龄中的缺失值 15 x['age'].fillna(x['age'].mean(), inplace=True) 16 17 # 分割数据成训练集和数据集 18 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25) 19 20 # 进行特征处理,将分类型数据转换成one-host编码 21 dictv = DictVectorizer(sparse=False) 22 # x_train.to_dict(orient="records")将其转换为字典records将一行转换成一个字典 23 x_train = dictv.fit_transform(x_train.to_dict(orient="records")) 24 x_test = dictv.fit_transform(x_test.to_dict(orient="records")) 25 26 # 用决策树进行预测,max_depth要分几层,min_samples_split=2, min_samples_leaf=1,这两个参数用于剪枝 27 dec = DecisionTreeClassifier(max_depth=4) 28 dec.fit(x_train, y_train) 29 print('正确率:', dec.score(x_test, y_test)) 30 31 # 导出决策树的结构,需要安装graphviz,将dot文件转换为PDF、PNG 32 # export_graphviz(dec, out_file="./tree.dot") 33 34 35 if __name__ == "__main__": 36 titan()