机器学习模型评价指标

分为三个大块: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一个错误

    

   




你可能感兴趣的:(机器学习模型评价指标)