MachineLearning---PNN
2015-06-30 09:34
302 查看
MachineLearning---PNN
引言
这篇将介绍machine learning中另一个较为经典的一个算法。之前介绍的几个算法(Backpropagation、LMS……)这些算法有一个明显的特点就是,它们都需要先训练算法,都会通过训练数据集调整算法的内部参数。这次介绍的算法就摆脱了这种过程。
一、PNN算法基本介绍
1.算法思想
PNN(ProbabilisticNeural Networks)是一种较为出色的分类算法。算法利用已分类的数据集,对未分类数据进行计算,得到“激活值”(Activation),在找出利用Winner Take All的原则,找到分类。
对于如何计算激活值下面会进行详细介绍。
2.激活值计算公式
隐藏层节点激活值,这里的隐藏层也便是样本集合(已分类的数据集)。上诉中
是隐藏层第i个节点的激活值,
便是已分类的数据集,F表示带分类的数据。
输出端节点的激活值。
其中
便是第j个分类的输出端激活值;N表示样本数据(已分类)的数量;
便是上面计算的隐藏层节点的激活值;
是光滑参数。
3.算法流程
对于这个算法的流程也是比较好理解:1.遍历类别;
2.遍历类别中的样本数据;
3.利用公式(1)对隐藏层节点激活值进行计算
4.利用公式(2)对当前分类,计算其激活值;
5.对所有类别激活值,进行比较,找出最大的,并返回类别序号。
二、算法实现
在这里提供这个算法的实现代码:[cpp] view
plaincopyprint?
int pnn_classify()
{
double output[CLASSNUM];
for(int c = 0 ; c< CLASSNUM ; ++c)
{
output[c]= 0.0;
for(int e = 0 ; e< EXAMPLENUM ; ++e)
{
double h = 0.0;
for(int d = 0 ; d< DIMENSIONALITY ; ++d)
{
h+= example[d] * dataset[c].example[e].f[d];
}
output[c]= exp((h-1.0)/pow(sigma,2));
}
output[c]= output[c] / (double)EXAMPLENUM;
}
//winner take all
double maxActivation = 0.0;
int iCMax = 0;
for (int c = 0 ; c< CLASSNUM ; ++c)
{
if(maxActivation < output[c])
{
iCMax= c;
maxActivation= output[c];
}
}
return iCMax;
}
相关文章推荐
- FTP服务器的搭建
- Unity3D的Android移动之路之了解触控
- 安装及汉化并使用Crowd2.7集成Confluence5.3与JIRA6.1,实现单点登录
- generate hss profile via shell
- Apache Shiro 使用手册(二)Shiro 认证
- EAS常用工具类
- mysql的锁表问题
- apache httpd.conf配置详解
- Machine Learning---Backpropagation
- 使用VS2010创建MFC ActiveX工程项目
- ffff
- Linux信号(signal) 机制分析
- 随记数组和javascript的技巧
- 微信浏览器自带的返回上一页的停留位置 scrollTop
- 字符串数组的全排列——数组
- Android中的APK,TASK,PROCESS,USERID之间的关系
- VC++ 文件操作
- 微信浏览器自带的返回上一页的停留位置 scrollTop
- Machine Learning---LMS 算法数学说明
- Good habits about programming