1、贝叶斯决
假设对于测试样本
x
x
x,共有
m
m
m中类别可能
{
w
1
,
⋯
,
w
m
}
\{ w_1 , ⋯ , w _m\}
{w1,⋯,wm},则判断样本类别的贝叶斯决策是:
max
{
p
(
w
1
∣
x
)
,
p
(
w
2
∣
x
)
,
⋯
,
p
(
w
m
∣
x
)
}
\max \{ p({w_1}\left| x \right.),p({w_2}\left| x \right.), \cdots ,p({w_m}\left| x \right.)\}
max{p(w1∣x),p(w2∣x),⋯,p(wm∣x)}
2、PNN网络
如下图所示,假设特征有三个维度,被分为三大类。
首先我们计算待分类数据到各个子类中心
{
x
11
.
.
.
x
33
}
\{x_{11}... x_{33}\}
{x11...x33}的距离,并使用高斯核函数作为映射函数,计算结果
{
y
11
.
.
.
y
33
}
\{y_{11}... y_{33}\}
{y11...y33}视为到该子类的概率。然后对属于某一大类下的所有子类概率进行求和,得到数据属于该大类的概率
g
g
g,最后使用贝叶斯决策进行类别判断。
颜色判别案例
假设我们要将下列图像分割为前景色和背景色两大类(即二值化图像):
运用PNN神经网络分类像素点的颜色RBG值,将接近蓝色或者背景中出现的其他颜色分为A类,表示背景色;将接近白色的颜色分为B类,表示车牌号色。
再用0、1这两个数值来表示A类、B类,重新设置图片中像素的颜色实现了车牌号图像的二值化。
模式层里的每个神经元代表一种样本颜色
可以看到即使训练完了再添加其他样本颜色非常方便,只要添加一个神经元即可无须改动先前训练好的神经网络,这也是PNN神经网络的一个很大的优势
神经网络结构实现的伪代码如下:
号码颜色模式总数countHM;
背景颜色模式总数countBJ;
分类模式总数:countN=countBJ+countHM
double w[countN][3];//R、G、B三个维度
int a[countN][2];//A、B两类
PNN神经网络判别某个像素的类别:
{
FOR 每个模式层单元 j
计算某个像素归一化颜色值:
w[j][Xr,b,g]= X{r,b,g}/ sqrt(Xr*Xr+Xb*Xb+Xg*Xg);
判断像素所属类别:
IF 颜色属于车牌号码 a[j][1]=1;
IF 颜色属于车牌背景 a[j][0]=1;
}
PNN 神经网络图像分类算法为代码:
{
FOR 每一行
FOR 每一列
BJ=0
HM=0
判断该像素点所属类别 estimate(Xr,b,g):
{
FOR 每一个模式层神经元{
计算相似度
net=w[i][0]*Xr+w[i][1]*Xb+w[i][2]*Xg;
高斯核映射为概率:
pnet=exp((net-1)/(Q * Q)); //Q为判别颜色相似窗口大小
累计该子类所属的大类概率:
IF (a[i][0] == 1)
BJ +=pnet
IF (a[i][1] == 1)
HM +=pnet
}
取得max的类别,如果 BJ 则为背景,否则就是号码;
//在BJ于HM 取相同值时默认为号码类
IF BJ >= HM
Val=0
ELSE
Val=1
}
分类结果为: