ELM极限学习机算法源码.docx
- 文档编号:6678414
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:19
- 大小:18.97KB
ELM极限学习机算法源码.docx
《ELM极限学习机算法源码.docx》由会员分享,可在线阅读,更多相关《ELM极限学习机算法源码.docx(19页珍藏版)》请在冰豆网上搜索。
ELM极限学习机算法源码
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
importno.uib.cipr.matrix.DenseMatrix;
importno.uib.cipr.matrix.DenseVector;
importno.uib.cipr.matrix.Matrices;
importno.uib.cipr.matrix.NotConvergedException;
publicclasselm{
privateDenseMatrixtrain_set;
privateDenseMatrixtest_set;
privateintnumTrainData;
privateintnumTestData;
privateDenseMatrixInputWeight;
privatefloatTrainingTime;
privatefloatTestingTime;
privatedoubleTrainingAccuracy,TestingAccuracy;
privateintElm_Type;
privateintNumberofHiddenNeurons;
privateintNumberofOutputNeurons;
privateintNumberofInputNeurons;
privateStringfunc;
privateint[]label;
privateDenseMatrixBiasofHiddenNeurons;
privateDenseMatrixOutputWeight;
privateDenseMatrixtestP;
privateDenseMatrixtestT;
privateDenseMatrixY;
privateDenseMatrixT;
publicelm(intelm_type,intnumberofHiddenNeurons,StringActivationFunction){
Elm_Type=elm_type;
NumberofHiddenNeurons=numberofHiddenNeurons;
func=ActivationFunction;
TrainingTime=0;
TestingTime=0;
TrainingAccuracy=0;
TestingAccuracy=0;
NumberofOutputNeurons=1;
}
publicelm(){
}
publicDenseMatrixloadmatrix(Stringfilename)throwsIOException{
BufferedReaderreader=newBufferedReader(newFileReader(newFile(filename)));
StringfirstlineString=reader.readLine();
String[]strings=firstlineString.split("");
intm=Integer.parseInt(strings[0]);
intn=Integer.parseInt(strings[1]);
if(strings.length>2)
NumberofOutputNeurons=Integer.parseInt(strings[2]);
DenseMatrixmatrix=newDenseMatrix(m,n);
firstlineString=reader.readLine();
inti=0;
while(i String[]datatrings=firstlineString.split(""); for(intj=0;j matrix.set(i,j,Double.parseDouble(datatrings[j])); } i++; firstlineString=reader.readLine(); } returnmatrix; } publicvoidtrain(StringTrainingData_File)throwsNotConvergedException{ try{ train_set=loadmatrix(TrainingData_File); }catch(IOExceptione){ e.printStackTrace(); } train(); } publicvoidtrain(double[][]traindata)throwsNotConvergedException{ //classificationrequireathenumberofclass train_set=newDenseMatrix(traindata); intm=train_set.numRows(); if(Elm_Type==1){ doublemaxtag=traindata[0][0]; for(inti=0;i if(traindata[i][0]>maxtag) maxtag=traindata[i][0]; } NumberofOutputNeurons=(int)maxtag+1; } train(); } privatevoidtrain()throwsNotConvergedException{ numTrainData=train_set.numRows(); NumberofInputNeurons=train_set.numColumns()-1; InputWeight=(DenseMatrix)Matrices.random(NumberofHiddenNeurons,NumberofInputNeurons); DenseMatrixtransT=newDenseMatrix(numTrainData,1); DenseMatrixtransP=newDenseMatrix(numTrainData,NumberofInputNeurons); for(inti=0;i transT.set(i,0,train_set.get(i,0)); for(intj=1;j<=NumberofInputNeurons;j++) transP.set(i,j-1,train_set.get(i,j)); } T=newDenseMatrix(1,numTrainData); DenseMatrixP=newDenseMatrix(NumberofInputNeurons,numTrainData); transT.transpose(T); transP.transpose(P); if(Elm_Type! =0)//CLASSIFIER { label=newint[NumberofOutputNeurons]; for(inti=0;i label[i]=i;} DenseMatrixtempT=newDenseMatrix(NumberofOutputNeurons,numTrainData); tempT.zero(); for(inti=0;i intj=0; for(j=0;j if(label[j]==T.get(0,i)) break; } tempT.set(j,i,1); } T=newDenseMatrix(NumberofOutputNeurons,numTrainData);//T=temp_T*2-1; for(inti=0;i for(intj=0;j T.set(i,j,tempT.get(i,j)*2-1); } transT=newDenseMatrix(numTrainData,NumberofOutputNeurons); T.transpose(transT); } longstart_time_train=System.currentTimeMillis(); BiasofHiddenNeurons=(DenseMatrix)Matrices.random(NumberofHiddenNeurons,1); DenseMatrixtempH=newDenseMatrix(NumberofHiddenNeurons,numTrainData); InputWeight.mult(P,tempH); //DenseMatrixind=newDenseMatrix(1,numTrainData); DenseMatrixBiasMatrix=newDenseMatrix(NumberofHiddenNeurons,numTrainData); for(intj=0;j for(inti=0;i BiasMatrix.set(i,j,BiasofHiddenNeurons.get(i,0)); } } tempH.add(BiasMatrix); DenseMatrixH=newDenseMatrix(NumberofHiddenNeurons,numTrainData); if(func.startsWith("sig")){ for(intj=0;j for(inti=0;i doubletemp=tempH.get(j,i); temp=1.0f/(1+Math.exp(-temp)); H.set(j,i,temp); } } } elseif(func.startsWith("sin")){ for(intj=0;j for(inti=0;i doubletemp=tempH.get(j,i); temp=Math.sin(temp); H.set(j,i,temp); } } } elseif(func.startsWith("hardlim")){ } elseif(func.startsWith("tribas")){ } elseif(func.startsWith("radbas")){ } DenseMatrixHt=newDenseMatrix(numTrainData,NumberofHiddenNeurons); H.transpose(Ht); Inverseinvers=newInverse(Ht); DenseMatrixpinvHt=invers.getMPInverse(); OutputWeight=newDenseMatrix(NumberofHiddenNeurons,NumberofOutputNeurons); pinvHt.mult(transT,OutputWeight); longend_time_train=System.currentTimeMillis(); TrainingTime=(end_time_train-start_time_train)*1.0f/1000; DenseMatrixYt=newDenseMatrix(numTrainData,NumberofOutputNeurons); Ht.mult(OutputWeight,Yt); Y=newDenseMatrix(NumberofOutputNeurons,numTrainData); Yt.transpose(Y); if(Elm_Type==0){ doubleMSE=0; for(inti=0;i MSE+=(Yt.get(i,0)-transT.get(i,0))*(Yt.get(i,0)-transT.get(i,0)); } TrainingAccuracy=Math.sqrt(MSE/numTrainData); } elseif(Elm_Type==1){ floatMissClassificationRate_Training=0; for(inti=0;i doublemaxtag1=Y.get(0,i); inttag1=0; doublemaxtag2=T.get(0,i); inttag2=0; for(intj=1;j if(Y.get(j,i)>maxtag1){ maxtag1=Y.get(j,i); tag1=j; } if(T.get(j,i)>maxtag2){ maxtag2=T.get(j,i); tag2=j; } } if(tag1! =tag2) MissClassificationRate_Training++; } TrainingAccuracy=1-MissClassificationRate_Training*1.0f/numTrainData; } } publicvoidtest(StringTestingData_File){ try{ test_set=loadmatrix(TestingData_File); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } numTestData=test_set.numRows(); DenseMatrixttestT=newDenseMatrix(numTestData,1); DenseMatrixttestP=newDenseMatrix(numTestData,NumberofInputNeurons); for(inti=0;i ttestT.set(i,0,test_set.get(i,0)); for(intj=1;j<=NumberofInputNeurons;j++) ttestP.set(i,j-1,test_set.get(i,j)); } testT=newDenseMatrix(1,numTestData); testP=newDenseMatrix(NumberofInputNeurons,numTestData); ttestT.transpose(testT); ttestP.transpose(testP); longstart_time_test=System.currentTimeMillis(); DenseMatrixtempH_test=newDenseMatrix(NumberofHiddenNeurons,numTestData); InputWeight.mult(testP,tempH_test); DenseMatrixBiasMatrix2=newDenseMatrix(NumberofHiddenNeurons,numTestData); for(intj=0;j for(inti=0;i BiasMatrix2.set(i,j,BiasofHiddenNeurons.get(i,0)); } } tempH_test.add(BiasMatrix2); DenseMatrixH_test=newDenseMatrix(NumberofHiddenNeurons,numTestData); if(func.startsWith("sig")){ for(intj=0;j for(inti=0;i doubletemp=tempH_test.get(j,i); temp=1.0f/(1+Math.exp(-temp)); H_test.set(j,i,temp); } } } elseif(func.startsWith("sin")){ for(intj=0;j for(inti=0;i doubletemp=tempH_test.get(j,i); temp=Math.sin(temp); H_test.set(j,i,temp); } } } elseif(func.startsWith("hardlim")){ } elseif(func.startsWith("tribas")){ } elseif(func.startsWith("radbas")){ } DenseMatrixtransH_test=newDenseMatrix(numTestData,NumberofHiddenNeurons); H_test.transpose(transH_test); DenseMatrixYout=newDenseMatrix(numTestData,NumberofOutputNeurons); transH_test.mult(OutputWeight,Yout); DenseMatrixtestY=newDenseMatrix(NumberofOutputNeurons,numTestData); Yout.transpose(testY); longend_time_test=System.currentTimeMillis(); TestingTime=(end_time_test-start_time_test)*1.0f/1000; //REGRESSION if(Elm_Type==0){ doubleMSE=0; for(inti=0;i MSE+=(Yout.get(i,0)-testT.get(0,i))*(Yout.get(i,0)-testT.get(0,i)); } TestingAccuracy=Math.sqrt(MSE/numTestData); } //CLASSIFIER elseif(Elm_Type==1){ DenseMatrixtemptestT=newDenseMatrix(NumberofOutputNeurons,numTestData); for(inti=0;i intj=0; for(j=0;j if(label[j]==testT.get(0,i)) break; } temptestT.set(j,i,1); } testT=newDenseMatrix(NumberofOutputNeurons,numTestData); for(inti=0;i for(intj=0;j testT.set(i,j,temptestT.get(i,j)*2-1); } floatMissClassificationRate_Testing=0; for(inti=0;i doublemaxtag1=testY.get(0,i); inttag1=0; doublemaxtag2=testT.get(0,i); inttag2=0; for(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ELM 极限 学习机 算法 源码
![提示](https://static.bdocx.com/images/bang_tan.gif)