久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2406|回復: 0
打印 上一主題 下一主題
收起左側

MATLAB模式識別常用算法代碼集合

[復制鏈接]
跳轉到指定樓層
樓主
用于模式識別的常用算法,有數十個,都是源程序,可以自己查看


所有資料51hei提供下載:
MATLAB模式識別與智能計算.rar (40.42 KB, 下載次數: 18)


源程序如下:
  1. %函數名稱:C_MONiTuiHuo()
  2. %參數:m_pattern:樣品特征庫;patternNum:樣品數目
  3. %返回值:m_pattern:樣品特征庫
  4. %函數功能:按照基于模擬退火的K均值算法對全體樣品進行分類
  5. function(m_pattern)=C_MONiTuiHuo(m_pattern,patternNum)
  6. (center=DisSelDlg();%獲得距離計算類型
  7. (centerNum iterNum Tn Ts)=InputTuiHuoDlg()%獲得類中心數和最大迭代次數,最大退火次數,
  8.                                         %退火速度
  9.     for i=1:patternNum
  10.         m_pattern(i).distance=inf;
  11.         m_pattern(i).category=-1;
  12.     end
  13.     randPattern=randpattern(patternNum);
  14.     for i=1:centerNum%初始化,隨機分配centerNum個粒子為一類
  15.         m_pattern(randPattern(i)).category=i;
  16.         m_pattern(randPattern(i)).distance=0;
  17.         m_center(i).feature=m_pattern(randPattern(i)).feature;
  18.         m_center(i).index=i;
  19.         m_center(i).patternNum=1;
  20.     end
  21.     counter=0;%記錄當前已經循環的次數
  22.     change=1;
  23. while(counter<iterNum&&change~=0)
  24.     counter=counter+1;
  25.     change=0;
  26.     for i=1:precenterNum%對所有樣品重新歸類
  27.         %計算第i個模式到各個聚類中心的最小距離
  28.         index=-1;
  29.         td=inf;
  30.         for j=1:precenterNum%對所有樣品重新歸類
  31.             %計算第i個模式到各個聚類中心的最小距離
  32.             index=-1;
  33.             distance=inf;
  34.             for j=1:centerNum
  35.                  tempDis=GetDistance(m_pattern(i),m_center(j),disType);
  36.                  if(distance>tempDis)
  37.                      distance=tempDis;
  38.                      index=j;
  39.                  end
  40.             end
  41.             %比較原中心號與新中心號
  42.             %相同:更新距離
  43.             %不同:新距離小,則歸入新中心,更新距離,重新計算前后兩個聚類中心模式
  44.             %2,新距離大于原距離,不處理
  45.             
  46.             if(m_pattern(i).category===index)%屬于原類
  47.                 m_pattern(i).distance=distance;
  48.             else%不屬于同類
  49.                 oldIndex=m_pattern(i).category;%記錄原類號
  50.                 m_pattern(i).category=index;%歸入新類
  51.                 m_pattern(i).distance=distance;
  52.                 if(oldIndex~=-1)
  53.                     m_center(oldIndex)=CalCenter(m_center(oldIndex),m_pattern,patternNum);
  54.                 end
  55.                 m_center(index)=CalCenter(m_center(index),m_pattern,patternNum);
  56.                 change=1;
  57.             end
  58.         end
  59.     end
  60.     %計算目標函數
  61.     AimFunc=0;
  62.     for j=1:patternNum
  63.          AimFunc=AimFunc+GetDistance(m_pattern(j),m_center(m_pattern(j).category),disType);
  64.     end
  65.     AimOld=AimFunc;
  66.     oldCenter=m_center;
  67.     oldPattern=m_pattern;
  68.     Tc=1;%當前退火次數
  69.     bestAim=AimOld;%最優目標函數
  70.     bestPattern=m_pattern;
  71.     MarkovLength=1000;
  72.     Tb=0;%最優目標函數首次出現的退火次數
  73.     T=AimFunc;%初始化溫度參數
  74.     str=('K均值算法,最優目標函數值:'num2str(bestAim));
  75.     disp(str);
  76.     while(Tc<=Tn&&bestAim>0.1)
  77.         for inner=1:MarkovLength
  78.             %產生隨機波動
  79.             p=fix(rand*patternNum+1);
  80.             t=fix(rand*(centerNum-1)+1);
  81.             if(m_pattern(p).category+1>centerNum)
  82.                 m_pattern(p).category=m_pattern(p).category+t-centerNum;
  83.             else
  84.                 m_pattern(p).category=m_pattern(p).category+1;
  85.             end
  86.             %重新計算聚類中心
  87.             for i=1:centerNum
  88.                 m_center(i)=CalCenter(m_center(i),m_pattern,patternNum);
  89.             end
  90.             AimFunc=0;
  91.             %計算目標函數
  92.             for j=1:patternNum
  93.                 AimFunc=AimFunc+GetDistance(m_pattern(j),m_center(m_pattern(j).category),disType;
  94.             end
  95.             e=AimFunc-AimOld;
  96.             %記錄最優聚類
  97.             if(AimFunc<bestAim)
  98.                 bestAim=AimFunc;
  99.                 bestpattern=m_pattern;
  100.                 Tb=Tc;
  101.             end
  102.             if(bestAim==0)
  103.                 break;
  104.             end
  105.             %判斷是否接受新解
  106.             if(e<0)
  107.                 AimOld=AimFunc;
  108.             else
  109.                 k=exp(-e/T);
  110.                 if(rand<exp(-e/T)
  111.                     AimOld=AimFunc;
  112.                 else
  113.                     m_pattern=oldPattern;
  114.                     m_center=oldCenter
  115.                 end
  116.             end
  117.         end
  118.         T=T*Ts;
  119.         if(T==0)
  120.             break;
  121.         end
  122.         Tc=Tc+1;
  123.         if(Tc-Tb>Tn/2)%連續Tn/2次退火無改變,結束退火
  124.             break;
  125.         end
  126.         str=('已退火 num2str(Tc-1) 次;"最優目標函數值:'num2str(bestAim));
  127.         disp(str);
  128.         m_pattern=bestPattern;
  129.     end
  130.     m_pattern=bestPattern;
  131.     str=('當前最優解出現時,已退火次數為:'num2str(Tb));
  132.     msgbox(str,'modal');
  133.   
復制代碼


  1. %函數名稱:CuCaoTrain()
  2. %參數:
  3. %返回值:
  4. %函數功能:粗糙分類訓練
  5. function CuCaoTrain();
  6.     for i=1:10
  7.         for j=1:i-1
  8.             ruleStruct (i,j).rule=CuCao2ClassTrain(i,j);
  9.         end
  10.     end
  11.     %保存規則表
  12.     save ruleStruct ruleStruct;
  13.     msgbox(‘訓練結束’)
  14. %函數名稱:CuCaoTrainBK()
  15. %參數:class1:類別;class2:類別2;
  16. %返回值:newRule:規則
  17. %函數功能:粗糙集兩類分類訓練
  18. function newRule=CuCao2ClassTrain(class1,class2);
  19.     load tempelet pattern;
  20.     pattemNum=100;
  21.     bottom=zeros(1,patternNum*2);
  22.     bottom(1,1:patternNum)=0;
  23.     bottom(1,patternNum+1:patternNum*2);
  24.     x=[pattern(class1).feature(:,1:patternNum)
  25.         pattern(class2).feature(:,1:patternNum);bottom];
  26.     x=ceil(x');
  27.     %一致性檢測
  28.     ruleNum=patternNum*2;
  29.     %去重規則和不一致規則
  30.     for m=1:ruleNum-1
  31.         if(m>ruleNum-1)
  32.             break;
  33.         end
  34.         for n=m+1:ruleNum
  35.             if(n>ruleNum)
  36.                 break;
  37.             end
  38.             while (x(m,1:25)==x(n,1:25))
  39.                 x(n,:)=[];
  40.                 ruleNum=ruleNum-1;
  41.                 if(n>ruleNum)
  42.                     break;
  43.                 end
  44.             end
  45.         end
  46.     end
  47.    
  48.     x=x(1:ruleNum,:);
  49.     ruleNumY1=0;
  50.     for m=1:ruleNum
  51.         if (x(m,26)==0)
  52.             ruleNumY1=ruleNumY1+1;
  53.         end
  54.     end
  55.     ruleNumY2=ruleNum-ruleNumY1;
  56.     classX=zero(ruleNum,ruleNum);%X屬性等價集矩陣
  57.     ruleNum=zero(ruleNum,1);%等價集中元素個數
  58.     m=0;%等價集個數
  59.     n=1;
  60.     %計算條件X等價集
  61.     nun=0;
  62.     [classX,m,classNum]=CalTiaoJian(num,classX,x,ruleNum,classNum);
  63.     %決策D的等價集
  64.     classY1=zero(1,ruleNumY1);
  65.     classY2=zero(1,ruleNumY2);
  66.     classY1=1:ruleNumY1;
  67.     classY2=ruleNumY1+1;ruleNum;
  68.     %決策D的下近似集
  69.     X_Y1=zeros(1,ruleNumY1);
  70.     X_Y2=zeros(1,ruleNumY2);
  71.     [X_Y1,X_Y2]=CalXiaJinSi(classX,m,classNum,classNumY1);
  72.     %計算Pos(X,D)和r(X,D)
  73.     PosXD=[X_Y1 X_Y2];
  74.     rXD=size(PosXD,2)/(classNum);
  75.     xResrve=[];
  76.     for i=1:25;
  77.         %計算條件X-i的等價集
  78.         classX(:;:)=0;
  79.         [classX,m,classNum]=CalTiaoJian(i,classX,x,ruleNum,classNum);
  80.         %計算決策D的下近似集
  81.         [X_Y1,X_Y2]=CalXiaJinSi(classX,m,classNum,ruleNumY1);
  82.         %計算Pos(X-i,D)和r(X,D)
  83.         PosXid=[X_Y1 X_Y2];
  84.         import(i)=size(PosXiaD,2)/(ruleNum);
  85.         if(rXD-import(i)==0)
  86.             if(Consistent(i,x,ruleNumY1,ruleNumY2)==0)%如果刪除后一致
  87.                 x(1:ruleNum,i);
  88.             else
  89.                 xReserve=[xReserve i];
  90.             end
  91.         else
  92.             xReserve=[xReserve i];
  93.         end
  94.     end
  95.    
  96.     %得到簡化后的決策表
  97.     xReserve=[xReserve 26];
  98.     xNum=size(xReserve,2];
  99.     xNew=zeros(ruleNum,xNum];
  100.     for i=1:ruleNum
  101.         for j=1:xNum
  102.             xNew(i,j)=x(i,xReserve(j));
  103.         end
  104.     end
  105.     rule=[];
  106.     %計算條件X等價集
  107.     num=0;
  108.     classX(:,:);
  109.     [classX,m.classNum]=CalTiaoJian(num,classX,xNew,ruleNum,classNum);
  110.     %獲取規則
  111.     cf=[];
  112.     for i=1:m
  113.         temp=zeros(1,2);
  114.         for j=1:classNum(i)
  115.             if(size(find(classY1==classX(i,j),2)=0)
  116.                 temp(1.1)=1;
  117.             end
  118.             if(size(find(classY2==classX(i,j),2)=0)
  119.                 temp(1,2)=1;
  120.             end
  121.             if(temp(1,1)==1&&temp(1,2)==1)
  122.                 cf=[cf i];%記錄cf不為1的等價集
  123.                 break;
  124.             end
  125.         end
  126.     end
  127.     temp=size(cf,2);
  128.     if(temp=0)%舍去cf不為1的規則
  129.         for i=1:temp
  130.             for j=1:classNum(cf(i))
  131.                 xNew(classX(cf(i),j),xNum)=2;
  132.             end
  133.         end
  134.         for i=1:ruleNum
  135.             while(x(i,xNum)==2)
  136.                 xNew(i,:)=[];
  137.                 ruleNum=ruleNum-1;
  138.                 if(i>ruleNum)
  139.                     break;
  140.                 end
  141.             end
  142.             if(i>=ruleNum)
  143.                 break;
  144.             end
  145.         end
  146.     end
  147.     %簡化規則表,去掉重復規則
  148.     for m=1:ruleNum-1
  149.         if(m>ruleNum-1)
  150.             break;
  151.         end
  152.         for n=m+1:ruleNum
  153.             if(n>ruleNum)
  154.                 break;
  155.             end
  156.             while(xNew(m,1:xNum)==xNew(n,1:xNum))
  157.                 xNew(n,:)=[];
  158.                 ruleNum=ruleNum-1;
  159.                 if(n>ruleNum)
  160.                     break;
  161.                 end
  162.             end
  163.         end
  164.     end
  165.    
  166.     ruleNumY1=0;
  167.     for m=1:ruleNum
  168.         if(xNew(m,xNum)==0)
  169.             ruleNumY1=ruleNumY1+1;
  170.         end
  171.     end
  172.     ruleNumY2=ruleNum-ruleNumY1;
  173.     for m=1:ruleNum
  174.         a=[];
  175.         for j=1:xNum
  176.             a=[a xNew(m,j)];
  177.         end
  178.         rule=[rule;a];
  179.     end
  180.     %規則化簡
  181.     oldRule=rule;
  182.     newRule=[];
  183.     ruleJ=[];%統計可化簡的規則
  184.     for i=1:size(xReserve,2)
  185.         rule=oldRule;
  186.         rule(:,)=0;
  187.         flag=false;
  188.         for m=1:ruleNumY1-1
  189.             for n=m+1:ruleNumY1
  190.                 if(rule(m,:)==rule(n,:))%可化簡
  191.                     rule(m,i)=inf;
  192.                     newRule=[newRule;rule(m,:)];
  193.                     flag=ture;
  194.                     ruleJ=[ruleJ m n];
  195.                     break;
  196.                 end
  197.             end
  198.             if(flag)
  199.                 break;
  200.             end
  201.         end
  202.         flag=false;
  203.         for m=ruleNumY1+1:ruleNum-1
  204.             for n=m+1:ruleNum
  205.                 if(rule(m,:)==rule(n,:))%可簡化
  206.                     rule(m,i)=inf;
  207.                     newRule=[newRule;rule(m.:)];
  208.                     flag=true;
  209.                     ruleJ=[ruleJ m n];
  210.                     break;
  211.                 end
  212.             end
  213.             if(flag)
  214.                 break;
  215.             end
  216.         end
  217.     end
  218.    
  219.     for i=1:ruleNum
  220.         b=size(find(ruleJ==i),2);
  221.         if(b==0)%該規則不可約簡
  222.             newRule=[newRule;oldRule(i,:)];
  223.         end
  224.     end
  225.     newRule=[newRule;xReserve];
  226.     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  227.     %函數名稱:CalTiaoJian()
  228.     %參數:num:條件屬性號;classX:條件等價集;x:決策表;
  229.     %     ruleNum:規則數;classNum:條件等價集中元素數
  230.     %返回值:classX:條件等價集;m:等價集個數;classNum;條件等價集中元素數
  231.     %函數功能:計算條件等價集
  232.     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  233.     function [classX,m,classNum]=CalTiaoJian(num,classX,x,ruleNum,classNum)
  234.         if(num~=0)
  235.             x(1:ruleNum,num)=0;
  236.         end
  237.         xNum=size(x,2);
  238.         x(:,xNum)=0;
  239.         m=0;
  240.         for i=1:ruleNum
  241.             if(x(i,xNum)=0)
  242.                 continue;
  243.             else
  244.                 m=m+1;
  245.                 x(i,xNum)=m;
  246.                 n=1;
  247.                 classX(m.n)=i;
  248.             end
  249.             for j=i+1:ruleNum
  250.                 if (x(j,xNum)=0)
  251.                     continue;
  252.                 end
  253.                 if(x(i,1:xNum-1)==x(j,1:xNum-1))
  254.                     x(j,xNum)=m;
  255.                     n=n+1;
  256.                     classX(m,n)=j;
  257.                 end
  258.             end
  259.             classNum(m)=n;
  260.         end
  261.         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  262.         %函數名稱:CalXiaJinSi()
  263.         %參數:   classX:條件等價集;m等價集個數;classNumL條件等價集中元素數
  264.         %        ruleNumY1:決策屬性1的等價集中的元素數
  265.         %返回值: X_Y1:決策屬性1的下近似集;X_Y2:決策屬性2的下近似集
  266.         %函數功能:計算各等價集的下近似集
  267.         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  268.         
  269.         function [X_Y1,X_Y2]=CalXiaJinSi(classX,m,classNum,ruleNumY1)
  270.             %計算X_Y1,X_Y2
  271.             X_Y1=[];
  272.             X_Y2=[];
  273.             for i=1:m
  274.                 Y1=true;
  275.                 Y2=true;
  276.                 for j=1:classNum(i)
  277.                     if(classX(i,j)>ruleNumY1)%不屬于X_Y1;
  278.                         Y1=false;
  279.                     else
  280.                         Y2=false;
  281.                     end
  282.                     if(~Y1&&~Y2)
  283.                         break;
  284.                     end
  285.                 end
  286.                 if(Y1)
  287.                     X_Y1=[X_Y1 classX(i,classNum(i))];
  288.                 else (Y2)
  289.                     X_Y2=[X_Y2 classX(i,classNum(i))];
  290.                 end
  291.             end
  292.             
  293.             %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  294.             %函數名稱:Consistent()
  295.             %參數:    num:條件屬性號;x:決策表;ruleNumY1:決策屬性1的等價集中的元素數;
  296.             %         ruleNumY2:決策屬性2的等價集中的元素數
  297.             %返回值:   cons:一致性變量:如果cons為0,則不一致,否則一致
  298.             %函數功能:一致性檢測
  299.             %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  300.             function [cons]=Consistent(num,x:ruleNumY1,ruleNumY2)
  301.                 cons=1;
  302.                 x(:,num)=0;
  303.                 for i=1:ruleNumY1
  304.                     for j=ruleNumY1+1:ruleNumY1+ruleNumY2
  305.                         if(x(i,1:25))
  306.                             cons=0;
  307.                         end
  308.                     end
  309.                     
  310.                 end
  311. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  312. %函數名稱:CuCao()
  313. %參數:sample:待測樣品
  314. %返回值:result:分類結果
  315. %函數功能:粗糙集分類
  316. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  317. function result=CuCao(sample);
  318.     load ruleSrtuct;%讀取已訓練規則
  319.     num=zeros(1,10);
  320.     classnum=0;
  321.     for i=1:10
  322.         for j=1:i-1
  323.             %兩類判別
  324.             G=CuCao2Class(i,j,sample,ruleStrut(i,j).rule);
  325.             if(G==0)
  326.                 num(i)=num(i)+1;
  327.             else if(G==1)
  328.                     num(j)=num(j)+1;
  329.                 end
  330.             end
  331.         end
  332.     end %課本沒有這個end,我感覺需要加一個
  333.     [max_val,max_pos]=max(num);
  334.     result=max_pos-1;
  335.    
  336.     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  337.     %函數名稱:CuCao2Class()
  338.     %參數:class1:類別1;class2:類別2;sample:待測樣品;rule:訓練規則
  339.     %返回值:result:分類結果
  340.     %函數功能:粗糙集兩類分類
  341.     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  342.    
  343.     function result=CuCao2Class(class1.class2,sample,rule);
  344.         sample=ceil(sample);%測試樣品二值化
  345.         ruleNum=size(rule,1)-1;%規則數
  346.         xNum=size(rule,2)-1;%屬性數
  347.         result=-1;
  348.         for i=1:ruleNum %匹配規則
  349.             flag=true;
  350.             for j=1:xNum
  351.                 if(rule(i,j)=100&&sample(rule(ruleNum+1,j))
  352.                     flag=false;
  353.                     break;
  354.                 end
  355.             end
  356.             if(flag)
  357.                 result=rule(i,xNum+1);
  358.                 break;
  359.             end
  360.         end
  361.         %找最相近的規則
  362.         if (result==-1)
  363.             ruleSel=zeros(1,ruleNum);
  364.             for i=1:ruleNum
  365.                 for j=1:xNum
  366.                     if(rule(i,j)=100&&sample(rule(ruleNum+1,j))=rule(i,j)
  367.                         ruleSel(i)=ruleSel(i)+1;
  368.                     end
  369.                 end
  370.             end
  371.             [a b]=min(ruleSel);
  372.             result=rule(b,xNum+1);
  373.         end
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九九热精品视频 | 国产一区二区在线视频 | 日韩视频一区在线观看 | 五月婷婷亚洲 | 一区二区视频免费观看 | 精品美女 | 久久久精彩视频 | 欧美aⅴ| 国产日韩欧美91 | 99久久精品免费看国产四区 | 色呦呦在线 | 欧美精品一区二区三区在线播放 | 日日干干 | 精品一二三区视频 | 免费观看一级毛片视频 | 成人影院一区二区三区 | 国产激情视频在线 | 91免费高清视频 | 宅男伊人| 欧美性网 | 懂色中文一区二区三区在线视频 | 日韩欧美一区二区三区四区 | 欧美一区永久视频免费观看 | 日本不卡一区二区三区在线观看 | 国产在线观看一区二区 | 91国语清晰打电话对白 | 日日夜夜天天 | 中文字幕在线观看一区 | 美女黄网| 999国产视频 | 国产精品久久久久久婷婷天堂 | 精品久久成人 | 欧美毛片免费观看 | 大陆一级毛片免费视频观看 | 91成人免费看片 | 色久五月| 国产日韩欧美一区 | 亚洲精品国产一区 | 91精品福利 | 国产一区不卡 | 中文字幕99 |