机器学习算法之--朴素贝叶斯(NB)

本文介绍了机器学习中的朴素贝叶斯分类器,包括分类技术的基础概念、朴素贝叶斯的原理、公式拆解以及模型训练过程。通过对文章特征分类、条件概率计算、模型评估等方面进行讲解,阐述了朴素贝叶斯如何用于文本分类,并讨论了AUC和ROC曲线在模型评估中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习算法很多,常见的有朴素贝叶斯,逻辑回归,决策树,等等今天让我们开启对朴素贝叶斯的认识。。。

分类技术认识:

定义:给定一个对象X,将其划分为到预定义好的某一个类别Yi中。

-输入 : X

-输出: Y (取值于有限集合{y1,y2,y3....yn})

应用:邮件是否垃圾,病人分类,点击是否有效等等。

通俗理解:

这里输入对象是一篇文章X,那么到底是军事还是财经就是Y。

常见的分类有二值分类(男女)和多值分类(文章分类{政治,体育,科幻})

 

分类任务解决流程:

新闻分类

一:特征分类:X = {昨日,是,市场...}  【特征分类的前提是进行中文分词】

二:特征选择:X ={国内,国外...}  【对中文分词后的结果进行关键词提取】。

三:模型选择:朴素贝叶斯分类器【选择分类模型】

四:训练数据准备:

五:模型训练:

六:预测(分类):

七:评测:得到评测效果

 

常见分类技术:

--概率选择器

  --NB

  --计算待选择的对象属于每个类别的概率,选择概率最大的类别作为输出

--空间分割

  --SVM :支持向量机 如下图:   缺点不适合样本量过大

上图有四种不同样本的类别,在空间上进行打点,经过学习得到一些线条,比如蓝色的部分,通过几条线,可以很清楚的把不同的样本分割开了,这就相当于在一个二

### 朴素贝叶斯分类器简介 朴素贝叶斯分类器是一种基于贝叶斯定理的监督学习算法,其核心假设是特征之间相互独立[^2]。尽管这一假设在现实中往往不成立,但该模型仍然表现出良好的性能,在许多实际应用中取得了不错的效果[^3]。 以下是关于如何设计和实现一个简单的朴素贝叶斯分类器实验的具体说明: --- ### 数据集准备 为了验证朴素贝叶斯分类器的有效性,可以选择经典的文本分类数据集(如垃圾邮件检测)或者数值型数据集(如鸢尾花数据集 Iris Dataset)。这里以鸢尾花数据集为例进行演示。 #### 加载数据 可以使用 `scikit-learn` 提供的数据加载工具快速获取鸢尾花数据集: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载数据集 data = load_iris() X, y = data.data, data.target # 将数据划分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) ``` --- ### 构建朴素贝叶斯分类器 利用 Python 中的 `sklearn.naive_bayes` 模块可以直接构建并训练朴素贝叶斯分类器。常见的变体包括高斯分布下的朴素贝叶斯(GaussianNB),适用于连续型变量。 #### 训练模型 以下是一个完整的代码示例: ```python from sklearn.naive_bayes import GaussianNB from sklearn.metrics import accuracy_score, classification_report # 初始化朴素贝叶斯分类器 model = GaussianNB() # 使用训练数据拟合模型 model.fit(X_train, y_train) # 对测试集进行预测 y_pred = model.predict(X_test) # 输出评估指标 print(f"Accuracy: {accuracy_score(y_test, y_pred):.2f}") print("\nClassification Report:") print(classification_report(y_test, y_pred)) ``` 上述代码实现了以下几个功能: 1. **初始化模型**:创建了一个基于高斯分布的朴素贝叶斯分类器实例。 2. **训练阶段**:通过调用 `.fit()` 方法完成模型参数的学习。 3. **预测与评估**:对测试集执行预测操作,并计算准确率以及详细的分类报告。 --- ### 自定义实现朴素贝叶斯分类器 如果希望深入了解内部机制,可以通过手动编写代码来实现朴素贝叶斯的核心逻辑。以下是针对二元分类问题的一个简化版本: #### 手动实现 ```python import numpy as np class NaiveBayesClassifier: def __init__(self): self.class_prior = {} self.feature_likelihoods = {} def fit(self, X, y): n_samples, n_features = X.shape classes = np.unique(y) # 计算先验概率 P(C_k) for c in classes: X_c = X[y == c] self.class_prior[c] = len(X_c) / n_samples # 计算条件概率 P(x_i|C_k),假定各特征服从正态分布 mean = np.mean(X_c, axis=0) var = np.var(X_c, axis=0) self.feature_likelihoods[c] = (mean, var) def predict(self, X): predictions = [] for x in X: posteriors = [] # 遍历每个类别的后验概率 P(C_k|x) for c, prior in self.class_prior.items(): likelihood = np.log(prior) # 基于正态分布的概率密度函数计算似然值 mean, var = self.feature_likelihoods[c] numerator = np.exp(-((x - mean)**2) / (2 * var)) denominator = np.sqrt(2 * np.pi * var) likelihood += np.sum(np.log(numerator / denominator)) posteriors.append(likelihood) # 取最大后验对应的类别作为预测结果 pred_class = np.argmax(posteriors) predictions.append(pred_class) return np.array(predictions) # 测试自定义实现 nb_custom = NaiveBayesClassifier() nb_custom.fit(X_train, y_train) y_pred_custom = nb_custom.predict(X_test) print(f"Custom Accuracy: {accuracy_score(y_test, y_pred_custom):.2f}") ``` 此部分展示了如何从零开始构建朴素贝叶斯分类器,涉及的关键概念包括先验概率 \(P(C_k)\) 和条件概率 \(P(x_i | C_k)\)[^2]。 --- ### 总结 以上提供了两种方式来理解和实践朴素贝叶斯分类器:一种是借助成熟的库(如 scikit-learn)快速搭建模型;另一种则是深入底层原理,自行编码实现基本框架。无论采用哪种方法,都可以加深对该算法的认识及其适用场景的理解。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值