任务:用朴素贝叶斯预测客户购买商品的概率,训练模型基于用户基本信息,预测其购买商品的概率(通过sklearn库来完成)。
样本数据:
其中:
- gender代表性别:0代表女性,1代表男性。
- city代表城市:0代表非一线城市,1代表一线城市。
- cost代表消费能力:0代表一般,1代表较强。
- surplus代表账户余额:0代表较少,1代表较多。
- device代表所用设备:0代表苹果,1代表安卓。
- y代表客户是否购买:0代表未购买,1代表已购买。
测试样本:
贝叶斯公式:
若有多个Bi,则公式可变为:
概率是反映随机事件出现的可能性大小的量度,而条件概率则是给定某事件A的条件下,另一事件B发生的概率。全概率公式则是利用条件概率,将复杂事件A分割为若干简单事件概率的求和问题。贝叶斯公式则是利用条件概率和全概率公式计算后验概率。
朴素贝叶斯:
以贝叶斯定理为基础,假设特征之间相互独立,先通过训练数据集,学习从输入到输出的概率分布,再基于学习到的模型及输入,求出使得后验概率最大的输出实现分类。
详细:
代码编写:
import pandas as pd
import numpy as np
# 数据加载
data = pd.read_csv('bayes_consume01.csv')
print('样本数据:\n',data)
# 训练数据赋值
# X赋值
X = data.drop(['y'],axis=1)
# 把y列去掉,axis=1代表去掉列,axis=0代表去掉行
print('各组样本数据中的X:\n',X)
# Y赋值
Y = data.loc[:,'y']
print('各组样本数据中的Y:\n',Y)
# 建立模型
# 引入模型模块
from sklearn.naive_bayes import CategoricalNB
# 建立模型实例
model = CategoricalNB()
# 这条语句写完就已经建立了模型,只不过模型还未进行训练
# 模型训练
model.fit(X,Y)
print('***模型训练完毕***')
# 输出预测的概率,得到预测结果是0的概率或预测结果是1的概率
Y_predict_prob = model.predict_proba(X)
# 有两列数据,第一列是Y=0的概率,第二列是Y=1的概率
print('各组样本预测结果分别为0,1的概率:\n',Y_predict_prob)
# 取每一行的两个概率中较大的那个作为最终结果
# 输出预测的结果,即Y
Y_predict = model.predict(X)
# model.predict与model.predict_proba方法不同的是,前者输出结果,后者输出概率
print('各组样本预测结果:\n',Y_predict)
# 计算模型准确率
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(Y,Y_predict)
# Y是训练集文件中给出的结果,Y_predict是通过模型预测的结果
print('模型准确率:\n',accuracy)
# 测试样本的预测 测试样本 0,1,1,0,1
X_t = np.array([[0,1,1,0,1]])
# 预测测试样本的0和1的概率
Y_t_pro = model.predict_proba(X_t)
print('测试样本预测结果分别为0,1的概率:\n',Y_t_pro)
# 预测测试样本的输出结果
Y_t = model.predict(X_t)
print('测试样本预测的结果:',Y_t)
输出结果:
样本数据展示:
样本数据中X:
样本数据中Y:
模型训练结果:
模型训练结果与样本预测结果:
欢迎大家查看作者的主页,主页中还有关于编程与算法方面的更多内容,欢迎大家相互沟通学习~