用Python实现朴素贝叶斯算法判断客户消费意愿【学习笔记】

任务:用朴素贝叶斯预测客户购买商品的概率,训练模型基于用户基本信息,预测其购买商品的概率(通过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:

样本X
样本数据中Y:

样本Y
模型训练结果:

模型训练结果
模型训练结果与样本预测结果:

模型训练结果与样本预测结果


欢迎大家查看作者的主页,主页中还有关于编程与算法方面的更多内容,欢迎大家相互沟通学习~

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答关于朴素叶斯算法的问题,并提供用Python实现朴素叶斯算法的方法。 朴素叶斯算法是一种基于概率统计的分类方法,它的基本思想是通过先验概率和条件概率来计算后验概率,从而得到最终的分类结果。具体来说,朴素叶斯算法假设所有特征之间相互独立,从而简化了计算过程,因此被广泛应用于自然语言处理、文本分类等领域。 下面是用Python实现朴素叶斯算法的步骤: 1. 收集数据:根据具体问题收集相关数据集,例如文本分类数据集、垃圾邮件数据集等。 2. 准备数据:将数据集转换成适合朴素叶斯算法使用的形式,通常是特征向量。 3. 训练模型:根据训练数据计算先验概率和条件概率,构建朴素叶斯分类器模型。 4. 测试模型:使用测试数据对训练好的模型进行评估,计算分类准确率等指标。 5. 应用模型:将模型应用于新的数据集,进行分类预测。 以下是一个简单的朴素叶斯算法实现示例: ```python import numpy as np class NaiveBayes: def fit(self, X, y): n_samples, n_features = X.shape self.classes = np.unique(y) n_classes = len(self.classes) # 计算先验概率 self.priors = np.zeros(n_classes) for i, c in enumerate(self.classes): self.priors[i] = np.sum(y == c) / float(n_samples) # 计算条件概率 self.means = np.zeros((n_classes, n_features)) self.vars = np.zeros((n_classes, n_features)) for i, c in enumerate(self.classes): X_c = X[y == c] self.means[i] = np.mean(X_c, axis=0) self.vars[i] = np.var(X_c, axis=0) def predict(self, X): y_pred = [] for x in X: posteriors = [] for i, c in enumerate(self.classes): prior = np.log(self.priors[i]) likelihood = np.sum(np.log(self._pdf(x, self.means[i], self.vars[i]))) posterior = prior + likelihood posteriors.append(posterior) y_pred.append(self.classes[np.argmax(posteriors)]) return y_pred def _pdf(self, x, mean, var): eps = 1e-4 coef = np.sqrt(2 * np.pi * var + eps) exponent = -(x - mean)**2 / (2 * var + eps) return np.log(coef * np.exp(exponent + eps)) ``` 该实现使用了numpy库进行矩阵计算,包括计算先验概率、条件概率、似然函数等。其中,_pdf函数用于计算概率密度函数。 使用示例: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score X, y = load_iris(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) clf = NaiveBayes() clf.fit(X_train, y_train) y_pred = clf.predict(X_test) acc = accuracy_score(y_test, y_pred) print("Accuracy:", acc) ``` 这里使用sklearn库中的鸢尾花数据集进行测试,将数据集分成训练集和测试集,使用上面实现的NaiveBayes模型进行训练和预测,最后输出准确率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值