机器学习——贝叶斯算法
前言个人学习记录摘要贝叶斯算法在人工智能中可用于分类和回归通过计算条件概率来预测新数据的类别。以离散数据为例给定特征a、b、c和类别d利用贝叶斯公式计算已知特征下属于各类别的概率比较概率大小确定类别。计算时忽略分母只需求分子部分即先验概率与条件概率的乘积其中条件概率通过统计已知类别下特征出现的频率得出。贝叶斯算法更适合离散型数据连续型数据无法直接处理。其API简单参数几乎无需调整在鸢尾花数据集上效果差实际主要应用于自然语言处理。贝叶斯公式1.贝叶斯公式是一个简单的数学公式在高等数学中学习过。2.在人工智能中贝叶斯公式用于计算概率并应用于贝叶斯模型中用于分类或回归。贝叶斯算法应用1.假设有一组数据包含特征a、b、c和类别d。2.数据中有六条记录特征a为一特征b为零特征c为一结果为零。3.目标是计算特征a为一特征b为一特征c为零的数据属于哪个类别。贝叶斯算法计算步骤1.计算特征a1b1c0属于类别零的概率。2.计算特征a1b1c0属于类别一的概率。3.比较两个概率的大小概率更高的类别即为所属类别。贝叶斯公式的应用1.将贝叶斯公式应用于具体计算中通过互换位置来计算概率。2.计算分母相同的两个概率值只需比较分子部分。3.利用已知数据的频率来估计概率值。贝叶斯算法的API1.贝叶斯算法的API很少且参数几乎不需要调整。2.贝叶斯算法从sklearn的naive_bayes中导入。3.使用贝叶斯算法对鸢尾花数据集进行分类正确率可能不高。多项式朴素贝叶斯# 导入pandas库用于读取csv数据文件、处理表格数据 import pandas as pd # 导入数据集划分工具将数据切分为训练集和测试集 from sklearn.model_selection import train_test_split # 导入多项式朴素贝叶斯分类器 from sklearn.naive_bayes import MultinomialNB # 读取鸢尾花数据集iris.csv df pd.read_csv(iris.csv) # X取出全部列除去最后一列作为特征数据花瓣、花萼长宽 X df.iloc[:,:-1] # y取出最后一列作为标签鸢尾花的类别 y df.iloc[:,-1] # 划分训练集、测试集 # test_size0.2测试集占总数据20%训练集占80% # random_state1设置随机种子保证每次运行切分结果一致 X_train,X_test,y_train,y_test train_test_split(X,y,test_size0.2,random_state1) # 实例化多项式朴素贝叶斯模型 # alpha1拉普拉斯平滑系数防止特征概率为0 clf MultinomialNB(alpha1) # 使用训练集数据训练模型传入特征和对应的标签 clf.fit(X_train,y_train) # 在测试集上计算模型预测准确率 score clf.score(X_test,y_test) # 打印输出测试集准确率 print(测试集准确率,score)高斯朴素贝叶斯# 导入pandas库用于读取csv数据文件、处理表格数据 import pandas as pd # 导入数据集划分工具将数据切分为训练集和测试集 from sklearn.model_selection import train_test_split # 改成高斯朴素贝叶斯专门处理连续数值特征 from sklearn.naive_bayes import GaussianNB # 读取鸢尾花数据集iris.csv df pd.read_csv(iris.csv) # X取出全部列除去最后一列作为特征数据花瓣、花萼长宽 X df.iloc[:,:-1] # y取出最后一列作为标签鸢尾花的类别 y df.iloc[:,-1] # 划分训练集、测试集 # test_size0.2测试集占总数据20%训练集占80% # random_state1设置随机种子保证每次运行切分结果一致 X_train,X_test,y_train,y_test train_test_split(X,y,test_size0.2,random_state1) # 实例化高斯朴素贝叶斯模型不需要alpha参数 clf GaussianNB() # 使用训练集数据训练模型传入特征和对应的标签 clf.fit(X_train,y_train) # 在测试集上计算模型预测准确率 score clf.score(X_test,y_test) # 打印输出测试集准确率 print(测试集准确率,score) from sklearn.metrics import classification_report # 对测试集做预测 y_pred clf.predict(X_test) # 输出精确率、召回率、F1分数 print(classification_report(y_test,y_pred))对比项GaussianNB高斯朴素贝叶斯MultinomialNB多项式朴素贝叶斯适用数据连续数值特征长度、宽度、测量值鸢尾花离散计数、非负整数特征词频、单词出现次数垃圾邮件、文本分类核心假设特征服从高斯正态分布特征服从多项式分布统计样本出现次数关键参数无alpha参数alpha 平滑系数一般alpha1做拉普拉斯平滑防止概率为 0鸢尾花数据集表现效果更好符合数据本身分布准确率更高可以运行但模型不匹配数据分布效果略差垃圾邮件 / 文本不适合文本场景首选模型专门处理词数统计数据约束可支持正数、负数不能出现负数输入必须≥0