分为三个大块:1 如何利用scikit-learn进行交叉验证 2 如何评价分类模型的指标 3 如何评价线性模型的指标 4如何评价聚类模型的指标
交叉验证:
1.holdout
2.K-Fold
3.留1
2.分类模型的评价指标
最重要的:混淆矩阵confusion_matrix
其余的一些指标:准确度accuracy 所有正确的
精确率:预测1正确的在全部预测为正确1的里的数量
召回率:预测1+真实1正确的占总真实值为1的数量
特异度:0的召回率
Kappa值 p0-pe/(1-pe)
ROC曲线,AOC值
3.预测模型的评价指标
均方误差mse
均方根误差RMSE
4.预测聚类模型的指标
轮廓系数
# -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. """ from sklearn.metrics import confusion_matrix class evaClassificationIndex(): def __init__(self,y_true,y_pred,y_pred_prob=None): self.y_true=y_true self.y_pred=y_pred self.y_pred_prob=y_pred_prob self.__TN=confusion_matrix(self.y_true,self.y_pred)[0][0] self.__FP=confusion_matrix(self.y_true,self.y_pred)[0][1] self.__FN=confusion_matrix(self.y_true,self.y_pred)[1][0] self.__TP=confusion_matrix(self.y_true,self.y_pred)[1][1] def getConfusionMatrix(self): return confusion_matrix(self.y_true,self.y_pred) def getAccuracy(self): return (self.__TP+self.__TN)/float(self.__TP+self.__FP+self.__TN+self.__FN) def getPrecision(self): return (self.__TP)/float(self.__FP+self.__TP) def getRecall(self): return (self.__TP)/float(self.__FN+self.__TP) def getSpecificity(self): return (self.__TN)/float(self.__TN+self.__FP) def getF1(self): from sklearn.metrics import f1_score return f1_score(self.y_true,self.y_pred) def getKappa(self): N=float(len(self.y_true)) p0=(self.__TP+self.__TN)/N pe=((self.__TN+self.__FP)/N)*((self.__TN+self.__FN)/N)+((self.__FN+self.__TP)/N)*((self.__FP+self.__TP)/N) return (p0-pe)/(1-pe) def getROC(self): from sklearn.metrics import roc_curve fpr,tpr,thresholds=roc_curve(self.y_true,self.y_pred_prob,pos_label=2) return fpr,tpr,thresholds def getAUC(self): from sklearn.metrics import roc_auc_score return roc_auc_score(self.y_true,self.y_pred_prob) #如果您想计算回归预测的各种评价指标,请使用此类 #新建回归预测对象时,请输入两个参数:y的真实值,y的预测值 class evaRegressionIndex(): def __init__(self,y_true,y_pred): self.y_true=y_true self.y_pred=y_pred def getMAE(self): from sklearn.metrics import mean_absolute_error return mean_absolute_error(self.y_true,self.y_pred) def getMSE(self): from sklearn.metrics import mean_squared_error return mean_squared_error(self.y_true,self.y_pred) def getRMSE(self): import math from sklearn.metrics import mean_squared_error return math.sqrt(mean_squared_error(self.y_true,self.y_pred)) #如果想计算聚类的评价指标,请使用此类 #请输入三个参数,样本矩阵X,标签y的真实值,y的预测值 class evaclusterIndex(): def __init__(self,X=None,y_true,y_pred=None): self.X=X self.y_true=y_true self.y_pred=y_pred self.__ss=0 self.__sd=0 self.__ds=0 self.__dd=0 for i in range(len(y_true)): for j in range(i+1,len(y_true)): if (y_pred[i]==y_pred[j])and(y_true[i]==y_true[j]): self.__ss+=1 if (y_pred[i]==y_pred[j])and(y_true[i]!=y_true[j]): self.__sd+=1 if (y_pred[i]!=y_pred[j])and(y_true[i]==y_true[j]): self.__ds+=1 if (y_pred[i]!=y_pred[j])and(y_true[i]!=y_true[j]): self.__dd+=1 def getsi(self): from sklearn.metrics import silhouette_score return silhouette_score(self.X,self.y_pred,metric='sqeuclidean') def getRandIndex(self): return (self.__ss+self.__dd)/float(self.__ss+self.__dd+self.__ds+self.__dd) def getJaccardCoeff(self): return self.__ss/float(self.__sd+self.__ss+self.__ds) def getFMIndex(self): import math return math.sqrt(self.__ss/float(self.__ss+self.__sd)*self.__ss/float(self.__ss+self.__ds))
评价:1。命名方式:用谷歌的命名方式,Python中类是用驼峰法,函数都是用下划线的小写字母法
2。注释,应该写在函数的下边,以后别人调用你函数的时候,如果看不懂,可以访问并看到你的注释。
3。import一定要写在最前面。原因:每次你调用这个函数的时候,都要重新import一次,这样时间复杂度会很高。
4。有的不用写入数据的,可以写作None。其实如果你想输入12,或13,可以把2,3两个都设成None,然后加一个判断if语句,如果2和3都没有输入,则return一个错误