搞懂朴素贝叶斯公式 ╰+攻爆jí腚メ 2022-03-22 02:02 365阅读 0赞 一. 朴素贝叶斯 朴素贝叶斯中的朴素一词的来源就是假设各特征之间相互独立。这一假设使得朴素贝叶斯算法变得简单,但有时会牺牲一定的分类准确率。 首先给出贝叶斯公式: 换成分类任务的表达式:![70][] 我们最终求的p(类别|特征)即可!就相当于完成了我们的任务。 则,朴素贝特斯公式为: ![70 1][] 二. 实例解析 首先,给出数据如下: ![70 2][] 现在给我们的问题是,如果一对男女朋友,男生想女生求婚,男生的四个特点分别是不帅,性格不好,身高矮,不上进,请你判断一下女生是嫁还是不嫁? 这是典型的二分类问题,按照朴素贝叶斯的求解,转换为P(嫁|不帅、性格不好、矮、不上进)和P(不嫁|不帅、性格不好、矮、不上进)的概率,最终选择嫁与不嫁的答案。 这里我们根据贝特斯公式: ![70 3][] 由此,我们将(嫁|不帅、性格不好、矮、不上进)转换成三个可求的P(嫁)、P(不帅、性格不好、矮、不上进|嫁)、P(不帅、性格不好、矮、不上进)。进一步分解可以得: P(不帅、性格不好、矮、不上进)=P(嫁)P(不帅|嫁)P(性格不好|嫁)P(矮|嫁)P(不上进|嫁)+P(不嫁)P(不帅|不嫁)P(性格不好|不嫁)P(矮|不嫁)P(不上进|不嫁)。 P(不帅、性格不好、矮、不上进|嫁)=P(不帅|嫁)P(性格不好|嫁)P(矮|嫁)P(不上进|嫁) 将上面的公式整理一下可得: ![70 4][] P(嫁)=1/2、P(不帅|嫁)=1/2、P(性格不好|嫁)=1/6、P(矮|嫁)=1/6、P(不上进|嫁)=1/6。 P(不嫁)=1/2、P(不帅|不嫁)=1/3、P(性格不好|不嫁)=1/2、P(矮|不嫁)=1、P(不上进|不嫁)=2/3 但是由贝叶斯公式可得:对于目标求解为不同的类别,贝叶斯公式的分母总是相同的。所以,只求解分子即可: ![70 5][] 于是,对于类别“嫁”的贝叶斯分子为:P(嫁)P(不帅|嫁)P(性格不好|嫁)P(矮|嫁)P(不上进|嫁)=1/2 \* 1/2 \* 1/6 \* 1/6 \* 1/6=1/864 对于类别“不嫁”的贝叶斯分子为:P(不嫁)P(不帅|不嫁)P(性格不好|不嫁)P(矮|不嫁)P(不上进|不嫁)=1/2 \* 1/3 \* 1/2 \* 1\* 2/3=1/18。 经代入贝叶斯公式可得:P(嫁|不帅、性格不好、矮、不上进)=(1/864) / (1/864+1/18)=1/49=2.04% P(不嫁|不帅、性格不好、矮、不上进)=(1/18) / (1/864+1/18)=48/49=97.96% 则P(不嫁|不帅、性格不好、矮、不上进) > P(嫁|不帅、性格不好、矮、不上进),则该女子选择不嫁! 三. 朴素贝叶斯的优缺点 优点: (1) 算法逻辑简单,易于实现(算法思路很简单,只要使用贝叶斯公式转化即可!) (2)分类过程中时空开销小(假设特征相互独立,只会涉及到二维存储) 缺点: 朴素贝叶斯假设属性之间相互独立,这种假设在实际过程中往往是不成立的。在属性之间相关性越大,分类误差也就越大。 四. 朴素贝叶斯实战 sklearn中有3种不同类型的朴素贝叶斯: 高斯分布型:用于classification问题,假定属性/特征服从正态分布的。 多项式型:用于离散值模型里。比如文本分类问题里面我们提到过,我们不光看词语是否在文本中出现,也得看出现次数。如果总词数为n,出现词数为m的话,有点像掷骰子n次出现m次这个词的场景。 伯努利型:最后得到的特征只有0(没出现)和1(出现过)。 4.1 我们使用iris数据集进行分类 from sklearn.naive_bayes import GaussianNB from sklearn.model_selection import cross_val_score from sklearn import datasets iris = datasets.load_iris() gnb = GaussianNB() scores=cross_val_score(gnb, iris.data, iris.target, cv=10) print("Accuracy:%.3f"%scores.mean()) 输出: Accuracy:0.953 4.2 Kaggle比赛之“旧金山犯罪分类预测” 题目数据:第一种获取方式:[Kaggle网站上][Kaggle];第二种获取方式:[百度网盘][Link 1] 题目背景:『水深火热』的大米国,在旧金山这个地方,一度犯罪率还挺高的,然后很多人都经历过大到暴力案件,小到东西被偷,车被划的事情。当地警方也是努力地去总结和想办法降低犯罪率,一个挑战是在给出犯罪的地点和时间的之后,要第一时间确定这可能是一个什么样的犯罪类型,以确定警力等等。后来干脆一不做二不休,直接把12年内旧金山城内的犯罪报告都丢带Kaggle上,说『大家折腾折腾吧,看看谁能帮忙第一时间预测一下犯罪类型』。犯罪报告里面包括日期,描述,星期几,所属警区,处理结果,地址,GPS定位等信息。当然,分类问题有很多分类器可以选择,我们既然刚讲过朴素贝叶斯,刚好就拿来练练手好了。 (1) 首先我们来看一下数据 import pandas as pd import numpy as np from sklearn import preprocessing from sklearn.metrics import log_loss from sklearn.cross_validation import train_test_split train = pd.read_csv('/Users/liuming/projects/Python/ML数据/Kaggle旧金山犯罪类型分类/train.csv', parse_dates = ['Dates']) test = pd.read_csv('/Users/liuming/projects/Python/ML数据/Kaggle旧金山犯罪类型分类/test.csv', parse_dates = ['Dates']) train ![70 6][] 我们依次解释一下每一列的含义: * Date: 日期 * Category: 犯罪类型,比如 Larceny/盗窃罪 等. * Descript: 对于犯罪更详细的描述 * DayOfWeek: 星期几 * PdDistrict: 所属警区 * Resolution: 处理结果,比如说『逮捕』『逃了』 * Address: 发生街区位置 * X and Y: GPS坐标 train.csv中的数据时间跨度为12年,包含了将近90w的记录。另外,这部分数据,大家从上图上也可以看出来,大部分都是『类别』型,比如犯罪类型,比如星期几。 (2)特征预处理 sklearn.preprocessing模块中的 LabelEncoder函数可以对类别做编号,我们用它对犯罪类型做编号;pandas中的get\_dummies( )可以将变量进行二值化01向量,我们用它对”街区“、”星期几“、”时间点“进行因子化。 #对犯罪类别:Category; 用LabelEncoder进行编号 leCrime = preprocessing.LabelEncoder() crime = leCrime.fit_transform(train.Category) #39种犯罪类型 #用get_dummies因子化星期几、街区、小时等特征 days=pd.get_dummies(train.DayOfWeek) district = pd.get_dummies(train.PdDistrict) hour = train.Dates.dt.hour hour = pd.get_dummies(hour) #组合特征 trainData = pd.concat([hour, days, district], axis = 1) #将特征进行横向组合 trainData['crime'] = crime #追加'crime'列 days = pd.get_dummies(test.DayOfWeek) district = pd.get_dummies(test.PdDistrict) hour = test.Dates.dt.hour hour = pd.get_dummies(hour) testData = pd.concat([hour, days, district], axis=1) trainData 特征预处理后,训练集feature,如下图所示: ![70 7][] (3) 建模 from sklearn.naive_bayes import BernoulliNB import time features=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', 'BAYVIEW', 'CENTRAL', 'INGLESIDE', 'MISSION', 'NORTHERN', 'PARK', 'RICHMOND', 'SOUTHERN', 'TARAVAL', 'TENDERLOIN'] X_train, X_test, y_train, y_test = train_test_split(trainData[features], trainData['crime'], train_size=0.6) NB = BernoulliNB() nbStart = time.time() NB.fit(X_train, y_train) nbCostTime = time.time() - nbStart #print(X_test.shape) propa = NB.predict_proba(X_test) #X_test为263415*17; 那么该行就是将263415分到39种犯罪类型中,每个样本被分到每一种的概率 print("朴素贝叶斯建模%.2f秒"%(nbCostTime)) predicted = np.array(propa) logLoss=log_loss(y_test, predicted) print("朴素贝叶斯的log损失为:%.6f"%logLoss) 输出: 朴素贝叶斯建模0.55秒 朴素贝叶斯的log损失为:2.582561 原文:https://blog.csdn.net/fisherming/article/details/79509025 [70]: /images/20220322/bcf0dd4f315d4fabaf1a11622590d6da.png [70 1]: /images/20220322/f5da7834ff8f4d6d97f7fe2cc2dd6aba.png [70 2]: /images/20220322/a2c0e415c89d4d7680df9bccee356460.png [70 3]: /images/20220322/fceb8fb7db684dfca11b1a10f6bcb50a.png [70 4]: /images/20220322/233af37d832142c9a92ab1c559e95ac5.png [70 5]: /images/20220322/7f9e2ffa090b49fc998238b9e3f31dd4.png [Kaggle]: https://www.kaggle.com/c/sf-crime/data [Link 1]: https://pan.baidu.com/s/1BHNLsHE5AwuApEGq2hX9VA#list/path=%2F [70 6]: /images/20220322/2fb0501371184dcb99473558f898ebc2.png [70 7]: /images/20220322/4b2b695e779a4784ad4dc3bb85ba6d8e.png
相关 朴素贝叶斯 1.介绍 文本分类实验 http://qwone.com/~jason/20Newsgroups/下载数据 2.代码 鸢尾花 Iris\_Gaussi... 桃扇骨/ 2024年04月18日 11:02/ 0 赞/ 105 阅读
相关 朴素贝叶斯 ![20191009191333910.png][][日萌社][Link 1] [人工智能AI:Keras PyTorch MXNet TensorFlow Paddle 痛定思痛。/ 2023年07月09日 12:24/ 0 赞/ 34 阅读
相关 朴素贝叶斯 1、贝叶斯定理: ![1062917-20190822210015551-1631638447.png][] 2、朴素贝叶斯分类器 朴素贝叶斯分类的正式定义如下: ゝ一纸荒年。/ 2023年06月04日 12:51/ 0 赞/ 21 阅读
相关 贝叶斯公式 讲解的不错 尤其是`现象`和`规律`的说法 ![1515886-20190928121823736-2138558902.png][] [贝叶斯公式由浅入深大讲解—A 清疚/ 2023年06月01日 05:48/ 0 赞/ 36 阅读
相关 贝叶斯分类(轻松理解朴素贝叶斯与半朴素贝叶斯) 贝叶斯分类是一类分类[算法][Link 1]的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。这篇文章 今天药忘吃喽~/ 2022年12月18日 00:54/ 0 赞/ 349 阅读
相关 贝叶斯公式 例 已知概率: P(X = A) –原因为A的概率 P(Y=B | X=A) –在原因为A的前提下,结果为B的条件概率 需要求的 一时失言乱红尘/ 2022年05月19日 05:08/ 0 赞/ 238 阅读
相关 搞懂朴素贝叶斯公式 一. 朴素贝叶斯 朴素贝叶斯中的朴素一词的来源就是假设各特征之间相互独立。这一假设使得朴素贝叶斯算法变得简单,但有时会牺牲一定的分类准确率。 首先给出贝 ╰+攻爆jí腚メ/ 2022年03月22日 02:02/ 0 赞/ 366 阅读
相关 朴素贝叶斯 朴素贝叶斯算法看了几篇文章 觉得下面这片文章写的还可以:其中借鉴了西瓜书上的内容,还有半朴素贝叶斯分类器(比较笼统了),还有朴素贝叶斯方面的面试问题。 [机器学习之朴素贝叶 淡淡的烟草味﹌/ 2021年12月22日 10:57/ 0 赞/ 376 阅读
相关 贝叶斯公式 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ub ﹏ヽ暗。殇╰゛Y/ 2021年11月19日 13:06/ 0 赞/ 365 阅读
相关 朴素贝叶斯 [https://www.jianshu.com/p/7a869cd83b1f][https_www.jianshu.com_p_7a869cd83b1f] 转载于:http 向右看齐/ 2021年11月02日 13:10/ 0 赞/ 468 阅读
还没有评论,来说两句吧...