Guest User

Untitled

a guest
Apr 20th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.19 KB | None | 0 0
  1. %% Script de la Practica8
  2. function Practica8_Prediccion
  3.  
  4. %% Situate en el directorio donde se encuentra corpus.mat
  5.  
  6. %%% limpiamos el entorno de matlab
  7. clear
  8. close
  9.  
  10. %% cargamos los datos desde corpus.mat
  11. load corpus.mat
  12.  
  13. %% preparamos un conjunto de entrenamiento de 2 clases
  14. %% XT2clases: variables predictivas del corpus de entrenamiento con 2 clases
  15. %% YT2clases: etiequeta de salida del corpus de entrenamiento
  16. XT1=Xpitraining(Ytraining==1,:);
  17. XT2=Xpitraining(Ytraining==2,:);
  18. YT1=Ytraining(Ytraining==1);
  19. YT2=-1*ones(size(Ytraining(Ytraining==2)));
  20. XT2clases=[XT1;XT2];
  21. YT2clases=[YT1;YT2];
  22.  
  23. %% preparamos un conjunto de test de 2 clases
  24. %% Xt2clases: variables predictivas del corpus de test con 2 clases
  25. %% Yt2clases: etiequeta de salida del corpus de test
  26. Xt1=Xpitest(Ytest==1,:);
  27. Xt2=Xpitest(Ytest==2,:);
  28. Yt1=Ytest(Ytest==1);
  29. Yt2=-1*ones(size(Ytest(Ytest==2)));
  30. Xt2clases=[Xt1;Xt2];
  31. Yt2clases=[Yt1;Yt2];
  32.  
  33. %%
  34. %% ejercicio 1: discriminante lineal, estimacion por minimos cuadrados
  35. %%
  36.  
  37. XT=XT2clases;
  38. Xt=Xt2clases;
  39. YT=YT2clases;
  40. Yt=Yt2clases;
  41.  
  42. %% ampliamos la matriz X para el termino independiente
  43. XT= [XT,ones(size(XT,1),1)];
  44. Xt= [Xt,ones(size(Xt,1),1)];
  45.  
  46. %% estimacion
  47. %% W = ((XT'*XT)^-1)*XT'*YT
  48. W = (inv(XT'*XT))*XT'*YT
  49.  
  50. %% regla de clasificacion basada en la funcion discriminante lineal
  51. gt = Xt*W %valor de la funcion discriminante para cada caso de test
  52. yt = gt>0 %Si gt(i) > 0, entonces yt(i) 1, sino -1
  53.  
  54. yt(yt==0)=-1
  55.  
  56. a = yt == Yt
  57.  
  58. %% calculo del error de test
  59. err = 1 - (sum(a) / size(a,1)) % casos incorrectamente clasificados dividido numero de casos de test
  60.  
  61. %%
  62. %% ejercicio 2: clasificador gausiano
  63. %%
  64.  
  65. %% clasificacion binaria LDA y QDA
  66.  
  67. XT=XT2clases;
  68. YT=YT2clases;
  69. Xt=Xt2clases;
  70. Yt=Yt2clases;
  71.  
  72. %% estimacion y clasificacion lineal de las clases 1 y 2
  73.  
  74. [class,err,POSTERIOR,logp,coeff] = classify( Xt, XT, YT, 'linear');
  75.  
  76. %% estudia la variable POSTERIOR
  77. POSTERIOR
  78. %% estudia la variable coeff para averiguar la frontera de decision
  79. coeff
  80. %% calcula el error de test
  81. err
  82.  
  83. %% estimación y clasificación cuadrática de las clases 1 y 2
  84. [class,errT,POSTERIOR,logp,coeff] = classify( Xt, XT, YT, 'quadratic');
  85.  
  86. %% estimacion y clasificacion lineal de las clases 1, 2 y 3
  87. class
  88. %% estimacion del error de test
  89. TODO
  90. %% Cálculo de la matriz de confusión
  91. confus(Ytest,class)
  92.  
  93. %% Clasificacion de 3 clases basada en la extraccion de caracteristicas
  94. %% mediante PCA
  95.  
  96. %% tipificar la union de conjuntos de entrenamiento y test
  97. Xtip=tipificar([Xpitraining;Xpitest]);
  98. XTtip = Xtip(1:size(Xpitraining,1),:);
  99. Xttip = Xtip(size(Xpitraining,1)+1:size(Xpitraining,1)+size(Xpitest,1),:);
  100.  
  101.  
  102. %% estudiamos kolmogorov-smirnov, miramos k-s de 1 var en mitad de la señal
  103. [h,p,k,c] = kstest(Xtip(:,floor(size(Xtip,2)/2)),[],0.05,0);
  104.  
  105. %% Proyeccion PCA del conjunto de entrenamiento tipificado
  106. TODO = princomp(XTtip);
  107. %% Proyeccion del conjunto de test tipificado mediante loadings
  108. TODO
  109. %% clasificacion de 3 clases con los 10 primeros scores
  110. [class,err,POSTERIOR,logp,coeff] = classify( TODO
  111.  
  112.  
  113.  
  114. %% ejercicio 3: sequentialfs: forward y backward-selection, 5 repeticiones
  115.  
  116. for dir=['fb']
  117. for i=1:5
  118. c = cvpartition(Ytraining,'k',10);
  119. opts = statset('display','iter','TolFun',1e-3);
  120. fun = @(XT,yT,Xt,yt)...
  121. (sum(yt ~= classify(Xt,XT,yT,'linear')));
  122. [fs,history] = sequentialfs(fun,Xpitraining,Ytraining,'cv',c,'options',opts, 'direction',dir);
  123. Xpitrainingfs = Xpitraining(:,fs);
  124. Xpitestfs = Xpitest(:,fs);
  125. [class,err,POSTERIOR,logp,coeff] = classify(Xpitestfs, Xpitrainingfs, Ytraining, 'linear');
  126. confus(Ytest,class);
  127. 'sw lda 3c'
  128. err=sum(Ytest~=class)/size(Ytest,1)
  129.  
  130. end
  131. end
  132.  
  133.  
  134. %% ejercicio 4: svm
  135.  
  136.  
  137. XT=XT2clases;
  138. YT=YT2clases;
  139. Xt=Xt2clases;
  140. Yt=Yt2clases;
  141.  
  142. %clasificacion con kernel polinomico de grado 3
  143. C=2;
  144. svmStruct = svmtrain( TODO %X,t,kernel_,width,polypower,C
  145. classt = svmclassify( TODO %svmStruct,Xt)
  146. errT=sum(YT~=classt)/size(YT,1);
  147. class = svmclassify(svmStruct, Xt);
  148. 'svm 2c'
  149. err= TODO %calcula el error
  150. confus(Yt+2,class+2);
  151.  
  152.  
  153. %PCA[1:2] + SVM
  154.  
  155. %con PCA de vector completo claificamos 2 clases,
  156. %en PC tenemos los loadings ordenados de mayor a menor
  157.  
  158. %tipificar
  159. Xtip=tipificar([XT;Xt]);
  160.  
  161. XTtip = Xtip(1:size(XT,1),:);
  162. Xttip = Xtip(size(XT,1)+1:size(XT,1)+size(Xt,1),:);
  163.  
  164. %miramos k-s de 1 var en mitad de la señal
  165. [h,p,k,c] = kstest(Xtip(:,floor(size(Xtip,2)/2)),[],0.05,0);
  166.  
  167. [PC,scoresT,variance] = princomp(XTtip);
  168. scorest=Xttip*PC;
  169.  
  170. svmStruct = svmtrain( TODO
  171. classT = svmclassify( TODO
  172. errT=sum(YT~=classT)/size(YT,1);
  173. class = svmclassify(svmStruct, scorest(:,1:2));
  174. 'pca svm 2c'
  175. err=sum(Yt~=class)/size(Yt,1)
  176. confus(Yt+2,class+2);
  177.  
  178. %plot de vectores soporte, fronteras y casos de test
  179. figure
  180. scoresT12=scoresT(:,1:2);
  181. scorest12=scorest(:,1:2);
  182. Step=0.5;
  183. mn = min(scoresT12);
  184. mx = max(scoresT12);
  185. [x1,x2]=meshgrid(floor(mn(1)):Step:ceil(mx(1)),floor(mn(2)):Step:ceil(mx(2)));
  186. [n11,n12]=size(x1);
  187. [n21,n22]=size(x2);
  188. XG=[reshape(x1,n11*n12,1) reshape(x2,n21*n22,1)];
  189. alpha_index=svmStruct{3};
  190. KG = kernel_func(scoresT(alpha_index,1:2),XG,'poly',1,3);
  191. alpha=svmStruct{1};
  192. w_0 = svmStruct{2};
  193. f = (YT(alpha_index).*alpha)'*KG + w_0;
  194. plot(scoresT12(alpha_index,1),scoresT12(alpha_index,2),'go');
  195. hold
  196. plot(scorest12(1:52,1),scorest12(1:52,2),'.')
  197. plot(scorest12(53:75,1),scorest12(53:75,2),'.r')
  198. contour(x1,x2,reshape(f,[n11,n12]),[0,0]);
  199. hold off
  200.  
  201.  
  202. end
Add Comment
Please, Sign In to add comment