コード例 #1
0
ファイル: results.py プロジェクト: nlanget/discrimination
  def plot_confusion(self):
    """
    Plots the confusion matrix (test set only).
    """
    from do_classification import plot_confusion_mat
    from sklearn.metrics import confusion_matrix
    self.do_tri()
    self.classname2number()

    m = self.man
    a = self.auto
    for i in self.numt:
      m['Type'][m.Type==self.types[i]] = i
      a['Type'][a.Type==self.types[i]] = i
    a = a[a.Type!='?']
    m = m.reindex(index=a.index)

    cmat = confusion_matrix(m.values[:,0],a.values[:,0])
    plot_confusion_mat(cmat,self.types,'Test',self.opdict['method'])
    if self.opdict['save_confusion']:
      savefig = '%s/figures/test_%s.png'%(self.opdict['outdir'],self.opdict['result_file'])
      print "Confusion matrix saved in %s"%savefig
      plt.savefig(savefig)
    plt.show()
コード例 #2
0
def plot_hyp_func_1f(x,y,theta,method,threshold=None,x_ok=None,x_bad=None,th_comp=None,cmat_test=[],cmat_svm=[],cmat_train=[]):

  num_t = np.unique(y.NumType.values.ravel())
  num_t = map(int,list(num_t))
  str_t = np.unique(y.Type.values.ravel())
  str_t = map(str,list(str_t))

  fig = plt.figure(figsize=(12,7))
  fig.set_facecolor('white')

  left, bottom = .1, .1
  width, height = .5, .8
  width_h, height_h = .25, .35
  left_h, bottom_h = left+width+.05, bottom+height_h+.1
  rect_1 = [left, bottom, width, height]
  rect_2 = [left_h, bottom_h, width_h, height_h]
  rect_3 = [left_h, bottom, width_h, height_h]

  ax1 = plt.axes(rect_1)
  ax2 = plt.axes(rect_2)
  ax3 = plt.axes(rect_3)

  x1 = x[y.NumType.values.ravel()==num_t[0]].values[:,0]
  x2 = x[y.NumType.values.ravel()==num_t[1]].values[:,0]

  nn,b,p = ax1.hist([x1,x2],25,normed=True,histtype='stepfilled',alpha=.2,color=('b','g'),label=str_t)

  from LR_functions import g
  # Plot the hypothesis function
  syn = np.arange(-1,1,0.01)
  hyp = g(theta[1][0]+theta[1][1]*syn)
  norm = np.mean([np.max(nn[0]),np.max(nn[1])])
  ax1.plot(syn,norm*hyp,'y-',lw=2,label='hypothesis')

  if threshold:
    thres = np.ones(len(hyp))*threshold[1]
    imin = np.argmin(np.abs(thres-hyp))
    t = syn[imin]
    ax1.plot([t,t],[0,np.max(nn)],'orange',lw=3.,label='decision')

  if th_comp:
    hyp_svm = g(th_comp[1][0]+th_comp[1][1]*syn)
    ax1.plot(syn,norm*hyp_svm,'magenta',lw=2.)

    thres = np.ones(len(hyp_svm))*.5
    imin = np.argmin(np.abs(thres-hyp_svm))
    t = syn[imin]
    ax1.plot([t,t],[0,np.max(nn)],'purple',lw=3.)

  if x_ok and x_bad:
    # plot well-classified events of the test set
    #nn, b, p = ax1.hist([x_ok],25,normed=True,color=('k'),histtype='step',fill=False,ls='dashed',lw=2,label=['Test Set'])
    # plot both well and badly-classified events of the test set
    nn, b, p = ax1.hist([x_ok,x_bad],25,normed=True,color=('k','r'),histtype='step',fill=False,ls='dashed',lw=2,label=['Test Set'])

  ax1.set_xlim([-1,1])
  ax1.legend(prop={'size':12})
  ax1.set_xlabel(x.columns[0])
  ax1.set_title(x.columns[0])

  from do_classification import plot_confusion_mat, dic_percent
  s = 12
  x_pos = .05
  y_pos = .95
  pas = .04
  if list(cmat_test):
    plot_confusion_mat(cmat_test,str_t,'Test',method,ax=ax3)
    p_test = dic_percent(cmat_test,str_t)
    ax1.text(x_pos,y_pos,method.upper(),size=s,transform=ax1.transAxes,color='orange')
    ax1.text(x_pos,y_pos-pas,"Test : %.2f%%"%p_test['global'],size=s,transform=ax1.transAxes)
    ax1.text(x_pos+.2,y_pos-pas,"(%.2f%%)"%(100-p_test['global']),size=s,color='red',transform=ax1.transAxes)
    
  if list(cmat_train) and not list(cmat_svm):
    plot_confusion_mat(cmat_train,str_t,'Training',method,ax=ax2)
    p_train = dic_percent(cmat_train,str_t)
    ax1.text(x_pos,y_pos-2*pas,"Training : %.2f%%"%p_train['global'],size=s,transform=ax1.transAxes)

  elif list(cmat_train) and list(cmat_svm):
    p_train = dic_percent(cmat_train,str_t)
    ax1.text(x_pos,y_pos-2*pas,"Training : ",size=s,transform=ax1.transAxes)
    ax1.text(x_pos+.15,y_pos-2*pas,"%s %s%%"%(str_t[0],p_train[(str_t[0],0)]),color='b',size=s,transform=ax1.transAxes)
    ax1.text(x_pos+.15,y_pos-3*pas,"%s %s%%"%(str_t[1],p_train[(str_t[1],1)]),color='g',size=s,transform=ax1.transAxes)

    plot_confusion_mat(cmat_svm,str_t,'Test','SVM',ax=ax2)
    p_svm = dic_percent(cmat_svm,str_t)
    ax1.text(x_pos,y_pos-4*pas,"SVM",size=s,transform=ax1.transAxes,color='purple')
    ax1.text(x_pos,y_pos-5*pas,"Test : %.2f%%"%p_svm['global'],size=s,transform=ax1.transAxes)

  elif not list(cmat_train) and list(cmat_svm):
    plot_confusion_mat(cmat_svm,str_t,'Test','SVM',ax=ax2)
    p_svm = dic_percent(cmat_svm,str_t)
    ax1.text(x_pos,y_pos-3*pas,"SVM",size=s,transform=ax1.transAxes,color='purple')
    ax1.text(x_pos,y_pos-4*pas,"Test : %.2f%%"%p_svm['global'],size=s,transform=ax1.transAxes)

  plt.figtext(.1,.93,'(a)')
  plt.figtext(.63,.93,'(b)')
  plt.figtext(.63,.48,'(c)')