栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

机器学习之决策树算法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

机器学习之决策树算法

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")

运行结果如图

6、决策树总结

优点:

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

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

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

流程分析

获取数据数据处理(要根据实际数据是否需要,对本问题来说肯定是需要的)

    缺失值的处理特征值–>字典类型
划分数据集合特征工程:字典特征的抽取决策树预估器流程模型评估
代码如下
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()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768105.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号