机器学习入门与Python实战(六):朴素贝叶斯 Bayes

目录

现实问题思考:为什么赌博总是“输多赢少”?

概率(Probability)

机器学习中的概率

条件概率

全概率公式

知识巩固

贝叶斯公式

朴素贝叶斯用于机器学习

知识巩固

优缺点

Python实战:朴素贝叶斯预测学生录取及奖学金情况

拓展学习


现实问题思考:为什么赌博总是“输多赢少”?

骰宝是赌场里最简单的游戏之一,俗称押大小。三个骰子加起来的点数小于等于10为小,大于等于11为大。看似有50%胜率的游戏,游戏还有一条额外的规则,叫围骰(三个骰一样的点数,比如36),这个时候不管玩家押大押小,都算玩家输,赌场赢。

实际上玩家胜率只有48.61%

概率(Probability)

概率是一个在01之间的实数,是对随机事件发生可能性的度量,反映某种情况出现的可能性(likelihood)大小。

机器学习中的概率

分类任务中,逻辑回归模型直接预测的结果是某种情况对应的概率。

市场交易预测中,操作建议 基于 股票价格的涨、跌的概率。

参考链接: https://blog.csdn.net/dfly_zx/article/details/104461097

条件概率

全概率公式

知识巩固

问题:有三个盒子甲乙丙,甲装了两个红球,乙装了一红一蓝两个球,丙装了两个蓝球。随机取一个盒子,从该盒子中随机取一个球,计算是红球的概率。如果第一个球确实是红球,求该盒子中另一个球也是红球的概率

贝叶斯公式

朴素贝叶斯用于机器学习

小结

知识巩固

优缺点

优点:

  • 源于古典数学理论,分类逻辑清晰
  • 可清晰查看各个类别对应概率,观察数据改变的概率变化,帮助理解预测过程

缺点:

  • 在属性个数比较多或者属性之间相关性较大时,分类效果不好
  • 对先验概率依赖度高,样本类别分布不均匀时,容易影响模型表现

适用场景:

数据不同维度之间相关性较小

Python实战:朴素贝叶斯预测学生录取及奖学金情况

基础环境: Python语言;安装核心工具包numpy、pandas、sklearn、matplotlib;环境管理软件Anaconda;Jupyter notebook

环境配置参考:机器学习入门与Python实战核心工具篇:pip源、python、anaconda、工具包(完整版)https://blog.csdn.net/dfly_zx/article/details/110188923

任务:基于task2 _data数据,建立朴素贝叶斯模型预测学生申请结果。

1、计算模型对训练数据各样本预测各类别的概率及输出类别结果、计算模型准确率;

2、观察测试样本数据并主观预测每个样本的结果,然后结合模型计算对应类别概率、与结果,将两个结果进行对比

3、将测试样本数据、预测概率、结果以csv格式存储到本地

属性数值意义:

成绩

0:不及格; 1:及格; 2:优秀

学校
0:普通; 1:重点

获奖

0:无; 1:有

性别

0:女; 1:男

英语

0:普通; 1:优异

Y结果

0:未录取; 1:录取; 2:带奖学金录取

#加载数据
import pandas as pd
import numpy as np
data = pd.read_csv('task2_data.csv')
data.head()

#X y 赋值
X = data.drop(['y'],axis=1)
y = data.loc[:,'y']
X.head()
y.head()
print(X.shape,y.shape)

#创建朴素贝叶斯模型并训练
from sklearn.naive_bayes import CategoricalNB
model = CategoricalNB()
#模型训练
model.fit(X,y)
#训练数据的概率预测
y_predict_prob = model.predict_proba(X)
print(y_predict_prob)

#训练的预测
y_predict = model.predict(X)
print(y_predict)

#计算模型准确率
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
print(accuracy)

#测试样本预测
X_test = np.array([[2,1,1,1,1]])
y_test_predict_prob = model.predict_proba(X_test)
y_test_predict = model.predict(X_test)
print(y_test_predict)
#5个测试样本预测
X_test = np.array([[2,1,1,1,1],[2,1,1,1,0],[2,1,1,0,0],[2,1,0,0,0],[2,0,0,0,0]])
y_test_predict_prob = model.predict_proba(X_test)
y_test_predict = model.predict(X_test)

print(y_test_predict_prob)
print(y_test_predict)

#确认存储数据
print(X_test)
print(y_test_predict_prob)
print(y_test_predict)
print(X_test.shape,y_test_predict_prob.shape,y_test_predict.shape)

#数据组合
test_data_result = np.concatenate((X_test,y_test_predict_prob,y_test_predict.reshape(5,1)),axis=1)
print(test_data_result)

#格式转化
test_data_result = pd.DataFrame(test_data_result)
test_data_result.head()

#列名称替换
test_data_result.columns = ['score','school','award','gender','english','p0','p1','p2','y_test_predict']
test_data_result.head()

test_data_result.to_csv('test_data_result.csv')

朴素贝叶斯预测学生录取及奖学金情况实战summary:

1、通过建立朴素贝叶斯模型,实现了预测申请者是否能拿到录取及获得奖学金,模型准确率0.68;
2、通过输出个样本不同结果的概率,为主观预测结果提供了依据,实现了申请者条件变化时结果变化的量化分析;
3、掌握了结果存储方法,方便未来进行结果分析

核心算法参考链接:https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.CategoricalNB.html


拓展学习

如果现在就想开始学习机器学习,你还可以:

1、添加微信:ai_flare,领取Python编程课(AI方向)、Python实现机器学习,免费领取(仅限前100名)

2、人工智能学习路线:专为AI小白设计的人工智能实战课 - Python3入门人工智能 基础+实战 学习视频教程-CSDN学院

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值