机器学习算法性能审核

切分数据集

原理

将数据集切分两部分,一部分用来作为训练模型,另一部分用来测试模型

代码

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
'''
参数:
X : 数据
Y: 标签
test_size: 测试集占数据集的百分比,小数
random_state: 随机数种子
'''

交叉验证

原理

将数据集划分为K个子集,每次选中一个子集作为测试集,剩余的K-1个子集作为训练模型的训练集

代码

from sklearn.mode_selection import cross_val_score # 导入交叉验证
cross_val_score(estimator= , X_train, y_train, cv=10)
'''
常用参数:
	estimator: 模型对象名
    X : 数据
    y : 标签
    cv='warn' :交叉拆分策略,分成几份
    n_jobs=None : 占用Cpu核心个数
'''

混淆矩阵

原理

统计A类别实例被分成B类别的次数,使用混淆矩阵必须有一组预测值和真实值

代码实现

#导包
# 预测
from sklearn.model_selection import cross_val_predict
# 混淆矩阵
from sklearn.metrics import confusion_matrix
# 获取预测值
y_pred = cross_val_predict(estimator, X_train, y_train, cv=3, method='predict')
'''
参数: 
estimator: 模型对象名
X_train: 数据
y_train : 标签
cv:折叠次数
method: 模型返回值,predict:预测标签值
'''
# 使用混淆矩阵
confusion_matrix(y_train, y_pred)
'''
参数:
y_true: 真实值
y_pred: 预测值
'''

精准度与召回率

上一步混淆矩阵中,会返回一个矩阵
假设预测为百人中查找罪犯的结果:
在这里插入图片描述

图示解析

  1. TN: 不是犯人且预测不是犯人
  2. TP: 是犯人且预测为犯人
    前两个预测都为正确的
  3. FN: 是好人却预测为犯人
  4. FP: 是犯人却预测为好人

召回率

T P T P + F N \frac {TP} {TP+FN} TP+FNTP

精准度

T P T P + F P \frac {TP}{TP+FP} TP+FPTP

F1分数

F 1 = 2 ∗ 准 确 率 ∗ 召 回 率 准 确 率 + 召 回 率 = T P T P + F N + F P 2 F_1=2*\frac{准确率*召回率}{准确率+召回率}=\frac{TP}{TP+\frac{FN+FP}{2}} F1=2+=TP+2FN+FPTP

代码

# 精准度
from sklearn.metrics import precision_score
precision_score(y_true, y_pred)
# 召回率
from sklearn.metrics import recall_score
recall_score(y_true, y_pred)
# F1分数
from sklearn.metrics import f1_score
f1_score(y_true, y_pred)
'''
参数:
y_true: 真实值
y_pred: 预测值
'''

ROC曲线

简介

受试者工作特征曲线(简称ROC曲线),ROC曲线和精准率/召回率(PR曲线)很相似,但并不是精准率和召回率,而是真正类率(召回率,TPR)和假正类率(FPR),假正类率是负类被分为正类的比率

代码

from sklearn.model_selection import cross_val_predict
# roc曲线包
from sklearn.metrics import roc_curve
# 画图包
from matplotlib import pyplot as plt
%matplotlib inline

y_score = cross_val_predict(estimator, X_train, y_train, cv=3, method='decision_function')
'''
参数:
	method:'decision_function',返回决策分数
'''
fpr, tpr, thresholds = roc_curve(y_train, y_score)
plt.plot(fpr, tpr, linewidth=2)
plt.plot([0, 1], [0, 1], 'k--')
plt.axis([0, 1, 0, 1])
plt.xlabel('假正类率')
plt.ylabel('真正类率')

在这里插入图片描述

AUC值

简介

AUC值代表ROC曲线下面积,完美分类器的AUC值为1,纯随机分类器的ROC曲线AUC值为0.5

代码
from sklearn.metrics import roc_auc_score
roc_auc_score(y_train, y_score)

经验法则:

当正类非常少见或者更关注假正类而不是假负类时,选择精准度/召回率(PR)曲线,反之选择ROC曲线

注: 通过ROC曲线对比,可以在多个模型中选择最适合当前数据的模型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值