机器学习之决策树算法

1、认识决策树?

决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,就是利用这类结构分割数据的一种分类学习方法。是帮助我们进行高效决策分析的一种方法。

2、信息论基础(信息熵、信息增益)

  • 信息:消除随机不定性的东西(信息论创始人说的:香农)
  • 信息的衡量:使用信息熵,反应信息量的多少
  • 信息熵的定义
  • 决策树的划分依据之一 – 信息增益

3、决策树API

sklearn.tree.DecisionTreeClassifier(criterion="gini",max_depth=None,random_state=None)
- 决策树分类器
- criterion:默认是"gini",也可以选择信息增益的熵“entropy”
- max_depth:决策树的深度大小(不能太大,防止过拟合)
- random_state:随机树种子

4、决策树算法对莺尾花分类

from sklearn.datasets import load_iris,fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.tree import DecisionTreeClassifier
import ssl

def decision_iris():
    """
    1)、获取数据
    2)、数据划分
    3)、数据特征提取(该步骤在本例中不需要)
    4)、使用决策树预估器进行分类
    5)、模型的选择与调优
    6)、模型评价
    :return:
    """
    # 1)、获取数据
    iris = load_iris()
    # 2)、数据划分
    x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target)
    # 3)、使用决策树预估器进行分类
    estimator = DecisionTreeClassifier(criterion="entropy")
    estimator.fit(x_train,y_train)
    # 4)、模型评价
    """评估方法1:直接比对真实值和预测值"""
    y_predict = estimator.predict(x_test)
    print("y_predict:\n", y_predict)
    print("直接比对真实值和预测值:\n", y_test == y_predict)
    """评估方法2:计算准确率"""
    score = estimator.score(x_test, y_test)  # 相当于计算了预估器的准确率,因为这里本来是完全一致的
    print("准确率:\n", score)
    return
    
if __name__ == '__main__':
    # knn_iris()
    ssl._create_default_https_context = ssl._create_unverified_context
    # nb_news()
    decision_iris()

准确率:
0.9210526315789473
可以可以将该结果与KNN算法进行比较

5、决策树的可视化API

  • 保存树的结构到dot文件
sklearn.tree.export_graphviz()# 该函数能够导出dot格式
- tree.export_graphviz(estimator,out_file="tree.dot",feature_names=["age","pclass "]) 
  • 下载支持dot插件,你点开那个文件,pycharm 会自动让你下载
 # 可视化决策树,直接把这一部分加入到decision_iris()中即可
    export_graphviz(estimator, out_file="iris_tree.dot")

运行结果如图

机器学习之决策树算法_第1张图片

6、决策树总结

  • 优点:
    1. 简单的理解和解释,树木的可视化;
    2. 可视化,可解释能力强;
  • 缺点:
    决策树学习者可以创建不能很好地推广数据过于复杂的数据,这被称作为过拟合;
  • 改进:
    1. 减枝cart算法(决策树API当中已经实现,随机森林参数调优有相关介绍)
    2. 随机森林

ps:在企业重要决策中,由于决策树有很好的分析能力,在决策过程中应用较多,可以选择特征

7、泰坦尼克号案例(点击此处下载数据)密码:rtp0

流程分析

  • 获取数据
  • 数据处理(要根据实际数据是否需要,对本问题来说肯定是需要的)
    1. 缺失值的处理
    2. 特征值–>字典类型
  • 划分数据集合
  • 特征工程:字典特征的抽取
  • 决策树预估器流程
  • 模型评估
    代码如下
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier,export_graphviz
from sklearn.feature_extraction import DictVectorizer
import pandas as pd


def titanic_demo():
    # 1)、获取数据
    titanic = pd.read_csv("/Users/dengzhao/Desktop/数据集/titanic/train.csv")
    # 2)、筛选特征值和目标值
    x = titanic[["Pclass","Age","Sex"]]
    y = titanic["Survived"]
    # 3)、缺失值处理
    x["Age"].fillna(x["Age"].mean(),inplace=True)
    # 4、转换成字典
    x = x.to_dict(orient="records")

    # 5)、数据集的划分
    x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=22)# random_state随机数种子
    # 6)、字典特征抽取
    transfer = DictVectorizer()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    # 7)、转换器
    estimator = DecisionTreeClassifier(criterion="entropy",max_depth=8)
    estimator.fit(x_train, y_train)
    # 8)、模型评价
    """评估方法1:直接比对真实值和预测值"""
    y_predict = estimator.predict(x_test)
    print("y_predict:\n", y_predict)
    print("直接比对真实值和预测值:\n", y_test == y_predict)
    """评估方法2:计算准确率"""
    score = estimator.score(x_test, y_test)  # 相当于计算了预估器的准确率,因为这里本来是完全一致的
    print("准确率:\n", score)
    # 9)、可视化决策树
    export_graphviz(estimator, out_file="titanic_tree.dot",feature_names=transfer.get_feature_names())
    return

if __name__ == '__main__':
    titanic_demo()

你可能感兴趣的:(机器学习,决策树,机器学习,算法)