楼主: fantuanxiaot
15029 81

[R] [原创]基于Matlab和R的增量校正决策器算法 [推广有奖]

回帖奖励 44 个论坛币 回复本帖可获得 2 个论坛币奖励! 每人限 3 次

Ψ▄┳一大卫卍卐席尔瓦

大师

8%

还不是VIP/贵宾

-

威望
7
论坛币
-234475 个
通用积分
124.1424
学术水平
3783 点
热心指数
3819 点
信用等级
3454 点
经验
150207 点
帖子
7546
精华
32
在线时间
1327 小时
注册时间
2013-2-3
最后登录
2022-2-24

初级学术勋章 初级热心勋章 中级热心勋章 中级学术勋章 初级信用勋章 中级信用勋章 高级热心勋章 高级学术勋章 特级学术勋章 特级热心勋章 高级信用勋章 特级信用勋章

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
1,基于Matlab的增量校正决策器分类算法:

本帖隐藏的内容


  1. function pos = adjustingAdvanced(xData, classX, maxIter , testData)
  2. %%  基于分类的增量算法
  3. %  fantuanxiaot
  4. %  2015.8.17
  5. %%  test example

  6. %  pos = adjustingAdvanced([rand(10,3);rand(10,3)-1], [ones(10,1);2*ones(10,1)], 10 , [rand(10,3);rand(10,3)-1])

  7. %%  main
  8. if size(xData,2)~=size(testData,2)
  9.     error('error test data input');
  10. end

  11. %  首先针对样本内的将进行训练

  12. numOne = 0;

  13. totalClass = unique(classX);

  14. T = length(totalClass);

  15. %  初始化的权重
  16. [N,P] = size(xData);
  17. W = zeros(T,P);
  18. %  第一行第一类,第二行第二类,以此类推

  19. %  flag = true;
  20. %  针对样本的数据进行训练
  21. for m = 1:maxIter
  22.     flag = true;
  23.     disp(['样本内正在进行第',num2str(m),'次迭代..........'])
  24.     for i = 1:N
  25.         numOne = numOne+1;
  26.         x = xData(i,:);
  27.         xID = classX(i);
  28.         %  判断所属的类别
  29.         r = zeros(T,1);
  30.         r(xID) = 1;
  31.         d = W*x';
  32.         [~,maxID] = max(d);
  33.         if maxID == xID
  34.         else
  35.             flag = false;
  36.         end
  37.         %  进而判断r和d之间的关系
  38.         bigID = find(r>d);
  39.         smallID = find(r<=d);
  40.         
  41.         if ~isempty(bigID)
  42.             W(bigID,:) = W(bigID,:)+1/numOne * repmat(x,length(bigID),1);
  43.         end
  44.         
  45.         if ~isempty(smallID)
  46.             W(smallID,:) = W(smallID,:)-1/numOne * repmat(x,length(smallID),1);
  47.         end
  48.         
  49.     end
  50.    
  51.     if flag == true
  52.         break;
  53.     end
  54. end
  55.         
  56. %%  样本外的预测

  57. nOut = size(testData , 1);

  58. pos = zeros(nOut,1);

  59. for j = 1:nOut
  60.      x = testData(j,:);
  61.     d = W*x';
  62.     [~,maxID] = max(d);   
  63.     pos(j) = maxID;
  64. end
  65. end
  66. %% eof
复制代码



2,基于R的增量校正决策器算法:

本帖隐藏的内容


  1. setwd("D:/MyDriversRoad/R_files12")
  2. rm(list = ls())

  3. #  基于R的增量校正的算法
  4. #  fantuanxiaot
  5. adjustingAdvanced<-function(xData,classX,maxIter,testData)
  6. {
  7.   N<-nrow(xData)
  8.   P<-ncol(xData)
  9.   
  10.   if(!is.matrix(xData) || !is.matrix(testData))
  11.   {
  12.     stop('error input data paramerter')
  13.   }
  14.   
  15.   if (ncol(testData)!=P)
  16.   {
  17.     error('error input data ncol')
  18.   }
  19.   
  20.   pos<-matrix(0,nrow=nrow(testData),ncol = 1)
  21.   
  22.   
  23.   totalClass<-unique(classX)
  24.   
  25.   tClass<-length(totalClass)
  26.   
  27.   #  首先针对权重进行初始化
  28.   Weight<-matrix(0,nrow = tClass,ncol = P)
  29.   
  30.   flag<-TRUE
  31.   
  32.   Num<-0
  33.   
  34.   #  首先是对数据进行训练
  35.   for(m in c(1:maxIter))
  36.   {
  37.     str<-paste('现在处于第',m,'次迭代的过程..',sep='')
  38.     print(str)
  39.     flag <- TRUE
  40.    
  41.     for(i in c(1:N))
  42.     {
  43.       x<-xData[i,]
  44.       #  随后计算d和r的值
  45.       r<-matrix(0,ncol = 1,nrow = tClass)
  46.       #  计算r的值
  47.       xClass<-classX[i]
  48.       r[xClass]<-1
  49.       #  现在对d的值进行计算
  50.       d<-Weight%*%as.matrix(x)
  51.       #  寻找d的最大值
  52.       maxID<-which.max(d)
  53.       
  54.       Num<-Num+1
  55.       
  56.       if (maxID == xClass)
  57.       {
  58.       } else
  59.       {
  60.         flag <- FALSE
  61.       }
  62.       
  63.       #  现在针对d值和r值进行调整
  64.       bigID<-which(r>d)
  65.       smallID<-which(r<=d)
  66.       
  67.       if (length(bigID)!=0)
  68.       {
  69.         #  针对权重进行调整
  70.         repData<-matrix(rep(x,length(bigID)),nrow = length(bigID),ncol = P,byrow = TRUE)
  71.         Weight[bigID,]<-Weight[bigID,]+1/Num*repData
  72.       }
  73.       
  74.       if(length(smallID)!=0)
  75.       {
  76.         #  针对权重进行调整
  77.         repData<-matrix(rep(x,length(smallID)),nrow = length(smallID),ncol = P,byrow = TRUE)
  78.         Weight[smallID,]<-Weight[smallID,]-1/Num*repData
  79.       }
  80.       
  81.     }
  82.    
  83.     #  如果在迭代之中计算相同
  84.     #  flag ==TRUE
  85.     if (flag == TRUE)
  86.     {
  87.       break
  88.     }
  89.    
  90.   }
  91.   
  92.   
  93.   #  现在针对样本外进行评价
  94.   #  pos
  95.   
  96.   for (i in c(1:nrow(testData)))
  97.   {
  98.     x<-testData[i,]
  99.     d<-Weight%*%as.matrix(x)
  100.     maxID<-which.max(d)
  101.     pos[i]<-maxID
  102.   }
  103.   
  104.   return(pos)
  105. }
  106. ##  function eof
  107. ##  test this function

  108. rNormData1<-0.03*rnorm(200,mean = 0,sd = 1)
  109. rNormData1<-matrix(rNormData1,nrow = 50,ncol = 4)

  110. rNormData2<-0.03*rnorm(200,mean = 0,sd = 1)+0.03
  111. rNormData2<-matrix(rNormData2,nrow = 50,ncol = 4)

  112. xData<-rbind(rNormData1,rNormData2)

  113. classX<-cbind(matrix(rep(1,50),nrow = 1),matrix(rep(2,50),nrow = 1))
  114. classX<-t(classX)
  115. #  现在进行检测
  116. maxIter<-10
  117. testData<-0.05*rnorm(100,mean = 0,sd = 1)
  118. testData<-matrix(testData,ncol = 4)

  119. adjustingAdvanced(xData,classX,maxIter,testData)
复制代码






二维码

扫码加我 拉你入群

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

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

关键词:MATLAB matla atlab Lab Atl 校正

回帖推荐

Crsky7 发表于2楼  查看完整内容

还是Matlab好
已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
zbin7451f + 100 + 5 + 5 + 5 对论坛有贡献
xddlovejiao1314 + 100 + 100 + 5 + 5 + 5 精彩帖子
niuniuyiwan + 60 + 60 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 260  论坛币 + 160  学术水平 + 15  热心指数 + 15  信用等级 + 15   查看全部评分

本帖被以下文库推荐

沙发
Crsky7 发表于 2015-8-21 11:21:05 |只看作者 |坛友微信交流群

回帖奖励 +2 个论坛币

还是Matlab好
已有 2 人评分经验 论坛币 收起 理由
xddlovejiao1314 + 10 + 2 鼓励积极发帖讨论
niuniuyiwan + 5 我很赞同

总评分: 经验 + 10  论坛币 + 7   查看全部评分

使用道具

藤椅
niuniuyiwan 在职认证  发表于 2015-8-21 13:18:23 |只看作者 |坛友微信交流群

回帖奖励 +2 个论坛币


感谢分享,感谢楼主,良苦用心,令人钦佩。
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
xddlovejiao1314 + 10 + 2 鼓励积极发帖讨论
fantuanxiaot + 100 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 110  论坛币 + 2  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

板凳
liulion0101 发表于 2015-8-27 17:51:46 |只看作者 |坛友微信交流群

回帖奖励 +2 个论坛币

谢谢楼主分享

使用道具

报纸
liulion0101 发表于 2015-8-27 18:04:12 |只看作者 |坛友微信交流群

回帖奖励 +2 个论坛币

谢谢楼主分享

使用道具

地板
ydb8848 发表于 2015-8-29 14:32:17 |只看作者 |坛友微信交流群

回帖奖励 +2 个论坛币

使用道具

7
ydb8848 发表于 2015-8-29 14:39:21 |只看作者 |坛友微信交流群

回帖奖励 +2 个论坛币

使用道具

8
ydb8848 发表于 2015-8-29 14:40:52 |只看作者 |坛友微信交流群

回帖奖励 +2 个论坛币

顶。。。。

使用道具

9
zbin7451f 发表于 2015-8-29 22:50:30 |只看作者 |坛友微信交流群

回帖奖励 +2 个论坛币

应该学习一下。

使用道具

10
flyhkboy 发表于 2015-8-30 22:23:28 |只看作者 |坛友微信交流群

回帖奖励 +2 个论坛币

学习一下哈!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 11:55