统计学习方法读书笔记9-朴素贝叶斯习题
文章目录
- 1.课本习题-符号太多了
- 2.视频作业
1.课本习题-符号太多了
2.视频作业
与课本P63-64页差不多
#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: liujie
@software: PyCharm
@file: naives 自编程实现.py
@time: 2020/10/22 10:03
"""
import numpy as np
import pandas as pd# 定义朴素贝叶斯类
class NaiveBayes():# 所有参数初始化def __init__(self,lambda_):self.lambda_ = lambda_ # 贝叶斯系数,取0时即为极大似然估计self.y_types_count = None # y的数量self.y_types_proba = None # y的概率self.x_types_prob = dict() # (xi 的编号,xi的取值,y的类型)条件概率#def fit(self,x_train,y_train):# y的所有取值类型[-1,1]self.y_types = np.unique(y_train)# 转化为DataFrame数据格式,方便后续计算x = pd.DataFrame(x_train)y = pd.DataFrame(y_train)# y的数量统计# 利用value_counts()对y进行统计self.y_types_count = y[0].value_counts()# y的概率的计算self.y_types_proba = (self.y_types_count + self.lambda_) / (y.shape[0] + len(self.y_types) * self.lambda_)# 条件概率的计算# 遍历xi- 特征for idx in x.columns:# 遍历每一个y的类型for j in self.y_types:# 选择y==j为真的数据点的第idx个特征的值,并进行统计p_x_y = x[(y == j).values][idx].value_counts()print(p_x_y)for i in p_x_y.index:print(i)# 字典-xi 的编号,xi的取值,y的类型self.x_types_prob[(idx,i,j)] = (p_x_y[i] + self.lambda_) / (self.y_types_count[j] + p_x_y.shape[0] * self.lambda_)def predict(self,x_new):res = []# 遍历y的可能取值for y in self.y_types:p_y = self.y_types_proba[y]p_xy =1for idx,x in enumerate(x_new):p_xy *= self.x_types_prob[idx,x,y]res.append(p_y*p_xy)for i in range(len(self.y_types)):print('[{}]对应的概率 : {:.2%}'.format(self.y_types[i],res[i]))# 返回最大后验概率对应的y值return self.y_types[np.argmax(res)]def main():X_train = np.array([[1, "S"],[1, "M"],[1, "M"],[1, "S"],[1, "S"],[2, "S"],[2, "M"],[2, "M"],[2, "L"],[2, "L"],[3, "L"],[3, "M"],[3, "M"],[3, "L"],[3, "L"]])y_train = np.array([-1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1])clf = NaiveBayes(lambda_=0.2)clf.fit(X_train, y_train)X_new = np.array([2, "S"])y_predict = clf.predict(X_new)print("{}被分类为:{}".format(X_new, y_predict))if __name__ == '__main__':main()
[-1]对应的概率 : 6.51%
[1]对应的概率 : 2.49%
['2' 'S']被分类为:-1
import numpy as np
from sklearn.naive_bayes import GaussianNB,BernoulliNB,MultinomialNB
from sklearn import preprocessing #预处理def main():X_train=np.array([[1,"S"],[1,"M"],[1,"M"],[1,"S"],[1,"S"],[2,"S"],[2,"M"],[2,"M"],[2,"L"],[2,"L"],[3,"L"],[3,"M"],[3,"M"],[3,"L"],[3,"L"]])y_train=np.array([-1,-1,1,1,-1,-1,-1,1,1,1,1,1,1,1,-1])# 数据预处理enc = preprocessing.OneHotEncoder(categories='auto')enc.fit(X_train)# toarray()变成数组的形式X_train = enc.transform(X_train).toarray()print(X_train)clf=MultinomialNB(alpha=0.0000001)clf.fit(X_train,y_train)X_new=np.array([[2,"S"]])X_new=enc.transform(X_new).toarray()y_predict=clf.predict(X_new)print("{}被分类为:{}".format(X_new,y_predict))print(clf.predict_proba(X_new))if __name__=="__main__":main()
统计学习方法读书笔记9-朴素贝叶斯习题相关推荐
- 机器学习实战读书笔记(3)朴素贝叶斯
贝叶斯定理 要理解贝叶斯推断,必须先理解贝叶斯定理.后者实际上就是计算"条件概率"的公式. 所谓"条件概率"(Conditional probability), ...
- 统计学习方法第四章朴素贝叶斯法-李航
第4章 朴素贝叶斯法 朴素贝叶斯 (naive Bayes) 法是基于贝叶斯定理与特征条件独立假设的分类方法.对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布:然后基于此模型 ...
- 机器学习实战 - 读书笔记(04) - 朴素贝叶斯
核心公式 - 贝叶斯准则 \[p(c|x) = \frac{p(x|c)p(c)}{p(x)}\] p(c|x) 是在x发生的情况下,c发生的概率. p(x|c) 是在c发生的情况下,x发生的概率. ...
- 统计学习方法读书笔记(六)-逻辑斯蒂回归与最大熵模型(迭代尺度法(IIS))
全部笔记的汇总贴:统计学习方法读书笔记汇总贴 逻辑斯谛回归 (logistic regression )是统计学习中的经典分类方法.最大熵是概率模型学习的一个准则,将其推广到分类问题得到最大熵模型(m ...
- 统计学习方法读书笔记(九)-EM算法及其推广
全部笔记的汇总贴:统计学习方法读书笔记汇总贴 EM算法用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计.EM算法的每次迭代由两步组成:E步,求期望(ex ...
- 统计学习方法笔记(三)-朴素贝叶斯原理及python实现
朴素贝叶斯 条件概率 特征条件独立假设 朴素贝叶分类器 朴素贝叶斯分类算法原理 学习与分类算法 朴素贝叶斯算法原理 模型 多项式模型 高斯模型 伯努利模型 多项式模型的朴素贝叶斯分类器实现代码 高斯模 ...
- 机器学习读书笔记之6 - 贝叶斯系列
概率论只不过是把常识用数学公式表达了出来. --拉普拉斯 目录 0. 前言 1. 历史 1.1 一个例子:自然语言的二义性 1.2 贝叶斯公式 2. 拼写纠正 3. 模型比较 ...
- 机器学习笔记:朴素贝叶斯方法(Naive Bayes)原理和实现
本文主要描述了朴素贝叶斯分类方法,包括模型导出和学习描述.实例部分总结了<machine learning in action>一书中展示的一个该方法用于句子感情色彩分类的程序.1 方法概 ...
- 【机器学习笔记】朴素贝叶斯
本文学习自 https://zhuanlan.zhihu.com/ml-jack 朴素贝叶斯 朴素贝叶斯算法是有监督的学习算法,解决的是分类问题. 1.贝叶斯决策理论 贝叶斯决策理论的核心思想:选择具 ...
- 机器学习笔记 - 学习朴素贝叶斯概念及应用
一.思想概述 贝叶斯分类算法是一大类分类算法的总称:贝叶斯分类算法以样本可能属于某类的概率来作为分类依据:朴素贝叶斯分类算法是贝叶斯分类算法中最简单的一种. 朴素贝叶斯分类器是一种用于 ...
最新文章
- 编辑流程图_作为一名采购商,做不好采购?送你5套采购流程图模板
- 【错误记录】p7zip 交叉编译 Android 版本 NDK 报错 ( Application.mk | APP_ABI := armeabi-v7a arm64-v8a x86 x86_64 )
- 消息服务器怎么测试,如何对服务器性能进行测试
- idea 写html js 热部署
- 多线程:三大不安全案例
- [转]让iframe自适应高度-真正解决
- react中修改antd的默认样式
- 【2】SCN-Ribbon负载均衡
- 支付宝要给全国人民发100亿,7月1日起!
- ddos攻击数据集_ddos攻击和cc攻击有什么区别?他们2个哪个更厉害?
- node koa2 玩起来都是中间件啊
- Oracle表字段的增加、删除、修改和重命名
- 【深度讲解】手把手教你python制作萝莉音智能对话语音机器人,附全部源码!速速学起来!!
- OpenCV IPLImage常用方法
- maven依赖查询网站
- 团队开发过程中的一点感想
- python学习笔记(七) os模块与窗体控制
- 一种基于时间滑动窗口的黑产团伙挖掘算法
- python上下对齐_python-docx设置表格对齐方式
- stm32f103VCT6全新机器 做stm32开发板 原理图以及主要器件规格书