Python实现机器学习算法——朴素贝叶斯

一、NaiveBayes简介

  1. 贝叶斯分类器是基于统计学方法的分类算法
  2. 例如:你在大街上,迎面走过来一个黑人,在我们猜他来自哪里。我们十有八九都会说来自非洲。为什么呢?因为黑人在非洲人的比率最高,在没有其它可用信息下,我们选择条件概率最大的类别,这就是朴素贝叶斯的思想基础。
  3. 公式:

二、Python代码实现

案例:

  1. 根据天气情况决策是否打球 如果给出新一天的气象指标数据: sunny , cool , high , TRUE, 判断一下会不会去打球?

1.导入package:

import pandas as pd
import numpy as np

2.创建实例数据集:

outlook=['sunny','sunny','overcast','rainy','rainy','rainy','overcast','sunny','sunny','rainy','sunny','overcast','overcast','rainy']
temperature=['hot','hot','hot','mild','cool','cool','cool','mild','cool','mild','mild','mild','hot','mild']
humdity=['high','high','high','high','normal','normal','normal','high','normal','normal','normal','high','normal','high']
windy=['FALSE','TRUE','FALSE','FALSE','FALSE','TRUE','TRUE','FALSE','FALSE','FALSE','TRUE','TRUE','FALSE','TRUE']
play=['no','no','yes','yes','yes','no','yes','no','yes','yes','yes','yes','yes','no']
data=pd.DataFrame({'outlook':outlook,'temperature':temperature,'humdity':humdity,'windy':windy,'play':play})
data.head()

3. 取出特征和标签:

X=data.drop(['play'],axis=1)
y=data['play']

4.定义朴素贝叶斯训练过程:

def nb_fit(X,y):
    classes=y.unique()
    class_count=y.value_counts()
    class_prior=class_count/len(y)
    prior=dict()
    for col in X.columns:
        for j in classes:
            p_x_y=X[(y==j).values][col].value_counts()
            for i in p_x_y.index:
                prior[(col,i,j)]=p_x_y[i]/class_count[j]
    return classes,class_prior,prior

拟合示例如下:

nb_fit(X,y)

 

 5.定义预测函数:

def predict(X_test):
    result=dict()
    for c in classes:
        p_y=class_prior[c]
        p_x_y=1
        for i in X_test.items():
            p_x_y*=prior[tuple(list(i)+[c])]
        result[c]=p_y*p_x_y
    return result

 6.给定测试实例并进行预测:

X_test={'outlook':'sunny','temperature':'cool','humdity':'high','windy':'TRUE'}

X_test.items()
result=predict(X_test)
result

结果如下:

  • 12
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值