机器学习模型的评价指标

一.不同的评测指标

通常从算法类型选择指标:

  • 分类指标
  • 回归指标
  • 聚类指标
1.分类常用的指标

准确率(accuracy): 对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。
AUC(Area Under Curve):AUC更大的分类器效果更好。

2.回归常用的指标

均方误差MSE (Mean Squared Error):是反映估计量与被估计量之间差异程度的一种度量:

在这里插入图片描述
平均绝对误差MAD(Mean Absolute Deviation):
在这里插入图片描述

二.交叉验证

  1. 为什么要使用交叉验证?
    将原始数据分成K个子集(一般是均分),将每个子集数据分别做一次测试集(testing set),其余的K-1组子集数据作为训练集(training set)。这样会得到K个模型,用这K个模型最终的验证集的分类指标的平均数作为K-CV下分类器的性能指标。

    K一般大于等于2,实际操作时一般从3开始取。交叉验证重复K次,每次选择一个子集作为测试集,并将K次的平均交叉验证识别正确率作为结果。
    通常交叉验证法称为“K折交叉验证”, 10-folder通常被使用。

  2. 优点
    所有的样本都被作为了训练集和测试集,每个样本都被验证一次。

三.实现分类、回归指标

机器学习库sklearn中,使用metrics方法实现。

  1. 分类模型的评测指标的调用
# 使用sklearn模块实现准确率计算
import numpy as np
from sklearn.metrics import accuracy_score
y_pred =[0,2,1, 3]
y_true =[0, 1, 2, 3]
print(accuracy_score(y_true, y_pred))  # 结果0.5 正确率2/4 = 0.5
print(accuracy_score(y_true, y_pred , normalize=False)) # 结果2  分正错了2个样本

# 使用sklearn模块计算AUC值
import numpy as np
from sklearn import metrics
y = np.array([1,1,2,2])
pred = np.array([0.1,0.4,0.35,0.8])
print(pred)
fpr,tpr,thresholds = metrics.roc_curve(y,pred,pos_label=2)
print(metrics.auc(fpr,tpr))  # 结果0.75
  1. 回归模型的评测指标的调用
# 使用sklearn模块计算均方误差
import numpy as np
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import mean_squared_error
y_true =[3, -0.5,2,7] #一维输出
y_pred =[2.5, 0,2,8]
print(mean_squared_error(y_true, y_pred))  # 结果 0.375
y_true =([0.5, 1],[-1, 1],[7, -6]) #二维输出
y_pred = ([0,2],[-1,2],[8, -5])
print(mean_squared_error(y_true, y_pred))  # 结果:0.7083333333333334

四.交叉验证(Cross validation)

机器学习库sklearn中,使用cross_val_score方法实现:

  1. 拟合模型和计算连续5次的分数(每次不同分割)来估计支持向量机在iris数据集上的精度。
from sklearn.model_selection import cross_val_score
scores = cross_val_score(knn, iris.data, iris.target, cv=5)
print(scores) 
  1. 评分 估计的平均得分和95%置信区间由此给出
print(“Accuracy:%0.2f (+/-%0.2f)%(scores.mean(),scores.std()*2))#注意不要用全角引号
#  结果: Accuracy:0.98(+/-0.03)

# 或者直接打印均值、方差
print(scores.mean())
print(scores.std()*2)
 # 结果:0.9800000000000001
 # 结果:0.03265986323710903
  1. 在默认情况下,每次cross_val_score迭代计算的指标结果是保存在属性score中的,也可以使用scoring参数来选择不同的指标。
#from sklearn import metrics
from sklearn.model_selection import cross_val_score
clf=svm.SVC(kernel='linear',C=1)
scores = cross_val_score(clf, iris.data, iris.target, cv=5,scoring='f1_macro')
print(scores)
  1. 当cv参数是一个整数k时,cross_val_score使用k-fold策略,同时也可以通过引入一个交叉验证迭代器来使用其他交叉验证策略。
from sklearn.model_selection import ShuffleSplit
n_samples=iris.data.shape[0]
cv=ShuffleSplit(n_splits=3,test_size=0.3,random_state=0)
scores = cross_val_score(clf, iris.data, iris.target, cv=cv)
print(scores)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值