基础的机器学习实例,朴素贝叶斯分类

这是我能网上所能找到的最易于入门的实例了(代码拷贝于网络)

例子是关于天气案例(天气,温感,湿度,风量,是否正常气候)
通过读取测试集的数据,算出P(C1|X)*P(C1)/P(X),P(C2|X)*P(C2)/P(X),考虑到P(X)相同,省去
具体的是P(C1|X)=P(X1|C1)*P(X2|C1)*P(X3|C1)......P(C1)
同理算出P(C2|X),比较两个值,大的值就是最有可能的结果
 
 
#Calculate the Prob. of class:cls  求P("yes"),p("no")
def P(data,cls_val,cls_name="class"):
    cnt = 0.0
    for e in data:
        if e[cls_name] == cls_val:
            cnt += 1
 
    return cnt/len(data)
 
#Calculate the Prob(attr|cls)  求P(Xn|Cn)
def PT(data,cls_val,attr_name,attr_val,cls_name="class"):
    cnt1 = 0.0
    cnt2 = 0.0
    for e in data:
        if e[cls_name] == cls_val:
            cnt1 += 1
            if e[attr_name] == attr_val:
                cnt2 += 1
 
    return cnt2/cnt1
 
#Calculate the NB	主函数
def NB(data,test,cls_y,cls_n):
    PY = P(data,cls_y)
    PN = P(data,cls_n)
    for key,val in test.items():	#我记得是key是索引,val是值
        print (key,val)
        PY *= PT(data,cls_y,key,val)
        PN *= PT(data,cls_n,key,val)
    return {cls_y:PY,cls_n:PN}		#以字典返回值

    
 
if __name__ == "__main__":
 
    #data
    data = [
        {"outlook":"sunny", "temp":"hot", "humidity":"high", "wind":"weak", "class":"no" },
        {"outlook":"sunny", "temp":"hot", "humidity":"high", "wind":"strong", "class":"no" },
        {"outlook":"overcast", "temp":"hot", "humidity":"high", "wind":"weak", "class":"yes" },
        {"outlook":"rain", "temp":"mild", "humidity":"high", "wind":"weak", "class":"yes" },
        {"outlook":"rain", "temp":"cool", "humidity":"normal", "wind":"weak", "class":"yes" },
        {"outlook":"rain", "temp":"cool", "humidity":"normal", "wind":"strong", "class":"no" },
        {"outlook":"overcast", "temp":"cool", "humidity":"normal", "wind":"strong", "class":"yes" },
        {"outlook":"sunny", "temp":"mild", "humidity":"high", "wind":"weak", "class":"no" },
        {"outlook":"sunny", "temp":"cool", "humidity":"normal", "wind":"weak", "class":"yes" },
        {"outlook":"rain", "temp":"mild", "humidity":"normal", "wind":"weak", "class":"yes" },
        {"outlook":"sunny", "temp":"mild", "humidity":"normal", "wind":"strong", "class":"yes" },
        {"outlook":"overcast", "temp":"mild", "humidity":"high", "wind":"strong", "class":"yes" },
        {"outlook":"overcast", "temp":"hot", "humidity":"normal", "wind":"weak", "class":"yes" },
        {"outlook":"rain", "temp":"mild", "humidity":"high", "wind":"strong", "class":"no" },
        ]
    
    #calculate
    print (NB(data,{"outlook":"sunny","temp":"cool","humidity":"high","wind":"strong"},"yes","no"))



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值