Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.20 KB | None | 0 0
  1. import numpy as np
  2. import pandas as pd
  3. from matplotlib.pyplot import *
  4. from sklearn.naive_bayes import GaussianNB
  5. from sklearn import tree
  6. from sklearn.neighbors import NearestNeighbors
  7. from sklearn.neighbors import KDTree
  8. from sklearn.neural_network import MLPClassifier
  9. from sklearn.decomposition import PCA
  10. from sklearn.neighbors import KNeighborsClassifier
  11. from sklearn import preprocessing
  12. from sklearn.model_selection import cross_val_score
  13.  
  14. df = pd.read_csv('http://www.math.univ-toulouse.fr/~ncouella/yeast.csv',header=None,names=["mcg","vh","alm","mit","erl","pox","vac","nuc","class"])
  15. # les attribut sont : les 8 premières collones des float et la dernière colonne une chaine de caractère
  16. def RandomizeDataframe(df):
  17.     df=df.iloc[np.random.permutation(len(df))]
  18.     df=df.reset_index(drop=True)
  19.     return df
  20. df=RandomizeDataframe(df)
  21.  
  22.  
  23.  
  24. # separer le data frame en deux partie
  25.  
  26. def split(df,p):
  27.     long=int((p/100)*len(df))
  28.     return (df.ix[:long],df.ix[long:])
  29.     #return df.values[df.index<int(len(df)*(p/100))],df.values[df.index >= int(len(df)*(p/100))]
  30.     train,test =split(df,80)
  31. train,test = split(df,80)
  32.  
  33.  
  34. Xtrain=train[train.columns[0:8]]
  35. Ytrain=train[train.columns[8]]
  36. Xtest= test[test.columns[0:8]]
  37. Ytest= test[test.columns[8]]
  38. ############## bayesien naif
  39. clf=GaussianNB()
  40. clf.fit(Xtrain,Ytrain)
  41. predict=clf.predict(Xtest)
  42.  
  43. def prediction(labels,pred):
  44.     bonne_pred=0
  45.     taille=int(len(pred))
  46.     for i in range(0,taille):
  47.         if(labels[i]==pred[i]):
  48.             bonne_pred=bonne_pred+1
  49.     bonne_pred=(bonne_pred/taille)*100
  50.     return(bonne_pred)
  51. print(prediction(Ytrain,predict))
  52. # prediction=9.090909090909092 % semble faible mais mieux que le hasard
  53.  
  54. X=df[df.columns[0:8]]
  55. Y=df[df.columns[8]]
  56.  
  57. clf=tree.DecisionTreeClassifier()
  58. clf.fit(Xtrain,Ytrain)
  59. predict_tree=clf.predict(Xtest)
  60. print(prediction(Ytrain,predict_tree))
  61. # prediction arbre : 18.855218855218855 %
  62.  
  63.  
  64. clf = KNeighborsClassifier(n_neighbors = 10)
  65. pred_voisin = clf.fit(Xtrain,Ytrain).predict(Xtest)
  66. print(prediction(Ytrain,pred_voisin))
  67. # prediction pour 10 voisins 27.27272727272727 %
  68. # ANN
  69. clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
  70.                     hidden_layer_sizes=(5, 2), random_state=1)
  71. clf.fit(Xtrain,Ytrain)  
  72. predict_ann=clf.predict(Xtest)
  73. print(prediction(Ytrain,predict_ann))
  74. # prediction 25.252525252525253 %
  75.  
  76. print("AVEC PCA MAINTENANT")
  77.  
  78. #data_scaled =DataFrame(preprocessing.scale(Xtrain),columns = Xtrain.columns)
  79. #clf = PCA(n_components=4)
  80. #clf.fit(Xtrain)
  81. #Xtrain_reduit = clf.fit_transform(datascaled)
  82. #acp = DataFrame(clf.components,columns=data_scaled.columns,index = ['var1','var2','var3','var4']).abs().sum(axis=0)
  83. #acp_triee = acp.sort_values(ascending = False)
  84. #for i in range(4):
  85. #    print((acp_triee.axes[0])[i])
  86. clf= PCA(n_components=4)
  87. clf.fit(Xtrain)
  88. Xtrain_reduit= clf.fit_transform(Xtrain)
  89.  
  90. clf= PCA(n_components=4)
  91. clf.fit(Xtest)
  92. Xtest_reduit= clf.fit_transform(Xtest)
  93.  
  94.  
  95. clf=GaussianNB()
  96. clf.fit(Xtrain_reduit,Ytrain)
  97. predictPCA=clf.predict(Xtest_reduit)
  98. print(prediction(Ytrain,predictPCA))
  99. # Prediction gaussian  PCA 23.56902356902357
  100.  
  101. clf=tree.DecisionTreeClassifier()
  102. clf.fit(Xtrain_reduit,Ytrain)
  103. predict_treePCA=clf.predict(Xtest_reduit)
  104. print(prediction(Ytrain,predict_treePCA))
  105. # prediction arbre PCA : 28.95622895622896 %
  106.  
  107.  
  108. clf = KNeighborsClassifier(n_neighbors = 10)
  109. pred_voisinPCA = clf.fit(Xtrain_reduit,Ytrain).predict(Xtest_reduit)
  110. print(prediction(Ytrain,pred_voisinPCA))
  111. # prediction pour 10 voisins PCA 28.619528619528616 %
  112. # ANN
  113. clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
  114.                     hidden_layer_sizes=(5, 2), random_state=1)
  115. clf.fit(Xtrain_reduit,Ytrain)  
  116. predict_annPCA=clf.predict(Xtest_reduit)
  117. print(prediction(Ytrain,predict_annPCA))
  118. # prediction PCA 26.936026936026934  %
  119.  
  120. #------------------------------------------------------------------------------
  121. print("partie 4")
  122.  
  123. train50,test50 = split(df,50)
  124.  
  125.  
  126. Xtrain50=train50[train50.columns[0:8]]
  127. Ytrain50=train50[train50.columns[8]]
  128. Xtest50= test50[test50.columns[0:8]]
  129. Ytest50= test50[test50.columns[8]]
  130.  
  131. clf= PCA(n_components=4)
  132. clf.fit(Xtrain50)
  133. Xtrain_reduit50= clf.fit_transform(Xtrain50)
  134.  
  135. clf= PCA(n_components=4)
  136. clf.fit(Xtest50)
  137. Xtest_reduit50= clf.fit_transform(Xtest50)
  138.  
  139. #methode bayes naif
  140.  
  141. clf=GaussianNB(priors=None)
  142. clf.fit(Xtrain_reduit50,Ytrain50)
  143. predictPCA50=clf.predict(Xtest_reduit50)
  144. print(prediction(Ytrain50,predictPCA50))
  145.  
  146. #ARBRE
  147. def besttree(profondeurmin,profondeurmax,Xtrain_reduit50,Ytrain50,Xtest_reduit50):
  148.     bestprofondeur=0
  149.     bestprediction=0
  150.     for i in range(profondeurmin,profondeurmax) :
  151.         clf=tree.DecisionTreeClassifier(max_depth=i)
  152.         clf.fit(Xtrain_reduit50,Ytrain50)
  153.         predict_treePCA50=clf.predict(Xtest_reduit50)
  154.         if (bestprediction<prediction(Ytrain50,predict_treePCA50)):
  155.             bestprediction=prediction(Ytrain50,predict_treePCA50)
  156.             bestprofondeur=i
  157.     return(bestprofondeur,bestprediction)
  158.  
  159. profondeurT,predictionT=besttree(2,100,Xtrain_reduit50,Ytrain50,Xtest_reduit50)
  160. print("La meilleure profondeur est :",profondeurT,"la prediction est égale à : ",predictionT)
  161.  
  162. # La meilleure profondeur est : 5 la prediction est égale à :  26.549865229110516
  163.  
  164. # VOISINS
  165.  
  166. def bestnbvoisin(nb_voisin_max,Xtrain_reduit50,Ytrain50,Xtest_reduit50):
  167.     bestnbvoisin=1
  168.     bestprediction=0
  169.     for i in range(1,nb_voisin_max) :    
  170.         clf = KNeighborsClassifier(n_neighbors = i)
  171.         pred_voisinPCA = clf.fit(Xtrain_reduit,Ytrain).predict(Xtest_reduit)
  172.         print()
  173.         if (bestprediction<prediction(Ytrain,pred_voisinPCA)):
  174.             bestprediction=prediction(Ytrain,pred_voisinPCA)
  175.             bestnbvoisin=i
  176.     return(bestnbvoisin,bestprediction)
  177.  
  178. nbvoisin,predictionV=bestnbvoisin(100,Xtrain_reduit50,Ytrain50,Xtest_reduit50)
  179. print("La meilleure nombre de voisin est :",nbvoisin,"la prediction est égale à : ",predictionV)
  180. #La meilleure nombre de voisin est : 88 la prediction est égale à :  26.936026936026934    
  181.  
  182. #ANN
  183. def best_sizes(taillemax,Xtrain_reduit50,Ytrain50,Xtest_reduit50):
  184.     bestsize=1
  185.     bestprediction=0
  186.     for i in range(1,taillemax) :    
  187.         clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
  188.                             hidden_layer_sizes=(i,), random_state=1)
  189.         clf.fit(Xtrain_reduit,Ytrain)  
  190.         predict_annPCA=clf.predict(Xtrain_reduit50)
  191.         if (bestprediction<prediction(Ytrain50,predict_annPCA50)):
  192.             bestprediction=prediction(Ytrain50,predict_annPCA50)
  193.             bestprofondeur=i
  194.     return(bestsize,bestprediction)
  195. bestsize,predictionann=bestnbvoisin(100,Xtrain_reduit50,Ytrain50,Xtest_reduit50)
  196. print("La meilleure taille :",bestsize,"la prediction est égale à : ",predictionann)
  197. # La meilleure taille : 4 la prediction est égale à :  24.915824915824917
  198.  
  199. print("Partie5")
  200.  
  201. clfNB=GaussianNB(priors=None)
  202. scoreB = cross_val_score(clfNB, X, Y, cv=5)
  203. print("Accuracy: %0.2f (+/- %0.2f) pour le bayesien naif" % (scoreB.mean(), scoreB.std() * 2))
  204. # Accuracy: 0.15 (+/- 0.08) pour le bayesien naif
  205.  
  206. clft=tree.DecisionTreeClassifier(max_depth=profondeurT)
  207. scoret = cross_val_score(clft, X, Y, cv=5)
  208. print("Accuracy: %0.2f (+/- %0.2f) pour les arbres" % (scoret.mean(), scoret.std() * 2))
  209. #Accuracy: 0.49 (+/- 0.02) pour les arbres
  210.  
  211. clfV = KNeighborsClassifier(n_neighbors = nbvoisin)  
  212. scoreV = cross_val_score(clfV, X, Y, cv=5)
  213. print("Accuracy: %0.2f (+/- %0.2f) pour les voisins" % (scoreV.mean(), scoreV.std() * 2))
  214. #Accuracy: 0.58 (+/- 0.03) pour les voisins
  215. clfANN = MLPClassifier(solver='lbfgs', alpha=1e-5,
  216.                     hidden_layer_sizes=(bestsize,), random_state=1)
  217. scoreANN = cross_val_score(clfANN, X, Y, cv=5)
  218. print("Accuracy: %0.2f (+/- %0.2f) pour l'ANN" % (scoreANN.mean(), scoreANN.std() * 2))
  219. #Accuracy: 0.60 (+/- 0.03) pour l'ANN
  220.  
  221.  
  222. print("partie6")
  223.  
  224. subplot(2,2,1)
  225. bar(range(5),scoreB,align='center',alpha=0.5)
  226. subplot(2,2,2)
  227. bar(range(5),scoret,align='center',alpha=0.5)
  228. subplot(2,2,3)
  229. bar(range(5),scoreV,align='center',alpha=0.5)
  230. subplot(2,2,4)
  231. bar(range(5),scoreANN,align='center',alpha=0.5)
  232.  
  233.  
  234. moy=[np.mean(scoreB),np.mean(scoret),np.mean(scoreV),np.mean(scoreANN)]
  235. bar(range(4),moy,align='center',alpha=0.5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement