当前位置: 首页 > article >正文

机器学习-04-分类算法-02贝叶斯算法案例

总结

本系列是机器学习课程的系列课程,主要介绍机器学习中分类算法,本篇为分类算法与贝叶斯算法部分。

本门课程的目标

完成一个特定行业的算法应用全过程:

懂业务+会选择合适的算法+数据处理+算法训练+算法调优+算法融合
+算法评估+持续调优+工程化接口实现

参考

贝叶斯定理厉害在哪里?-猴子

机器学习最易懂之贝叶斯模型详解与python实现

机器学习之朴素贝叶斯算法原理+Python实现

图解机器学习 | 朴素贝叶斯算法详解

图解机器学习算法:从入门到精通系列教程

简单,却又反直觉的“三门问题”,暴露出很多人根本不懂“概率”

大数据中的统计学基础——Day3

【ML】朴素贝叶斯分类器及Python手写实现(详细)

机器学习定义

关于机器学习的定义,Tom Michael Mitchell的这段话被广泛引用:
对于某类任务T性能度量P,如果一个计算机程序在T上其性能P随着经验E而自我完善,那么我们称这个计算机程序从经验E中学习
在这里插入图片描述

贝叶斯算法

贝叶斯公式

在这里插入图片描述

在这里插入图片描述

贝叶斯案例

不使用sklearn-西瓜集3.0

数据集:西瓜集3.0(来自西瓜书《机器学习 周志华》84页)
在这里插入图片描述

数据集的推导过程

数据集:
在这里插入图片描述

待测集:
在这里插入图片描述

(1)计算先验概率:
在这里插入图片描述

(2)计算每个属性的条件概率:

a、离散属性:
在这里插入图片描述

b、连续属性:
在这里插入图片描述

(3)计算后验概率:
在这里插入图片描述

因为0.038>6.80*10­^(-5),所以朴素贝叶斯分类器将待测样本判别为“好瓜”。

实现过程

(1)加载第三方模块

import numpy as np
import math
import pandas as pd

(2) 定义加载数据集函数

def loadDataSet():
    dataSet=[['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.697, 0.460, '好瓜'],
             ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', 0.774, 0.376, '好瓜'],
             ['乌黑', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.634, 0.264, '好瓜'],
             ['青绿', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', 0.608, 0.318, '好瓜'],
             ['浅白', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.556, 0.215, '好瓜'],            
             ['青绿', '稍蜷', '浊响', '清晰', '稍凹', '软粘', 0.403, 0.237, '好瓜'],               
             ['乌黑', '稍蜷', '浊响', '稍糊', '稍凹', '软粘', 0.481, 0.149, '好瓜'],                
             ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '硬滑', 0.437, 0.211, '好瓜'],
 
             ['乌黑', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑', 0.666, 0.091, '坏瓜'],
             ['青绿', '硬挺', '清脆', '清晰', '平坦', '软粘', 0.243, 0.267, '坏瓜'],
             ['浅白', '硬挺', '清脆', '模糊', '平坦', '硬滑', 0.245, 0.057, '坏瓜'],
             ['浅白', '蜷缩', '浊响', '模糊', '平坦', '软粘', 0.343, 0.099, '坏瓜'],
             ['青绿', '稍蜷', '浊响', '稍糊', '凹陷', '硬滑', 0.639, 0.161, '坏瓜'],  
             ['浅白', '稍蜷', '沉闷', '稍糊', '凹陷', '硬滑', 0.657, 0.198, '坏瓜'],
             ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '软粘', 0.360, 0.370, '坏瓜'],
             ['浅白', '蜷缩', '浊响', '模糊', '平坦', '硬滑', 0.593, 0.042, '坏瓜'],
             ['青绿', '蜷缩', '沉闷', '稍糊', '稍凹', '硬滑', 0.719, 0.103, '坏瓜']]
    testSet= ['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.697, 0.460] # 待测集
    labels = ['色泽', '根蒂', '敲声', '纹理', '脐部', '触感', '密度', '含糖率'] # 特征
    
    return dataSet, testSet, labels

dataSet:训练集;
testSet:待测集;
labels:样本所具有的特征的名称;

(3)计算连续属性的均值和标准差

#? 计算(不同类别中指定连续特征的)均值、标准差
def mean_std(feature, cla):
    dataSet, testSet, labels = loadDataSet()
    lst = [item[labels.index(feature)] for item in dataSet if item[-1]==cla]    # 类别为cla中指定特征feature组成的列表
    mean = round(np.mean(lst), 3)   # 均值
    std = round(np.std(lst), 3)     # 标准差
 
    return mean, std

feature:传入指定将要计算其均值的标准差的特征名称;
cla:传入条件概率的条件,计算指定分类cla下该特征的条件概率;
函数返回计算结果:均值mean、标准差std;

(4)计算先验概率

#? 计算先验概率P(c)
def prior():
    dataSet = loadDataSet()[0]  # 载入数据集
    countG = 0  # 初始化好瓜数量
    countB = 0  # 初始化坏瓜数量
    countAll = len(dataSet)
 
    for item in dataSet:    # 统计好瓜个数
        if item[-1] == "好瓜":
            countG += 1
    for item in dataSet:    # 统计坏瓜个数
        if item[-1] == "坏瓜":
            countB += 1
    
    # 计算先验概率P(c)
    P_G = round(countG/countAll, 3)
    P_B = round(countB/countAll, 3)
 
    return P_G,P_B

countG:统计训练集中好瓜的数量;
countB:统计训练集中坏瓜的数量;
countAll:训练集中所有样本的数量;
P_G:好瓜的先验概率;
P_B:坏瓜的先验概率;
函数返回计算出的先验概率P_G、P_B;

(5)计算离散属性的条件概率

#? 计算离散属性的条件概率P(xi|c)
def P(index, cla):
    dataSet, testSet, labels = loadDataSet()    # 载入数据集
    countG = 0  # 初始化好瓜数量
    countB = 0  # 初始化坏瓜数量
 
    for item in dataSet:    # 统计好瓜个数
        if item[-1] == "好瓜":
            countG += 1
    for item in dataSet:    # 统计坏瓜个数
        if item[-1] == "坏瓜":
            countB += 1
    
    lst = [item for item in dataSet if (item[-1] == cla) & (item[index] == testSet[index])] # lst为cla类中第index个属性上取值为xi的样本组成的集合
    P = round(len(lst)/(countG if cla=="好瓜" else countB), 3)  # 计算条件概率
 
    return P

index:用于根据待测集样本中特征值的索引位置在训练集中样本的对应索引位置上进行遍历;
cla:用于在训练集中限定样本的类别,便于计算离散属性各特征的条件概率;
countG:统计训练集中好瓜的数量;
countB:统计训练集中坏瓜的数量;
lst:为cla类别中第index个属性上取值为xi的样本组成的集合;
P:离散属性的条件概率;
函数返回计算出的条件概率P;

(6)计算连续属性的条件概率

#? 计算连续属性的条件概率p(xi|c)
def p():
    dataSet, testSet, labels = loadDataSet()    # 载入数据集
    denG_mean, denG_std = mean_std("密度", "好瓜")      # 好瓜密度的均值、标准差
    denB_mean, denB_std = mean_std("密度", "坏瓜")      # 坏瓜密度的均值、标准差
    sugG_mean, sugG_std = mean_std("含糖率", "好瓜")    # 好瓜含糖率的均值、标准差
    sugB_mean, sugB_std = mean_std("含糖率", "坏瓜")    # 坏瓜含糖率的均值、标准差
    # p(密度|好瓜)
    p_density_G = (1/(math.sqrt(2*math.pi)*denG_std))*np.exp(-(((testSet[labels.index("密度")]-denG_mean)**2)/(2*(denG_std**2))))
    p_density_G = round(p_density_G, 3)
    # p(密度|坏瓜)
    p_density_B = (1/(math.sqrt(2*math.pi)*denB_std))*np.exp(-(((testSet[labels.index("密度")]-denB_mean)**2)/(2*(denB_std**2))))
    p_density_B = round(p_density_B, 3)
    # p(含糖率|好瓜)
    p_sugar_G = (1/(math.sqrt(2*math.pi)*sugG_std))*np.exp(-(((testSet[labels.index("含糖率")]-sugG_mean)**2)/(2*(sugG_std**2))))
    p_sugar_G = round(p_sugar_G, 3)
    # p(含糖率|坏瓜)
    p_sugar_B = (1/(math.sqrt(2*math.pi)*sugB_std))*np.exp(-(((testSet[labels.index("含糖率")]-sugB_mean)**2)/(2*(sugB_std**2))))
    p_sugar_B = round(p_sugar_B, 3)
 
    return p_density_G, p_density_B, p_sugar_G, p_sugar_B

denG_mean:好瓜密度的均值;
denG_std:好瓜密度的标准差;
denB_mean:坏瓜密度的均值;
denB_std:坏瓜密度的标准差;
sugG_mean:好瓜含糖率的均值;
sugG_std:好瓜含糖率的标准差;
sugB_mean:坏瓜含糖率的均值;
sugB_std:坏瓜含糖率的标准差;
p_density_G:好瓜条件下对于密度这一特征的条件概率;
p_density_B:坏瓜条件下对于密度这一特征的条件概率;
p_sugar_G:好瓜条件下对于含糖率这一特征的条件概率;
p_sugar_B:坏瓜条件下对于含糖率这一特征的条件概率;
函数返回连续属性的条件概率;

(7)计算后验概率

#? 预测后验概率P(c|xi)
def bayes():
    #? 计算类先验概率
    P_G, P_B = prior()
    #? 计算离散属性的条件概率
    P0_G = P(0, "好瓜") # P(青绿|好瓜)
    P0_B = P(0, "坏瓜") # P(青绿|坏瓜)
    P1_G = P(1, "好瓜") # P(蜷缩|好瓜)
    P1_B = P(1, "坏瓜") # P(蜷缩|好瓜)
    P2_G = P(2, "好瓜") # P(浊响|好瓜)
    P2_B = P(2, "坏瓜") # P(浊响|好瓜)
    P3_G = P(3, "好瓜") # P(清晰|好瓜)
    P3_B = P(3, "坏瓜") # P(清晰|好瓜)
    P4_G = P(4, "好瓜") # P(凹陷|好瓜)
    P4_B = P(4, "坏瓜") # P(凹陷|好瓜)
    P5_G = P(5, "好瓜") # P(硬滑|好瓜)
    P5_B = P(5, "坏瓜") # P(硬滑|好瓜)
    #? 计算连续属性的条件概率
    p_density_G, p_density_B, p_sugar_G, p_sugar_B = p()
 
    #? 计算后验概率
    isGood = P_G * P0_G * P1_G * P2_G * P3_G * P4_G * P5_G * p_density_G * p_sugar_G    # 计算是好瓜的后验概率
    isBad = P_B * P0_B * P1_B * P2_B * P3_B * P4_B * P5_B * p_density_B * p_sugar_B     # 计算是坏瓜的后验概率
 
    return isGood,isBad

调用prior()函数计算先验概率;
调用P()函数计算离散属性的条件概率;
调用p()函数计算连续属性的条件概率;
isGood:好瓜的后验概率;
isBad:坏瓜的后验概率;
函数返回后验概率的计算结果isGood、isBad;

(8)主函数调用上述函数模块

if __name__=='__main__':
    dataSet, testSet, labels = loadDataSet()
    testSet = [testSet]
    df = pd.DataFrame(testSet, columns=labels, index=[1])
    print("=======================待测样本========================")
    print(f"待测集:\n{df}")
 
    isGood, isBad = bayes()
    print("=======================后验概率========================")
    print("后验概率:")
    print(f"P(好瓜|xi) = {isGood}")
    print(f"P(好瓜|xi) = {isBad}")
    print("=======================预测结果========================")
    print("predict ---> 好瓜" if (isGood > isBad) else "predict ---> 坏瓜")

输出为:
在这里插入图片描述
从上图的终端输出结果可以看到待测样本的各个属性值,然后可以看到后验概率的计算结果,最后是预测结果,此样本的预测结果为“好瓜”。

此训练集与待测样本是“朴素贝叶斯西瓜集分类案例”的数据,通过比较最终的两个预测结果一致,也可表明朴素贝叶斯分类器编写代码基本正确。

完整代码
#! 朴素贝叶斯分类器_西瓜集分类
import numpy as np
import math
import pandas as pd
 
#? 加载数据集
def loadDataSet():
    dataSet=[['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.697, 0.460, '好瓜'],
             ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', 0.774, 0.376, '好瓜'],
             ['乌黑', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.634, 0.264, '好瓜'],
             ['青绿', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', 0.608, 0.318, '好瓜'],
             ['浅白', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.556, 0.215, '好瓜'],            
             ['青绿', '稍蜷', '浊响', '清晰', '稍凹', '软粘', 0.403, 0.237, '好瓜'],               
             ['乌黑', '稍蜷', '浊响', '稍糊', '稍凹', '软粘', 0.481, 0.149, '好瓜'],                
             ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '硬滑', 0.437, 0.211, '好瓜'],
 
             ['乌黑', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑', 0.666, 0.091, '坏瓜'],
             ['青绿', '硬挺', '清脆', '清晰', '平坦', '软粘', 0.243, 0.267, '坏瓜'],
             ['浅白', '硬挺', '清脆', '模糊', '平坦', '硬滑', 0.245, 0.057, '坏瓜'],
             ['浅白', '蜷缩', '浊响', '模糊', '平坦', '软粘', 0.343, 0.099, '坏瓜'],
             ['青绿', '稍蜷', '浊响', '稍糊', '凹陷', '硬滑', 0.639, 0.161, '坏瓜'],  
             ['浅白', '稍蜷', '沉闷', '稍糊', '凹陷', '硬滑', 0.657, 0.198, '坏瓜'],
             ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '软粘', 0.360, 0.370, '坏瓜'],
             ['浅白', '蜷缩', '浊响', '模糊', '平坦', '硬滑', 0.593, 0.042, '坏瓜'],
             ['青绿', '蜷缩', '沉闷', '稍糊', '稍凹', '硬滑', 0.719, 0.103, '坏瓜']]
    testSet= ['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', 0.697, 0.460] # 待测集
    labels = ['色泽', '根蒂', '敲声', '纹理', '脐部', '触感', '密度', '含糖率'] # 特征
    
    return dataSet, testSet, labels
 
#? 计算(不同类别中指定连续特征的)均值、标准差
def mean_std(feature, cla):
    dataSet, testSet, labels = loadDataSet()
    # 类别为cla中指定特征feature组成的列表
    lst = [item[labels.index(feature)] for item in dataSet if item[-1]==cla]    
    mean = round(np.mean(lst), 3)   # 均值
    std = round(np.std(lst), 3)     # 标准差
 
    return mean, std
 
#? 计算先验概率P(c)
def prior():
    dataSet = loadDataSet()[0]  # 载入数据集
    countG = 0  # 初始化好瓜数量
    countB = 0  # 初始化坏瓜数量
    countAll = len(dataSet)
 
    for item in dataSet:    # 统计好瓜个数
        if item[-1] == "好瓜":
            countG += 1
    for item in dataSet:    # 统计坏瓜个数
        if item[-1] == "坏瓜":
            countB += 1
    
    # 计算先验概率P(c)
    P_G = round(countG/countAll, 3)
    P_B = round(countB/countAll, 3)
 
    return P_G,P_B
 
#? 计算离散属性的条件概率P(xi|c)
def P(index, cla):
    dataSet, testSet, labels = loadDataSet()    # 载入数据集
    countG = 0  # 初始化好瓜数量
    countB = 0  # 初始化坏瓜数量
 
    for item in dataSet:    # 统计好瓜个数
        if item[-1] == "好瓜":
            countG += 1
    for item in dataSet:    # 统计坏瓜个数
        if item[-1] == "坏瓜":
            countB += 1
    
    lst = [item for item in dataSet if (item[-1] == cla) & (item[index] == testSet[index])] # lst为cla类中第index个属性上取值为xi的样本组成的集合
    P = round(len(lst)/(countG if cla=="好瓜" else countB), 3)  # 计算条件概率
 
    return P
 
#? 计算连续属性的条件概率p(xi|c)
def p():
    dataSet, testSet, labels = loadDataSet()    # 载入数据集
    denG_mean, denG_std = mean_std("密度", "好瓜")      # 好瓜密度的均值、标准差
    denB_mean, denB_std = mean_std("密度", "坏瓜")      # 坏瓜密度的均值、标准差
    sugG_mean, sugG_std = mean_std("含糖率", "好瓜")    # 好瓜含糖率的均值、标准差
    sugB_mean, sugB_std = mean_std("含糖率", "坏瓜")    # 坏瓜含糖率的均值、标准差
    # p(密度|好瓜)
    p_density_G = (1/(math.sqrt(2*math.pi)*denG_std))*np.exp(-(((testSet[labels.index("密度")]-denG_mean)**2)/(2*(denG_std**2))))
    p_density_G = round(p_density_G, 3)
    # p(密度|坏瓜)
    p_density_B = (1/(math.sqrt(2*math.pi)*denB_std))*np.exp(-(((testSet[labels.index("密度")]-denB_mean)**2)/(2*(denB_std**2))))
    p_density_B = round(p_density_B, 3)
    # p(含糖率|好瓜)
    p_sugar_G = (1/(math.sqrt(2*math.pi)*sugG_std))*np.exp(-(((testSet[labels.index("含糖率")]-sugG_mean)**2)/(2*(sugG_std**2))))
    p_sugar_G = round(p_sugar_G, 3)
    # p(含糖率|坏瓜)
    p_sugar_B = (1/(math.sqrt(2*math.pi)*sugB_std))*np.exp(-(((testSet[labels.index("含糖率")]-sugB_mean)**2)/(2*(sugB_std**2))))
    p_sugar_B = round(p_sugar_B, 3)
 
    return p_density_G, p_density_B, p_sugar_G, p_sugar_B
 
#? 预测后验概率P(c|xi)
def bayes():
    #? 计算类先验概率
    P_G, P_B = prior()
    #? 计算离散属性的条件概率
    P0_G = P(0, "好瓜") # P(青绿|好瓜)
    P0_B = P(0, "坏瓜") # P(青绿|坏瓜)
    P1_G = P(1, "好瓜") # P(蜷缩|好瓜)
    P1_B = P(1, "坏瓜") # P(蜷缩|好瓜)
    P2_G = P(2, "好瓜") # P(浊响|好瓜)
    P2_B = P(2, "坏瓜") # P(浊响|好瓜)
    P3_G = P(3, "好瓜") # P(清晰|好瓜)
    P3_B = P(3, "坏瓜") # P(清晰|好瓜)
    P4_G = P(4, "好瓜") # P(凹陷|好瓜)
    P4_B = P(4, "坏瓜") # P(凹陷|好瓜)
    P5_G = P(5, "好瓜") # P(硬滑|好瓜)
    P5_B = P(5, "坏瓜") # P(硬滑|好瓜)
    #? 计算连续属性的条件概率
    p_density_G, p_density_B, p_sugar_G, p_sugar_B = p()
 
    #? 计算后验概率
    isGood = P_G * P0_G * P1_G * P2_G * P3_G * P4_G * P5_G * p_density_G * p_sugar_G    # 计算是好瓜的后验概率
    isBad = P_B * P0_B * P1_B * P2_B * P3_B * P4_B * P5_B * p_density_B * p_sugar_B     # 计算是坏瓜的后验概率
    '''print(P_G)
    print(P_B)
    print(P0_G)
    print(P0_B)
    print(P1_G)
    print(P1_B)
    print(P2_G)
    print(P2_B)
    print(P3_G)
    print(P3_B)
    print(P4_G)
    print(P4_B)
    print(P5_G)
    print(P5_B)
    print(p_density_G)
    print(p_density_B)
    print(p_sugar_G)
    print(p_sugar_B)'''
 
    return isGood,isBad
 
if __name__=='__main__':
    # 
    dataSet, testSet, labels = loadDataSet()
    testSet = [testSet]
    df = pd.DataFrame(testSet, columns=labels, index=[1])
    print("=======================待测样本========================")
    print(f"待测集:\n{df}")
 
    isGood, isBad = bayes()
    print("=======================后验概率========================")
    print("后验概率:")
    print(f"P(好瓜|xi) = {isGood}")
    print(f"P(好瓜|xi) = {isBad}")
    print("=======================预测结果========================")
    print("predict ---> 好瓜" if (isGood > isBad) else "predict ---> 坏瓜")
使用sklearn

在scikit-learn中,一共有3个朴素贝叶斯的分类算法类。分别是GaussianNB,MultinomialNB和BernoulliNB。其中GaussianNB就是先验为高斯分布的朴素贝叶斯,MultinomialNB就是先验为多项式分布的朴素贝叶斯,而BernoulliNB就是先验为伯努利分布的朴素贝叶斯。

GaussianNB实现
# 加载数据集
print("=======================加载数据集========================")
from sklearn import datasets
iris = datasets.load_iris()
print("---iris.data[0:5],iris.target[0:5]---")
print(iris.data[0:5],iris.target[0:5])
print("---iris.data[145:],iris.target[145:]---")
print(iris.data[145:],iris.target[145:])
# 分割数据集
print("=======================分割数据集========================")
from sklearn.model_selection import train_test_split
# iris.data是特征值 iris.target是标签值 test_size表示测试集的比例 random_state表示随机数种子
# 随机数种子相同,每次生成的随机数也相同
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=0)
print("---X_train,y_train---")
print(len(X_train),len(y_train))
print(X_train[0:5],y_train[0:5])
print("---X_test,y_test---")
print(len(X_test),len(y_test))
print(X_test[0:5],y_test[0:5])

# 构建模型
print("=======================构建模型========================")
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
# 训练模型
print("=======================训练模型========================")
clf.fit(X_train, y_train)
# 验证模型
print("=======================手写评价函数 验证模型========================")
y_train_pred = clf.predict(X_train)
print("---y_train_pred---")
print(y_train_pred)
print("---y_train---")
print(y_train)
# 计算准确率的函数
def accuracy(y_train, y_train_pred):
    c_num=0
    for i in range(len(y_train)):
        if y_train[i] != y_train_pred[i]:
            print("第",i,"个样本预测错误")
        else:
            c_num+=1
    # 返回总样本数,正确样本数,准确率
    return len(X_train),c_num,(c_num)/len(X_train)
total_len,correct_len,acc=accuracy(y_train, y_train_pred)

print("高斯朴素贝叶斯,样本总数: %d 正确样本数 : %d" % (total_len,correct_len))
# 输出准确率
print("准确率",acc)

print("=======================使用模型的score评价模型========================")
# 使用sklearn计算准确率
print("clf.score(X_train, y_train)--> ",clf.score(X_train, y_train))

# 预测
print("=======================使用metrics模块 评价模型========================")
y_pred = clf.predict(X_test)
print("---y_pred---")
print(y_pred)
print("---y_test---")
print(y_test)
# 导入评价指标
from sklearn import metrics
# 计算准确率
print("=======================计算准确率========================")
print("GaussianNB 准确率:",metrics.accuracy_score(y_test, y_pred))


# 保存模型
print("=======================保存模型========================")
import pickle
# 保存模型
with open('bys_model.pkl', 'wb') as f:
    pickle.dump(clf, f)
# 采用joblib方式保存模型
import joblib
joblib.dump(clf, 'bys_model2.pkl')


# 加载模型
print("=======================加载模型========================")
with open('bys_model.pkl', 'rb') as f:
    clf2 = pickle.load(f)
# 采用joblib方式加载模型
joblib_clf2 = joblib.load('bys_model2.pkl')

# 输出模型的内容
print("=======================输出模型的内容========================")
print("clf2--->",clf2)
print("joblib_clf2--->",joblib_clf2)

# 预测
print("=======================预测========================")
y_pred2 = clf2.predict(X_test)
joblib_clf2_y_pred2 = joblib_clf2.predict(X_test)
print("=======================计算加载模型准确率========================")
print("pickle模型准确率:",metrics.accuracy_score(y_test, y_pred2))
print("joblib_clf2模型准确率:",metrics.accuracy_score(y_test, joblib_clf2_y_pred2))

输出为:
在这里插入图片描述在这里插入图片描述

MultinomialNB实现
# 构建模型
print("=======================构建模型========================")
from sklearn.naive_bayes import GaussianNB,MultinomialNB,BernoulliNB
# clf = GaussianNB()
clf = MultinomialNB()
# clf = BernoulliNB()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

BernoulliNB 伯努利分布
# 构建模型
print("=======================构建模型========================")
from sklearn.naive_bayes import GaussianNB,MultinomialNB,BernoulliNB
# clf = GaussianNB()
# clf = MultinomialNB()
clf = BernoulliNB()

输出为:
在这里插入图片描述
在这里插入图片描述

确定方向过程

针对完全没有基础的同学们
1.确定机器学习的应用领域有哪些
2.查找机器学习的算法应用有哪些
3.确定想要研究的领域极其对应的算法
4.通过招聘网站和论文等确定具体的技术
5.了解业务流程,查找数据
6.复现经典算法
7.持续优化,并尝试与对应企业人员沟通心得
8.企业给出反馈


http://www.kler.cn/a/595547.html

相关文章:

  • 电脑自动关机故障维修案例分享
  • FRP在远程办公中的实战应用
  • 23种设计模式(扩展)
  • HUGO介绍、安装、以及使用
  • 视频翻译器免费哪个好?轻松玩转视频直播翻译
  • 用 pytorch 从零开始创建大语言模型(五):预训练无标注数据
  • 自适应柔顺性策略:扩散引导控制中学习近似的柔顺
  • wordpress表单插件CF7调用方式
  • 防止重复点击方法总结-微信小程序
  • 基于ChatGPT、GIS与Python机器学习的地质灾害风险评估、易发性分析、信息化建库及灾后重建高级实践
  • 【视觉提示学习】3.21论文随想
  • ensp 公司组网拓扑图
  • scrapy入门(深入)
  • SpringCloud负载均衡:Ribbon核心组件与策略配置
  • 理解 Node.js 中的 process`对象与常用操作
  • 每日一题力扣2974.最小数字游戏c++
  • Kafka是如何实现幂等性的??
  • Unity Shader编程】之渲染流程之深度及pass详解
  • JAVA关于String字符串
  • [极客大挑战 2019]BabySQL—3.20BUUCTF练习day4(3)