搜索
人大经济论坛 附件下载

附件下载

所在主题:
文件名:  pNN概率神经网络(基于C语言伪码和Matlab代码).pdf
资料下载链接地址: https://bbs.pinggu.org/a-1860986.html
附件大小:
503.36 KB   举报本内容
一个较好的概率神经网络资源算法:[hide][/hide]

1.1首先需要构造归一化函数:

[hide]
  1. #function
  2. #基于高斯核函数
  3. #首先是矩阵的归于化的函数
  4. #模仿matlab的归一化mapminmax函数
  5. #将范围缩小至minNum和maxNum之间
  6. mapminmaxDirect<-function(xData, minNum , maxNum)
  7. {
  8. if(!is.matrix(xData))
  9. {
  10. stop('error input current data')
  11. }

  12. N<-nrow(xData)

  13. #每列的最大最小值
  14. maxX <- matrix(apply(xData,2,max),nrow = 1)

  15. minX <- matrix(apply(xData,2,min),nrow = 1)

  16. #针对x的数据进行转换
  17. maxXMat <- matrix(rep(maxX , N),nrow = N ,byrow = TRUE)
  18. minXMat <- matrix(rep(minX , N),nrow= N , byrow = TRUE)

  19. #转换为新的数据
  20. xTransform <- (maxNum - minNum)/(maxXMat - minXMat)*(xData - minXMat)+
  21. minNum
  22. result<-list()

  23. #返回的结果

  24. result$maxNum<-maxNum
  25. result$minNum <- minNum
  26. result$xTransform <- xTransform
  27. result$minX<-minX
  28. result$maxX <- maxX

  29. return(result)

  30. }
复制代码


[/hide]

随后是反归一化函数

[hide]
  1. #数据进行归一化当然还需要进行反归一化
  2. #反归一化函数
  3. mapminmaxReverse<-function(xData , modelMapminmax)
  4. {
  5. if(!is.list(modelMapminmax))
  6. {
  7. stop('error input data')
  8. }

  9. if (!setequal(c("maxNum","minNum","xTransform","minX","maxX" ),
  10. names(modelMapminmax)))
  11. {
  12. stop('error input data list')
  13. }

  14. N <- nrow(xData)

  15. maxX<-modelMapminmax$maxX
  16. minX<-modelMapminmax$minX
  17. maxNum<-modelMapminmax$maxNum
  18. minNum<-modelMapminmax$minNum

  19. maxXMat <- matrix(rep(maxX , N),nrow = N ,byrow = TRUE)
  20. minXMat <- matrix(rep(minX , N),nrow= N , byrow = TRUE)

  21. preX<-(xData - minNum)/(maxNum - minNum)*(maxXMat - minXMat)+minXMat
  22. return(preX)


  23. }


  24. #数据的重归一化
  25. mapminmaxPre<-function(xData , modelMapminmax)
  26. {
  27. if(!is.list(modelMapminmax))
  28. {
  29. stop('error input data')
  30. }

  31. if (!setequal(c("maxNum","minNum","xTransform","minX","maxX" ),
  32. names(modelMapminmax)))
  33. {
  34. stop('error input data list')
  35. }

  36. maxX<-modelMapminmax$maxX
  37. minX<-modelMapminmax$minX
  38. maxNum<-modelMapminmax$maxNum
  39. minNum<-modelMapminmax$minNum

  40. N<-nrow(xData)

  41. maxXMat <- matrix(rep(maxX , N),nrow = N ,byrow = TRUE)
  42. minXMat <- matrix(rep(minX , N),nrow= N , byrow = TRUE)

  43. #转换为新的数据
  44. xNew <- (maxNum - minNum)/(maxXMat - minXMat)*(xData - minXMat)+
  45. minNum
  46. return(xNew)

  47. }


  48. #归一化函数的检测
  49. xData <- matrix(rnorm(100,mean = 0,sd = 1),nrow = 25)
  50. #-1至1之间的归一化
  51. result<-mapminmaxDirect(xData , -1 ,1)
  52. #反归一化
  53. mapminmaxReverse(result$xTransform , result)
  54. xNewData<-matrix(rnorm(60,mean = 0,sd = 1),nrow = 15)
  55. mapminmaxPre(xNewData , result)
复制代码


[/hide]


1.2 概率神经网络(PNN)源码:
[hide]
  1. #概率神经网络
  2. pnn<-function(xData , classX , testData ,Sigma)
  3. {
  4. if(!is.matrix(xData) || !is.matrix(classX) || !is.matrix(testData))
  5. {
  6. stop('error input current data')
  7. }

  8. if(ncol(xData)!=ncol(testData))
  9. {
  10. stop('error input data')
  11. }

  12. nxData<-nrow(xData)
  13. ntestData<-nrow(testData)

  14. disMatrix<-matrix(0,ntestData , nxData)

  15. #首先将数据进行归一化

  16. minNum <-(-1)
  17. maxNum <- 1

  18. result<-mapminmaxDirect(xData ,minNum , maxNum )
  19. xNewData <- result$xTransform
  20. testNewData<-mapminmaxPre(testData , result)

  21. #首先计算disMatrix
  22. for (i in c(1:ntestData))
  23. {
  24. oneTest<-testNewData[i,,drop = FALSE]
  25. oneTestMat <- matrix(rep(oneTest , nxData),nrow = nxData , byrow = TRUE)
  26. #采用欧式距离
  27. disMatrix[i,]<-sqrt(apply((oneTestMat - xNewData)^2,1,sum))

  28. }
  29. #初始概率矩阵
  30. probMatrix<-exp(-disMatrix/(2*Sigma^2))

  31. totalClass <-sort(unique(classX))

  32. lastProbMatrix<-matrix(0,ntestData , length(totalClass))

  33. for (i in c(1:ntestData))
  34. {
  35. pro<-probMatrix[i,,drop = FALSE]
  36. for (jin c(1:length(totalClass)))
  37. {
  38. ijIndex<-which(classX == totalClass[j])
  39. lastProbMatrix[i,j]<-sum(pro[ijIndex])
  40. }

  41. }

  42. #最后根据lastProbMatrix进行评价
  43. pos<-apply(lastProbMatrix,1,which.max)
  44. return(pos)

  45. }
复制代码


[/hide]

一个Demo:
  1. Sigma<-1

  2. xData1 <-matrix(runif(10,0,1),ncol = 2)
  3. xData2<-matrix(runif(10,1,2),ncol = 2)
  4. xData3 <-matrix(runif(10,2,3),ncol = 2)
  5. xData<-rbind(xData1,xData2,xData3)

  6. classX<-rbind(matrix(1,nrow = 5),matrix(2,nrow = 5),
  7. matrix(3,nrow = 5))
  8. testData1 <-matrix(runif(10,0,1),ncol = 2)
  9. testData2<-matrix(runif(10,1,2),ncol = 2)
  10. testData3 <-matrix(runif(10,2,3),ncol = 2)
  11. testData<-rbind(testData3,testData2,testData1)
  12. pnn(xData , classX , testData ,Sigma)
  13. #ans [1] 3 3 3 3 3 2 2 2 2 2 1 1 1 1 1
  14. #eof
复制代码





    熟悉论坛请点击新手指南
下载说明
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。
2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。
3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。
(如有侵权,欢迎举报)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

GMT+8, 2025-12-25 12:24