首页 > 其他分享 >机器学习-朴素贝叶斯

机器学习-朴素贝叶斯

时间:2023-02-14 09:11:44浏览次数:48  
标签:概率 机器 self 贝叶斯 类别 计算 np 朴素

###### 前言

* 朴素贝叶斯是一种基于贝叶斯定理的分类算法,属于生成式模型的范畴。它的基本思想是基于贝叶斯定理和特征独立性假设。它假设每个特征之间相互独立,因此名称为“朴素”。

* 在朴素贝叶斯分类中,我们假设给定数据点属于某个类别,可以通过对该类别中各个特征的条件概率进行乘积计算,以计算该数据点属于该类别的概率。最终,选择概率最大的类别作为该数据点的预测类别。

###### 公式

1. 贝叶斯定理:贝叶斯定理告诉我们如何计算某个事件发生的概率,即:

​		$P(A|B) = P(B|A) * P(A) / P(B)$

​		其中,P(A|B) 表示事件 A 在事件 B 发生的情况下发生的概率;P(B|A) 表示事件 B 在事件 A 发生的情况下发		生的概率;P(A) 表示事件 A 发生的概率;P(B) 表示事件 B 发生的概率

  2.特征独立性假设:朴素贝叶斯假设特征之间是独立的,即:

​		$P(x1, x2, ..., xn | y) = P(x1 | y) * P(x2 | y) * ... * P(xn | y)$

​		其中,xi 表示第 i 个特征,y 表示分类结果。

3. 极大似然估计:朴素贝叶斯使用极大似然估计来确定特征与分类结果之间的关系,即:

​		$P(y | x1, x2, ..., xn) = P(x1, x2, ..., xn | y) * P(y) / P(x1, x2, ..., xn)$

​		其中,P(y | x1, x2, ..., xn) 表示给定特征 x1, x2, ..., xn 时分类结果 y 的概率;P(y) 表示分类结果 y 的先验概		率;P(x1, x2, ..., xn) 表示特征 x1, x2, ..., xn 的先验概率。

###### 实现流程

1. 数据预处理:对数据进行清洗、格式化等处理,确保数据的可用性和有效性。
2. 特征抽取:从原始数据中抽取出有效的特征,用于后续的模型训练。
3. 计算先验概率:计算出每一个分类结果的先验概率,即该分类结果在样本中出现的频率。
4. 计算条件概率:对于每一个特征,计算出该特征在各个分类结果中出现的条件概率。
5. 计算后验概率:使用贝叶斯定理计算出后验概率,即在已知特征的情况下,每一个分类结果的概率。
6. 预测分类结果:选取后验概率最大的分类结果作为最终的预测结果。



###### 代码

import numpy as np
from collections import Counter

class NaiveBayes:
def init(self):
# 定义类的属性,初始化为None
self.X = None
self.y = None
self.classes = None
self.priors = None
self.cond_probs = None

def fit(self, X, y):
    # 存储训练数据
    self.X = X
    self.y = y
    # 获取分类类别
    self.classes = np.unique(y)
    # 计算先验概率
    self.priors = self._compute_priors()
    # 计算条件概率
    self.cond_probs = self._compute_cond_probs()

def _compute_priors(self):
    # 统计每个类别的样本数量
    classes_counts = Counter(self.y)
    # 计算总样本数量
    total_count = len(self.y)
    # 计算每个类别的先验概率
    priors = {c: count / total_count for c, count in classes_counts.items()}
    return priors

def _compute_cond_probs(self):
    # 计算特征数量
    n_features = self.X.shape[1]
    cond_probs = {}
    # 计算每个类别的条件概率
    for c in self.classes:
        # 获取每个类别的样本
        X_c = self.X[self.y == c]
        # 计算每个特征的均值和标准差
        means = np.mean(X_c, axis=0)
        stds = np.std(X_c, axis=0)
        # 将均值和标准差存储在字典中
        cond_probs[c] = (means, stds)
    return cond_probs

def predict(self, X):
    y_pred = []
    # 遍历所有的预测样本
    for x in X:
        scores = []
        # 遍历所有的类别
        for c, (mean, std) in self.cond_probs.items():
			# 计算每个特征在该类别下的概率密度值
			prob = np.exp(-0.5 * ((x - mean) / std) ** 2) / (np.sqrt(2 * np.pi) * std)
			# 计算概率密度值的乘积
			prob = np.prod(prob)
			# 乘上该类别的先验概率
			prob *= self.priors[c]
			scores.append(prob)
		# 预测该样本的类别
		y_pred.append(self.classes[np.argmax(scores)])
	return np.array(y_pred)

- `fit`函数:用于训练模型,接收训练数据`X`和目标值`y`,存储数据到对应属性中,计算先验概率和条件概率并存储到对应属性中。
- `_compute_priors`函数:用于计算先验概率。
- `_compute_cond_probs`函数:用于计算条件概率。
- `predict`函数:用于预测目标值,接收预测数据`X`,计算每个样本在每个类别下的概率,预测该样本的类别并返回预测结果。

标签:概率,机器,self,贝叶斯,类别,计算,np,朴素
From: https://www.cnblogs.com/alax-w/p/17118534.html

相关文章

  • 只需 3 步,人人都能搭建自己的 chatgpt 微信机器人
    大家好,我是徐公,大厂6年经验,CSDN博客专家。最近,ChatGpt很火,身边的人都在讨论,会不会成为下一个风口,像前几年互联网一样,迎来井喷式的发展。徐公我最近也是在密切关注,最近......
  • 机器学习算法:随机森林
    在经典机器学习中,随机森林一直是一种灵丹妙药类型的模型。该模型很棒有几个原因:与许多其他算法相比,需要较少的数据预处理,因此易于设置充当分类或回归模型不太容易过度......
  • 精致的白宫开源聊天机器人代码
    Lightbot争先部署那种可以响应用户请求的机器人的潮流也步入到了奥巴马总统的家——美国白宫。白宫在10月14号宣布开源其机器人代码,目的是为了使增加更加开放的合作......
  • 又花了半个小时将 ChatGPT 接入了钉钉机器人
    前面的文章给大家介绍了如何在个人微信中使用ChatGPT,但是大家都知道这种操作是有风险的,所以都让大家使用小号,今天再给大家介绍一下如何在钉钉中使用机器人来调戏AI。流......
  • 肯天螺杆清洗料:掌握如何在正常关机的情况下顺利重启机器
    UltraPurge™3615螺杆清洗料不仅可以在挤出吹塑和吹塑薄膜应用中快速更换颜色和去除碳化沉积物,还可以确保轻松快速地拔出螺杆并正确关闭机器。更多肯天脱模剂及肯天螺杆......
  • 机器学习
    Python科学计算生态系统和库NumPy(NumericalPython):Python科学计算的基础包pandas:提供了快速便捷处理结构化数据的大量数据结构和函数matplotlib:绘制图表和其它二维数据......
  • 机器学习-SVM
    前言SVM(支持向量机)是一种常用的机器学习算法,用于分类和回归分析。它的主要目的是寻找一个最优超平面,将不同属性的数据分成不同的类别。SVM是一种有效的分类器,因为它可以......
  • 【HMS Core】机器学习服务助力APP快速集成图像分割与上传功能
    ​1、介绍总览机器学习服务(MLKit)提供机器学习套件,为开发者使用机器学习能力开发各类应用,提供优质体验。得益于华为长期技术积累,MLKit为开发者提供简单易用、服务多样......
  • 【译】使用 ML.NET 进行机器学习 - 集群完整指南
    原文|NikolaM.Zivkovic翻译|郑子铭在之前的几篇文章中,我们探索了一些基本的机器学习算法。到目前为止,我们介绍了一些简单的回归算法,分类算法。我们使用ML.NET实......
  • 客服小宝图文机器人交互再升级:用户自助更上一层楼
    智能客服或的交互有多重要?对于顾客或客户来说,与智能客服交互的核心其实只有一点:少走弯路,解决问题。所以,如何高效应用智能客服,让它可以直接解决客户的疑问,很重要。美洽客服机......