机器学习之贝叶斯定理

机器学习之贝叶斯定理

一、贝叶斯基本概念

1. 什么是贝叶斯定理?

在信息和条件有限的情况下,基于过去的数据,通过动态调整的方法,帮助我们一步步预测出事件发生的接近真实的概率。

其根本思想是【后验概率 = 先验概率 * 调整因子】,其中【先验概率】就是在信息不完整情况下做出的主观概率预测;【调整因子】则是在信息收集不断完善的过程中对先验概率的调整;【后验概率】则是经过调整后最终作出的概率预测。

2. 先验概率、后验概率(条件概率)例子

有 A、B、C 、D四个实习生其中只有一个实习生成功转正,请问转正实习生是A的概率是多少?
答案为 1/4
如果这时公司老板通知实习生B未转正成功,则这时转正实习生是A的概率是多少? 显然答案为1/3
注意,由于发生“公司老板通知实习生B未转正成功”这个事件,对于“转正实习生是A”这件事的概率由的 1/4 上升到了 1/3 。这里的 先验概率 就是 1/4,后验概率(条件概率) 是 1/3。

3. 贝叶斯公式

在了解贝叶斯公式之前我们需要先了解一下什么是条件概率、全概率

  • 条件概率
    设A,B为任意两个事件,若P(A)>0,我们称在已知事件A发生的条件下,事件B发生的概率为条件概率,记为P(B|A),并定义
    P ( A ∣ B ) = P ( A B ) P ( A ) P(A|B) = \frac{P(AB)}{P(A)} P(AB)=P(A)P(AB)
  • 全概率
    全概率公式是用于计算某个“结果” B发生的可能性大小。如果一个结果B的发生总是与某些前提条件Ai 相联系,那么在计算P(B)时,我们就要用Ai 对B作分解,应用全概率公式计算P(B),我们常称这种方法为全集分解法。
    在这里插入图片描述
  • 贝叶斯公式
    在这里插入图片描述

二、实际解决问题过程

1.问题描述(含数据集)

利用·一个朴素贝叶斯分类器来预测一个人的年收入是否超过5万美元
数据集:
链接:https://pan.baidu.com/s/1EoXtHov9Z2xuSXGYHf8n5w
提取码:jrrp

2.导入相关库

import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt 
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

3.导入数据集

data = '.../adult.csv'
# header=None表示文件中没有表头,数据的第一行将作为数据而不是列名
# sep=',\s'表示使用逗号作为分隔符,并且逗号后面紧跟着一个或多个空白字符(例如空格、制表符等)
df = pd.read_csv(data, header=None, sep=',\s') 

4.对数据集进行预处理

df.shape #显示数据集的大小
df.head() #显示数据集前5行数据

在这里插入图片描述
在这里插入图片描述

#重命名列名
col_names = ['age', 'workclass', 'fnlwgt', 'education', 'education_num', 'marital_status', 'occupation', 'relationship',
             'race', 'sex', 'capital_gain', 'capital_loss', 'hours_per_week', 'native_country', 'income']
df.columns = col_names
df.head()

在这里插入图片描述
列名说明:
在这里插入图片描述

5. 声明目标变量和特征变量

X = df.drop(['income'], axis=1) #特征变量
y = df['income'] #目标变量

6. 划分训练集和测试集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)

7.特征工程

#对分类变量进行进行编码
encoder = ce.OneHotEncoder(cols=['workclass', 'education', 'marital_status', 'occupation', 'relationship', 
                                 'race', 'sex', 'native_country'])
X_train = encoder.fit_transform(X_train)
X_test = encoder.transform(X_test)

8.特征缩放

特征缩放是一种常用的数据预处理技术,用于将不同特征的值缩放到相似的范围内,以便更好地进行模型训练和预测。常见的特征缩放方法包括标准化(将特征值转化为均值为0,方差为1的标准正态分布)和归一化(将特征值缩放到0到1的范围内)

#用RobustScaler对训练集和测试集进行数据标准化处理,并将处理后的数据转换为数据框格式
cols = X_train.columns
from sklearn.preprocessing import RobustScaler
scaler = RobustScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
X_train = pd.DataFrame(X_train, columns=[cols])
X_test = pd.DataFrame(X_test, columns=[cols])

9.模型训练

#使用Scikit-learn中的高斯朴素贝叶斯(Gaussian Naive Bayes)分类器对训练集进行训练
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
gnb.fit(X_train, y_train)

10.预测结果

y_pred = gnb.predict(X_test)
#显示模型预测准确率
from sklearn.metrics import accuracy_score
print('Model accuracy score: {0:0.4f}'. format(accuracy_score(y_test, y_pred)))

在这里插入图片描述

在这里插入图片描述

  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值