本帖隐藏的内容
- function pos = adjustingAdvanced(xData, classX, maxIter , testData)
- %% 基于分类的增量算法
- % fantuanxiaot
- % 2015.8.17
- %% test example
- % pos = adjustingAdvanced([rand(10,3);rand(10,3)-1], [ones(10,1);2*ones(10,1)], 10 , [rand(10,3);rand(10,3)-1])
- %% main
- if size(xData,2)~=size(testData,2)
- error('error test data input');
- end
- % 首先针对样本内的将进行训练
- numOne = 0;
- totalClass = unique(classX);
- T = length(totalClass);
- % 初始化的权重
- [N,P] = size(xData);
- W = zeros(T,P);
- % 第一行第一类,第二行第二类,以此类推
- % flag = true;
- % 针对样本的数据进行训练
- for m = 1:maxIter
- flag = true;
- disp(['样本内正在进行第',num2str(m),'次迭代..........'])
- for i = 1:N
- numOne = numOne+1;
- x = xData(i,:);
- xID = classX(i);
- % 判断所属的类别
- r = zeros(T,1);
- r(xID) = 1;
- d = W*x';
- [~,maxID] = max(d);
- if maxID == xID
- else
- flag = false;
- end
- % 进而判断r和d之间的关系
- bigID = find(r>d);
- smallID = find(r<=d);
-
- if ~isempty(bigID)
- W(bigID,:) = W(bigID,:)+1/numOne * repmat(x,length(bigID),1);
- end
-
- if ~isempty(smallID)
- W(smallID,:) = W(smallID,:)-1/numOne * repmat(x,length(smallID),1);
- end
-
- end
-
- if flag == true
- break;
- end
- end
-
- %% 样本外的预测
- nOut = size(testData , 1);
- pos = zeros(nOut,1);
- for j = 1:nOut
- x = testData(j,:);
- d = W*x';
- [~,maxID] = max(d);
- pos(j) = maxID;
- end
- end
- %% eof
2,基于R的增量校正决策器算法:
本帖隐藏的内容
- setwd("D:/MyDriversRoad/R_files12")
- rm(list = ls())
- # 基于R的增量校正的算法
- # fantuanxiaot
- adjustingAdvanced<-function(xData,classX,maxIter,testData)
- {
- N<-nrow(xData)
- P<-ncol(xData)
-
- if(!is.matrix(xData) || !is.matrix(testData))
- {
- stop('error input data paramerter')
- }
-
- if (ncol(testData)!=P)
- {
- error('error input data ncol')
- }
-
- pos<-matrix(0,nrow=nrow(testData),ncol = 1)
-
-
- totalClass<-unique(classX)
-
- tClass<-length(totalClass)
-
- # 首先针对权重进行初始化
- Weight<-matrix(0,nrow = tClass,ncol = P)
-
- flag<-TRUE
-
- Num<-0
-
- # 首先是对数据进行训练
- for(m in c(1:maxIter))
- {
- str<-paste('现在处于第',m,'次迭代的过程..',sep='')
- print(str)
- flag <- TRUE
-
- for(i in c(1:N))
- {
- x<-xData[i,]
- # 随后计算d和r的值
- r<-matrix(0,ncol = 1,nrow = tClass)
- # 计算r的值
- xClass<-classX[i]
- r[xClass]<-1
- # 现在对d的值进行计算
- d<-Weight%*%as.matrix(x)
- # 寻找d的最大值
- maxID<-which.max(d)
-
- Num<-Num+1
-
- if (maxID == xClass)
- {
- } else
- {
- flag <- FALSE
- }
-
- # 现在针对d值和r值进行调整
- bigID<-which(r>d)
- smallID<-which(r<=d)
-
- if (length(bigID)!=0)
- {
- # 针对权重进行调整
- repData<-matrix(rep(x,length(bigID)),nrow = length(bigID),ncol = P,byrow = TRUE)
- Weight[bigID,]<-Weight[bigID,]+1/Num*repData
- }
-
- if(length(smallID)!=0)
- {
- # 针对权重进行调整
- repData<-matrix(rep(x,length(smallID)),nrow = length(smallID),ncol = P,byrow = TRUE)
- Weight[smallID,]<-Weight[smallID,]-1/Num*repData
- }
-
- }
-
- # 如果在迭代之中计算相同
- # flag ==TRUE
- if (flag == TRUE)
- {
- break
- }
-
- }
-
-
- # 现在针对样本外进行评价
- # pos
-
- for (i in c(1:nrow(testData)))
- {
- x<-testData[i,]
- d<-Weight%*%as.matrix(x)
- maxID<-which.max(d)
- pos[i]<-maxID
- }
-
- return(pos)
- }
- ## function eof
- ## test this function
- rNormData1<-0.03*rnorm(200,mean = 0,sd = 1)
- rNormData1<-matrix(rNormData1,nrow = 50,ncol = 4)
- rNormData2<-0.03*rnorm(200,mean = 0,sd = 1)+0.03
- rNormData2<-matrix(rNormData2,nrow = 50,ncol = 4)
- xData<-rbind(rNormData1,rNormData2)
- classX<-cbind(matrix(rep(1,50),nrow = 1),matrix(rep(2,50),nrow = 1))
- classX<-t(classX)
- # 现在进行检测
- maxIter<-10
- testData<-0.05*rnorm(100,mean = 0,sd = 1)
- testData<-matrix(testData,ncol = 4)
- adjustingAdvanced(xData,classX,maxIter,testData)