基于C++的朴素贝叶斯分类器
基于C++的朴素贝叶斯分类器
github链接 使用c++编写的朴素贝叶斯分类器,其中似然中的离散分量,以及先验概率使用拉普拉斯平滑,连续分量为正态分布。
警告,此代码仅为初学学习之用,请勿用作任何工程项目!
一、跑起来
方式一
使用vscode+cmake插件或者Clion打开目录。然后直接编译运行。
方式二
1、确保安装cmake环境,没有请先装cmake。 2、在工程目录下键入:
1 |
|
3、运行build目录下的程序Bayers_classifier程序
二、用起来
1、建立模型 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Simple_Bayes_Classifier::Info info;
/**
struct Info {
int sample_num; // 样例数量
std::vector<int> header; // 样例格式,
// 如当前分量为离散值则为样例可能取值的数量,
// 如为连续值则填0,
// 例如,现有样例格式为这样 :
// x0 属于 {"东","南","西","北"}
// x1 属于 {"左","右"}
// x2 属于 {x|0<x<100} 为连续值
// 则 header={4, 2, 0}
int class_num; // 分类数量
int sample_size; // 样例分量维度大小
}
*/
Simple_Bayes_Classifier model(info);1
model.train("data/1.txt"); // 文件格式为:每行一个样例,每个样例n个分量用空格隔开,最后为该样例所属分类
3、开始分类, 构造出一个待分类的样例,然后分类结果赋值到样例的belong_to字段 1
2
3
4Sample s;
s.add_parameter(x); s.add_parameter(y);
model.classify(s);
std::cout << s.belong_to << std::endl;
三、学起来
贝叶斯分类器的基石为Bayes公式:
若现在存在样例的向量为
其中,我们把
而
所以我们可以忽略证据,针对每个待分类的样例,对每种分类计算先验概率和似然即可。
先验概率
其中
而计算较为困难的是似然
此时即可进行运算,这里如果
其中
而如果
其中
至此我们解决了朴素贝叶斯分类器。
在有些时候,向量
其中
这里我们将结果取对数
此时有决策函数: