day07——决策树

决策树

  • 一、认识决策树
  • 二、API
  • 三、案例:泰坦尼克号乘客生存预测
    • 1,题目概述
    • 2,分析
    • 3,代码
    • 4,保存树结构

一、认识决策树

决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法

举例:
day07——决策树_第1张图片
在对这些客户进行分类预测时,我们的划分可能是下面的样子
day07——决策树_第2张图片
那么我们怎么知道这些特征哪个放在最上面更好,这就是决策树要解决的问题

二、API

class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None, random_state=None)
# criterion : 默认是’gini’系数,也可以选择信息增益的熵’entropy’
# max_depth : 树的深度大小
# random_state : 随机数种子
# max_depth : 树的深度大小

三、案例:泰坦尼克号乘客生存预测

1,题目概述

titanic.csv 数据描述泰坦尼克号上的个别乘客的生存状态。其中包括旅客名单,数据集中的特征是票的类别,存活,乘坐班,年龄,登陆,home.dest,房间,票,船和性别。
1、乘坐班是指乘客班(1,2,3),是社会经济阶层的代表。
2、其中age数据存在缺失。

2,分析

  • 选择我们认为重要的几个特征 [‘pclass’, ‘age’, ‘sex’]
  • 对 age 填充缺失值
  • 特征进行one-hot编码处理(DictVectorizer)
  • x.to_dict(orient=“records”) 需要将数组特征转换成字典数据数据集划分
  • 决策树分类预测

3,代码

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

titan = pd.read_csv("titanic.csv")

# 数据的处理
x = titan[['pclass', 'age', 'sex']]
y = titan['survived']

# 缺失值需要处理,将特征当中有类别的这些特征进行字典特征抽取
x['age'].fillna(x['age'].mean(), inplace=True)

# 对 x 进行one-hot编码处理
# [{"pclass": "1st", "age": 29.00, "sex": "female"}, {}]
dict = DictVectorizer(sparse=False)
# 对于 x 转换成字典数据 x.to_dict(orient="records")
x = dict.fit_transform(x.to_dict(orient="records"))

# 分割训练集合测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)

# 进行决策树的建立和预测
dc = DecisionTreeClassifier(max_depth=5)
dc.fit(x_train, y_train)

print("预测的准确率为:", dc.score(x_test, y_test))

4,保存树结构

保存树的结构到dot文件

# 该函数能够导出DOT格式
sklearn.tree.export_graphviz() 
export_graphviz(estimator,out_file='tree.dot’,feature_names=[‘’,’’])

实操:将上述结果转换为树存入 dot 文件

from sklearn.tree import export_graphviz

export_graphviz(dc, out_file="./tree.dot", feature_names=['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', '女性', '男性'])

最后把 dot 文件的内容复制到 webgraphviz 网站,实现树结构可视化

你可能感兴趣的:(机器学习,决策树,机器学习,人工智能)