• sklearn之朴素贝叶斯分类


    '''
        朴素贝叶斯分类:朴素贝叶斯分类是一种依据统计概率理论而实现的一种分类方式。
            观察这组数据:
                天气情况         穿衣风格    约女朋友        ==>    心情
                0(晴天)    0(休闲)    0(约了)    ==>    0(高兴)
                0            1(风骚)    1(没约)    ==>    0
                1(多云)    1           0            ==>    0
                0            2(破旧)    1           ==>    1(郁闷)
                2(下雨)    2            0            ==>    0
                ...            ...            ...            ==>    ...
                0            1            0            ==>    ?
    
            通过上述训练样本如何预测:晴天、穿着休闲、没有约女朋友时的心情?可以整理相同特征值的样本,计算属于某类别的概率即可。
            但是如果在样本空间没有完全匹配的数据该如何预测?
    
        贝叶斯定理:P(A|B)=P(B|A)P(A)/P(B) <== P(A, B) = P(A) P(B|A) = P(B) P(A|B)
            例如:
                假设一个学校里有60%男生和40%女生.女生穿裤子的人数和穿裙子的人数相等,所有男生穿裤子.
                一个人在远处随机看到了一个穿裤子的学生.那么这个学生是女生的概率是多少?
                    P(女) = 0.4
                    P(裤子|女) = 0.5
                    P(裤子) = 0.6 + 0.2 = 0.8
                    P(女|裤子) = P(裤子|女) * P(女) / P(裤子) = 0.5 * 0.4 / 0.8 = 0.25
    
            根据贝叶斯定理,如何预测:晴天、穿着休闲、没有约女朋友时的心情?
                P(晴天,休闲,没约,高兴)
                = P(晴天|休闲,没约,高兴) P(休闲,没约,高兴)
                = P(晴天|休闲,没约,高兴) P(休闲|没约,高兴) P(没约,高兴)
                = P(晴天|休闲,没约,高兴) P(休闲|没约,高兴) P(没约|高兴)P(高兴)
                ( 朴素:条件独立,特征值之间没有因果关系)
                = P(晴天|高兴) P(休闲|高兴) P(没约|高兴)P(高兴)
            由此可得,统计总样本空间中晴天、穿着休闲、没有约女朋友时高兴的概率,
            与晴天、穿着休闲、没有约女朋友时不高兴的概率,择其大者为最终结果。
    
        高斯贝叶斯分类器相关API:
                import sklearn.naive_bayes as nb
                # 创建高斯分布朴素贝叶斯分类器
                model = nb.GaussianNB()
                model.fit(x, y)
                result = model.predict(samples)
    
        案例:multiple1.txt
    '''
    import numpy as np
    import matplotlib.pyplot as mp
    import sklearn.naive_bayes as nb
    
    data = np.loadtxt('./ml_data/multiple1.txt', delimiter=',', unpack=False, dtype='f8')
    print(data.shape)
    x = np.array(data[:, :-1])
    y = np.array(data[:, -1])
    
    # 训练NB模型,完成分类业务
    model = nb.GaussianNB()
    model.fit(x, y)
    
    # 绘制分类边界线
    l, r = x[:, 0].min() - 1, x[:, 0].max() + 1
    b, t = x[:, 1].min() - 1, x[:, 1].max() + 1
    n = 500
    grid_x, grid_y = np.meshgrid(np.linspace(l, r, n), np.linspace(b, t, n))
    test_x = np.column_stack((grid_x.ravel(), grid_y.ravel()))
    test_y = model.predict(test_x)
    grid_z = test_y.reshape(grid_x.shape)
    
    # 画图
    mp.figure('NB Classification', facecolor='lightgray')
    mp.title('NB Classification', fontsize=16)
    mp.xlabel('X', fontsize=14)
    mp.ylabel('Y', fontsize=14)
    mp.tick_params(labelsize=10)
    mp.pcolormesh(grid_x, grid_y, grid_z, cmap='gray')
    mp.scatter(x[:, 0], x[:, 1], s=80, c=y, cmap='jet', label='Samples')
    
    mp.legend()
    mp.show()
    
    
    输出结果:
    (400, 3)

      

  • 相关阅读:
    单例 与 static
    ActiveMQ 核心概念
    Jconsole
    死锁
    document write & close
    java.nio.Buffer
    Java 线程控制(输出奇偶数)
    exist & in
    命运
    Super Jumping! Jumping! Jumping!
  • 原文地址:https://www.cnblogs.com/yuxiangyang/p/11189256.html
Copyright © 2020-2023  润新知