| |
| |
| * 朴素贝叶斯是一种基于贝叶斯定理的分类算法,属于生成式模型的范畴。它的基本思想是基于贝叶斯定理和特征独立性假设。它假设每个特征之间相互独立,因此名称为“朴素”。 |
| |
| * 在朴素贝叶斯分类中,我们假设给定数据点属于某个类别,可以通过对该类别中各个特征的条件概率进行乘积计算,以计算该数据点属于该类别的概率。最终,选择概率最大的类别作为该数据点的预测类别。 |
| |
| |
| |
| 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`,计算每个样本在每个类别下的概率,预测该样本的类别并返回预测结果。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探