持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
前置
机器学习作为当下热门的学习方向,是深度学习的基础。
接下来我会一直更新机器学习基础算法的讲解
如果有疑问的欢迎评论区提问,希望能帮助到初学者~~
朴素贝叶斯
原理
目标:简单来说:按照已有数据集,学得联合概率分布,对给定输入x求出后验概率最大的输出。
具体:先验概率分布和条件概率分布
-这样比较容易理解贝叶斯公式,照片截取于b站教学视频
而我们的朴素贝叶斯算法就是要通过给定数据集先学得P(X,Y),
根据公式:P(X,Y)=P(Y)P(X∣Y)
其中:- P(Y)是先验概率, P(X|Y)是条件概率(或者叫后验概率)
●先算先验概率(公式):
●后验概率(公式):
●再根据给定的x=(x(1),x(2),,...,x(n))T,计算:
●最后确定实例x的类,求出y概率最大的值:
例子
根据后来要测定的x的已有取值来测定这种情况下,y最大可能是什么值;
这是比较简单的概率模型
- 我的思路推导
函数的代码实现:
- 根据已有数据,求出先验和后验
# 对于数据集,需要把x,y拉取出来,x里面包含特征,y就是要预测的值
import numpy as np
def Bayes_Second(i,j,x_y_counts,y_value_count):
p_x_y=dict()
for k in x_y_counts.index:
#按照公式
#i对应x的特征,j对应y的取值
p_x_y[(i,k,j)]=x_y_counts[k]/y_value_count
return p_x_y
def Bayes_First(x,y):
#需要知道y有多少取值,且需要知道每一种取值各自有多少
y_values=y[y.columns[0]].unique()
y_value_count=y[y.columns[0]].value_counts()
#unique()是找出一共有多少取值的函数
#value_counts()是找出每一种取值有多少个的函数
p_y_ck=y_value_count/len(y_values)
#然后求x每一种特征的每一种取值在类内的比例
for i in x.columns:
#需要知道每一种y的取值x的某个特征的取值们各占多少
for j in y_values:
x_y_counts=x[(y==j).values][i].values.count_count()
p_x_y=Bayes_Second(i,j,x_y_counts,y_value_count)
return y_values,p_y_ck,p_x_y
- 预测y最可能的取值
def y_max_predict(X,y_values,p_y_ck,p_x_y):
y_results=[]
for i in y_values:
p_y=p_y_ck[i]
p_X_y=0
for j in X.items():
p_X_y*=p_x_y[tuple(list(j)+[i])]
y_results.append(p_y*p_X_y)
return y_values[np.argmax(y_results)]
总结
这就是最简单的朴素贝叶斯啦,有疑问欢迎评论区提问哦~ 如果有所收获,希望得到你的点赞~~