朴素贝叶斯处理分类问题

基本含义:

朴素贝叶斯分类是一种基于贝叶斯定理的分类算法,贝叶斯定理是朴素贝叶斯算法的基础,用于计算在已知某些证据的情况下某一事件发生的概率。

公式参数:

贝叶斯定理的数学表达式如下:

朴素贝叶斯的关键假设是 特征之间相互独立。这意味着在给定类别标签的情况下,每个特征的出现与其他特征的出现是独立的。这一假设简化了计算,但在现实世界中很少完全成立。

即使特征之间并不独立,朴素贝叶斯仍然能提供很好的分类结果。

注意点:先验概率的解释

计算步骤:

1.数据准备

首先,需要有一组己标记的训练样本,每个样本都有一组特征和对应的类别 标签。这些样本将被用来构建分类模型。

2.计算先验概率

根据训练样本中每个类别出现的频率,计算每个类别的先验概率。先验 概率表示在没有其他信息的情况下,某个样本属于某个类别的概率。

3.计算条件概率

对于每个特征,计算在每个类别下的条件概率。条件概率表示在给定某 个类别的情况下,某个特征出现的概率。

4.计算后验概率

对于一个待分类的样本,根据已计算的先验概率和条件概率,计算它属 于每个类别的后验概率。后验概率表示在给定样本的情况下,某个类别的概率。

5.选择最大后验概率

根据计算得到的后验概率,选择具有最大后验概率的类别作为待分 类样本的类别。

6.输出结果

将待分类样本归为具有最大后验概率的类别,作为最终的分类结果。
朴素贝叶斯分类算法的核心假设是特征之间相互独立,即每个特征对于分类结果的贡献 是相互独立的 。这个假设使得计算条件概率变得简单,可以通过对每个特征的概率进行独立
估计来得到整体的条件概率。
朴素贝叶斯分类算法的优点包括简单易用、计算效率高、对于小样本数据也能表现良好 等。

代码实现:

示例

现在我以"电信银行卡诈骗的数据分析"为例,通过使用“精确率”,“准确率”,“召回率”和“F1分数”来评估。

①训练模型

模型保存为:naive_bayes_model.joblib

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix
import joblib  # 用于保存和加载模型

# 1. 读取数据
file_path = '电信银行卡诈骗的数据分析.csv'
data = pd.read_csv(file_path)

# 2. 特征和目标变量
X = data.drop(columns=['Fraud'])  # 假设 'Fraud' 是目标列
y = data['Fraud']

# 3. 划分训练集、验证集和测试集 (60% train, 20% val, 20% test)
X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.4, random_state=42)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)

# 4. 训练朴素贝叶斯模型
nb_model = GaussianNB()
nb_model.fit(X_train, y_train)

# 保存训练好的模型
model_filename = 'naive_bayes_model.joblib'
joblib.dump(nb_model, model_filename)
print(f"Model saved to {model_filename}")

# 5. 评估模型
def calculate_metrics(y_true, y_pred):
    accuracy = accuracy_score(y_true, y_pred)
    precision = precision_score(y_true, y_pred)
    recall = recall_score(y_true, y_pred)
    f1 = f1_score(y_true, y_pred)
    tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
    specificity = tn / (tn + fp)
    return accuracy, precision, recall, f1, specificity

# 在训练集、验证集和测试集上进行预测
y_train_pred = nb_model.predict(X_train)
y_val_pred = nb_model.predict(X_val)
y_test_pred = nb_model.predict(X_test)

# 计算每个数据集的评估指标
train_metrics = calculate_metrics(y_train, y_train_pred)
val_metrics = calculate_metrics(y_val, y_val_pred)
test_metrics = calculate_metrics(y_test, y_test_pred)

# 6. 创建 DataFrame 来展示评估结果
metrics_df = pd.DataFrame({
    'Dataset': ['训练集', '验证集', '测试集'],
    'Accuracy': [train_metrics[0], val_metrics[0], test_metrics[0]],
    'Precision': [train_metrics[1], val_metrics[1], test_metrics[1]],
    'Recall': [train_metrics[2], val_metrics[2], test_metrics[2]],
    'F1 Score': [train_metrics[3], val_metrics[3], test_metrics[3]],
    'Specificity': [train_metrics[4], val_metrics[4], test_metrics[4]]
})

# 打印结果
print(metrics_df)

②测试

import numpy as np
import joblib  # 用于加载模型

# 加载保存的模型
model_filename = 'naive_bayes_model.joblib'
loaded_model = joblib.load(model_filename)
print("Model loaded successfully.")

# 假设新数据的格式和训练数据一致
# 新数据的特征顺序为: Distance1, Distance2, Ratio, Repeat, Card, Pin, Online
new_data = np.array([[57.877857, 0.31114, 1.94594, 1, 1, 1, 0],  # 样本 1
                     [44.199036, 0.566463, 2.222763, 1, 1, 1, 0]])  # 样本 2

# 使用加载的模型进行预测
new_predictions = loaded_model.predict(new_data)

# 打印预测结果
print("Predicted classes for new data:", new_predictions)

  • Predicted classes for new data: [0 0]:表示模型对你提供的两条新数据样本都预测为0
    • 第一个样本的预测结果是 0
    • 第二个样本的预测结果也是 0

在这个二分类问题中,如果 0 代表“非欺诈”(正常行为),1 代表“欺诈”(异常行为),那么模型认为这两条新数据都属于“非欺诈”。

因此,这两个预测结果表示模型认为这两个新样本都是“非欺诈”的交易。

资源获取:

上述使用的表格如下:

通过网盘分享的文件:电信银行卡诈骗的数据分析.zip
链接: https://pan.baidu.com/s/1w6OrRLrpUeb7SL1XYEgR3g?pwd=capu 提取码: capu
--来自百度网盘超级会员v5的分享

好啦,希望能够帮助到大家!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还不秃顶的计科生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值