当前位置: 首页 > article >正文

11.14 机器学习-朴素贝叶斯+决策树算法

# 贝叶斯底层逻辑 一个数据有可能是几种 结果 选一个概率最高的结果赋给它

# 朴素贝叶斯 假设各个特征之间全部独立 P(A*B*C*D*E)=P(A)*P(B)*P(C)*P(D)*P(E)

# A是特征向量 B是结果

# P(B|A)=P(A|B)*P(B)/P(A)

# P(A|X1,X2,X3,X4,X5)=P(X1,X2,X3,X4,X5|A)*P(A)/P(X1,X2,X3,X4,X5)

# 由于特征之间独立

# P(X1,X2,X3,X4,X5|A)=P(X1|A)*P(X2|A)*P(X3|A)*P(X4|A)*P(X5|A)*P(A)/(P(X1)*P(X2)*P(X3)*P(X4)*P(X5)) #这个式字就可以 用数据集计算出来了

# 拉普拉斯平滑系数 为了防止0概率的出现 这样即使 x2/A一个都没有也不会出现0概率的情况 这个概率要拿去乘的

# P(X2|A)= A发生的概率下x2发生的数量+1 / A发生的数量 + 有多少种X

# API

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from sklearn.naive_bayes import MultinomialNB

import joblib

import pandas as pd

from scipy.stats import mode

def naive_bayes1():

    # sklearn.naive_bayes.MultinomialNB()

    # estimator.fit(x_train, y_train)

    # y_predict = estimator.predict(x_test)

    X,y=load_iris(return_X_y=True)

    X_train,X_test,y_train,y_test=train_test_split(X,y,stratify=y,random_state=666,train_size=0.7)

    # 创建 朴素贝叶斯 预估器

    NB1=MultinomialNB()

    NB1.fit(X_train,y_train)

    score=NB1.score(X_test,y_test)

    print(score)

    # 保存模型

    # joblib.dump(NB1,"assets/model/NB_iris.pkl")

    flow1=[[5,3,2,4],[3,6,2,1],[6,2,4,2]]

    res=NB1.predict(flow1)

    print(load_iris().target_names[res])

    pass

def naive_bayes2():

    df1 = pd.read_csv("assets/csv/titanic.csv")

    x = df1[["age", "sex", "pclass"]]

    y = df1["survived"]

    # 计算 age 列的众数

    age_mode = mode(x["age"].dropna())[0]  # 使用 dropna() 去掉 NaN 值后计算众数

    # print(age_mode)

    # 用众数填充 age 列中的 NaN 值

    x["age"].fillna(age_mode, inplace=True)

    # 处理 性别字符串变为 数字

    x["sex"] = x["sex"].map({"female": 1, "male": 0}) #方式1

    # # 方式2

    # x2=x["sex"]=="female"

    # x["sex"]=x2

    # 处理 pclass字符串变为 数字

    x["pclass"] = x["pclass"].map({"1st": 1, "2nd": 2,"3rd":3})

    X_train,X_test,y_train,y_test=train_test_split(x,y,stratify=y,random_state=666,train_size=0.7)

    # 创建 朴素贝叶斯 预估器

    NB1=MultinomialNB()

    NB1.fit(X_train,y_train)

    score=NB1.score(X_test,y_test)

    print(score)

    # print(y)

if __name__=="__main__":

    # naive_bayes1()

    naive_bayes2()

    pass

# 1、决策节点

# 通过条件判断而进行分支选择的节点。如:将某个样本中的属性值(特征值)与决策节点上的值进行比较,从而判断它的流向。

# 2、叶子节点

# 没有子节点的节点,表示最终的决策结果。

# 3、决策树的深度

# 所有节点的最大层次数。

# 决策树具有一定的层次结构,根节点的层次数定为0,从下面开始每一层子节点层次数增加

# 4、决策树优点:

# ​      可视化 - 可解释能力-对算力要求低

#  5、 决策树缺点:

# ​      容易产生过拟合,所以不要把深度调整太大了。

# 基于信息增益决策树的建立 根据信息增益决定先判断谁 信息增益高的先判断

# 信息增益决策树倾向于选择取值较多的属性,在有些情况下这类属性可能不会提供太多有价值的信息,算法只能对描述属性为离散型属性的数据集构造决策树

# 信息熵描述的是不确定性。信息熵越大,不确定性越大。信息熵的值越小,则D的纯度越高。

# 算结果的信息熵 每个特征的信息增益=结果的信息熵 - 本身的信息熵

#  基于基尼指数决策树的建立(了解)

# API

# class sklearn.tree.DecisionTreeClassifier(....)

# 参数:

# criterion "gini" "entropy” 默认为="gini"

#   当criterion取值为"gini"时采用 基尼不纯度(Gini impurity)算法构造决策树,

#   当criterion取值为"entropy”时采用信息增益( information gain)算法构造决策树.

# max_depth int, 默认为=None  树的最大深度

# # 可视化决策树

# function sklearn.tree.export_graphviz(estimator, out_file="iris_tree.dot", feature_names=iris.feature_names)

# 参数:

#   estimator决策树预估器

#   out_file生成的文档

#     feature_names节点特征属性名

# 功能:

#     把生成的文档打开,复制出内容粘贴到"http://webgraphviz.com/"中,点击"generate Graph"会生成一个树型的决策树图

from sklearn.tree import DecisionTreeClassifier,export_graphviz

from sklearn.datasets import load_iris

from sklearn.preprocessing import StandardScaler

from sklearn.model_selection import train_test_split

def decision_tree_classifier():

    model1=DecisionTreeClassifier(criterion="entropy",max_depth=2) # criterion 构建决策树的方式 entropy 为信息增益方式 默认为gini方式 max_depth决策树的深度 默认为2

    X,y=load_iris(return_X_y=True)

    X_train,X_test,y_train,y_test=train_test_split(X,y,train_size=0.7,random_state=666)

    sacler1=StandardScaler()

    x_stand_train=sacler1.fit_transform(X_train)

    x_stand_test=sacler1.transform(X_test)

    model1.fit(x_stand_train,y_train)

    score= model1.score(x_stand_test,y_test)

    print(score)

    # 决策树可视化

    export_graphviz(model1,feature_names=load_iris().feature_names,out_file="assets/dot/iris_tree.dot")

   



 

if __name__=="__main__":

    decision_tree_classifier()

    pass


http://www.kler.cn/a/395006.html

相关文章:

  • 从H264视频中获取宽、高、帧率、比特率等属性信息
  • Android 项目依赖库无法找到的解决方案
  • Serverless架构在实时数据处理中的应用
  • 驱动开发系列13 - Linux tasklet用法介绍
  • uniapp在app模式下组件传值
  • Linux系统编程多线程之条件变量和信号量讲解
  • Mysql ACID实现原理
  • 链表(Linkedlist)
  • 实验二:Docker存储配置与管理
  • 简易的学生信息管理系统制作——C语言实现
  • STM32CubeMX学习笔记33---芯片因未选serial debug被锁住
  • Docker使用docker-compose一键部署nacos、Mysql、redis
  • 论文精读(笔记)
  • 入侵检测算法平台部署LiteAIServer视频智能分析平台行人入侵检测算法:科技守护安全的新篇章
  • Centos8 安装 JDK / Python / MySQL / Redis / Nginx
  • Leetcode Z字形变换
  • 【NLP优化】Ubuntu 20.04 下 源码安装 CasADi + Ipopt / acados
  • 【AI】【提高认知】通用人工智能才是目标:解析迁移学习与通用智能的挑战与前景
  • 启动QT时,出现找不到python27.dll的问题报错
  • 「QT」文件类 之 QFileSystemWatcher 文件系统监视器类
  • 开始使用 Elastic AI Assistant 进行可观察性和 Microsoft Azure OpenAI
  • fastadmin中动态下拉组件(SelectPage)的使用
  • 【golang-技巧】-自定义k8s-operator-by kubebuilder
  • ASP.NET MVC宠物商城系统
  • 【3D Slicer】的小白入门使用指南七
  • CPU的性能指标总结(学习笔记)