您的位置:首页 > 其它

机器学习模型评价指标

2016-03-17 16:33 615 查看
分为三个大块: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一个错误
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: