IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【温大机器学习笔记】-朴素贝叶斯 -> 正文阅读

[人工智能]【温大机器学习笔记】-朴素贝叶斯

朴素贝叶斯(Native Bayes)

法如其名,它是贝叶斯分类中,最简单也是最常见的分类算法。
它是以贝叶斯定理为基础
通常要理解这么几个概念
**先验概率:**根据以往经验和分析得到的概率, P ( Y ) P(Y) P(Y)
**后验概率:**根据已发生的事件来分析得到的概率, P ( Y ∣ X ) P(Y|X) P(YX)
**联合概率:**联合概率是在多元的概率分布中,多个随机变量分别满足各自条件的概率,数学符号: P ( X , Y ) 、 P ( X Y ) 、 P ( X ∩ Y ) P(X,Y)、P(XY)、P(X \cap Y) P(X,Y)P(XY)P(XY)也就是事件A和B同时发生的概率
举个例子:
在这里插入图片描述
我对一个陌生的朋友判断是否为好人
老子说:人之初性本善,那么我觉得他99%是好人,1%是坏人-先验概率
有一天,因为我没有去上课,结果他给任课老师把我举报了!
真坏!
这是我觉得他50%是好人,50%是坏人。-后验概率
黄老师给的公式:
在这里插入图片描述

朴素贝叶斯原理

判别模型和生成模型
监督学习分为生成方法(Generative approach)和判别方法(discriminative approach)
所学到的模型分别是
监督学习分为生成模型(Generative Model)和判别模型(discriminative Model)

在这里插入图片描述
朴素贝叶斯是典型的生成学习方法
生成方法由训练数据学习联合概率分布 P ( X , Y ) P(X,Y) P(X,Y),然后求得后验概率分布 P ( Y ∣ X ) P(Y|X) P(YX),即是求
P ( X , Y ) = P ( Y ) P ( X ∣ Y ) P(X,Y)=P(Y)P(X|Y) P(X,Y)=P(Y)P(XY)
最重要的假设:相互独立-所以叫native
在这里插入图片描述
C k C_k Ck?表示类别,k表示类别个数
如果给定Z的情况下,X和Y条件独立:
P ( X ∣ Z ) = P ( X ∣ Y , Z ) P(X|Z)=P(X|Y,Z) P(XZ)=P(XY,Z)
也可以表示为
P ( X , Y ∣ Z ) = P ( X ∣ Z ) P ( Y ∣ Z ) P(X,Y|Z)=P(X|Z)P(Y|Z) P(X,YZ)=P(XZ)P(YZ)

根据极大似然函数
在这里插入图片描述
在这里插入图片描述
这里后验概率最大等价于0-1损失函数期望风险最小
推导过程:
根据贝叶斯定理
在这里插入图片描述
计算起后验概率
在这里插入图片描述
将式1带入式2
在这里插入图片描述
在这里插入图片描述

实际案例

这个案例不好理解!
推荐一个好理解的【案例传送门

代码实现

贝叶斯分类器
GaussianNB高斯贝叶斯分类器,最常见,满足高斯分布
在这里插入图片描述
在这里插入图片描述

MultinomialNB多项贝叶斯分类器,条件概率分布满足多项式分布
BernoulliNB伯努利贝叶斯分类器,条件概率满足二项分布

基于scikit-learn的实现

import numpy as np

X = np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]])
y = np.array([1,1,1,2,2,2])
# 引入高斯朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB
# 实例化
clf = GaussianNB()
# 训练数据
clf.fit(X,y)
# 输入单个预测结果
print('-----predict result by predict-----')
print(clf.predict([[-0.8,-1]]))
print('-----predict result by predict_proba-----')
print(clf.predict_proba([[-0.8,-1]]))
print('-----predict result by predict_log_proba-----')
print(clf.predict_log_proba([[-0.8,-1]]))


输出结果:

-----predict result by predict-----
[1]
-----predict result by predict_proba-----
[[9.99999949e-01 5.05653254e-08]]
-----predict result by predict_log_proba-----
[[-5.05653266e-08 -1.67999998e+01]]

基于自写GaussianNB的高斯朴素贝叶斯numpy实现

import numpy as np
from sklearn import datasets

# 加载数据
iris = datasets.load_iris()

X = np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]])
y = np.array([1,1,1,2,2,2])
# 引入高斯朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB
# 实例化
clf = GaussianNB()
# 训练数据
clf.fit(X,y)
# 输入单个预测结果
print('-----predict result by predict-----')
print(clf.predict([[-0.8,-1]]))
print('-----predict result by predict_proba-----')
print(clf.predict_proba([[-0.8,-1]]))
print('-----predict result by predict_log_proba-----')
print(clf.predict_log_proba([[-0.8,-1]]))

# 基于GaussianNB的朴素贝叶斯numpy实现

# 先定义一个类
class NaiveBayes:

    def __init__(self):
        print('Gaussian naive bayes model!')

    def gaussian_pdf(self,x_test,x):

        """
        计算高斯正态分布下的条件概率
        params:
            x_test(array):
            x(array):同属于一个类别
        """
        temp1 = (x_test-x.mean(0))*(x_test-x.mean(0))
        temp2 = x.std(0) * x.std(0)

        return np.exp(-temp1 / (2 * temp2)) / np.sqrt(2 * np.pi * temp2)

    def fit(self,x_train,y_train):
        self.x_train = x_train
        self.y_train = y_train

    def predict(self,x_test,y_test=None):
        assert len(x_test.shape) == 2
        # 这里应该是y_test
        self.classes = np.unique(np.concatenate([x_test,y_test],0))
        pred_probs = []

        # 对于每一个输入,计算器处于每个类别的概率
        for i in self.classes:
            idx_i = self.y_train == i
            # 计算P(y)
            p_y= len(idx_i) / len(self.y_train)

            # 利用高斯概率密度函数计算P(x|y)

            p_x_y = np.prod(self.gaussian_pdf(x_test,self.x_train[idx_i]),1)

            # 计算x,y的联合概率,P(x|y)P(y)
            prob_i = p_y * p_x_y

            pred_probs.append(prob_i)
        pred_probs = np.vstack(pred_probs)

        # 去具有最高概率的类别
        label_idx = pred_probs.argmax(0)
        y_pred = self.classes[label_idx]
        if y_test is not None:
            self._score(y_test,y_pred)
        return y_pred

    def _score(self,y_test,y_pred):
        self.score = np.count_nonzero(y_test == y_pred)/len(y_test)





model = NaiveBayes()
model.fit(iris.data, iris.target)
print('GaussianNB train done!')
print(model.predict(np.array([4.4,3.2,1.3,0.2])))
#print(model.score(X,y))
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:30:37  更:2021-08-01 14:30:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/2 9:23:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码