热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python分类算法评估模型_Python机器学习第4部分模型评估和参数调优

1、流水线集成数据转换和训练一般为了优化性能,提高准确率,一个常见的流程如下:对数据进行标准化转换,在采用上篇文章介绍的PC

1、流水线集成数据转换和训练

一般为了优化性能,提高准确率,一个常见的流程如下:对数据进行标准化转换,在采用上篇文章介绍的PCA(主成分分析)技术做特征抽取进行降维;最后在使用学习算法训练模型,并评价模型性能。

from sklearn.preprocessing import StandardScaler

from sklearn.decomposition import PCA

from sklearn.linear_model import LogisticRegression

from sklearn.pipeline import Pipeline

pipe_lr = Pipeline([('scl', StandardScaler()),

('pca', PCA(n_components = 2)),

('clf', LogisticRegression(random_state=1))])

pipe_lr.fit(X_train, Y_train)

pipe_lr.score(X_test, Y_test) #用测试集评估准确率2、K折交叉验证

为了降低所选训练数据和测试数据对模型评估对影响,引入K折交叉验证法。即不重复的将训练数据划分为K个子集,其中K-1个用于训练,剩余1个用于测试。重复这个过程K次,得到K个准确率值,可取均值进行评估。

from sklearn.cross_validation import Cross_Val_Score

scores = Cross_Val_Score(estimator = pipe_lr,

X = X_train,

Y = Y_train,

CV = 10, #指定K的值

n_jobs = 1)

np.mean(scores) #平均准确率

np.std(scores) #计算标准差 标准差是评估数据离散的程度如果训练的分类数据比例相差较大,需要保证每个分块中各类别数据的比例不变(与全部训练数据的比例一致)。这时需要采用分层交叉验证:

import numpy as np

from sklearn.cross_validation import StratifiedKFold

kfold = StratifiedKFold(y = Y_train,

n_folds = 10,

random_state = 1)

scores = []

for k, (train, test) in enumerate(kfold):

pipe_lr.fit(X_train[train], Y_train[train])

score = pipe_lr.score(X_train[test], Y_train[test])

scores.append(score)在模型调优过程中,我们使用K折交叉验证法找到最优超参,在用此超参做正常训练和评估。

3、绘制学习曲线得到样本数与准确率的关系

from sklearn.learning_curve import learning_curve

train_size, train_scores, test_scores = leanrning_curve(estimator=pipe_lr,

X=X_train,

Y=Y_train,

train_sizes=np.linspace(0.1, 1, 10),#在0.1和1间线性的取10个值

cv = 10,

n_jobs = 1)

train_mean = np.mean(train_scores, axis=1) #对得分矩阵train_scores各行取均值得到m列的向量 对十次评分取均值

test_mean = np.mean(test_scores, axis=1) #对得分矩阵test_scores各行取均值得到m列的向量 对十次评分取均值取得评分均值后,分别使用train_mean + train_size、test_mean + train_size绘制点阵图,观察样本数据量与训练准确率、测试准确率的关系。进而评估出模型是过拟合还是欠拟合。

4、绘制验证曲线得到超参和准确率关系

from sklearn.learning_curve import validation_curve

param_range = [0.001, 0.01, 0.1, 1.0, 10.0, 100.0]

train_scores, test_scores = validation_curve(

estimator=pipe_lr,

X=X_train,

Y=Y_train,

param_name='clf_C',#针对管道中名称为clf的模型,调整其参数C

param_range=param_range,#指定参数取值范围

cv = 10)

train_mean = np.mean(train_scores, axis=1)

text_mean = np.mean(text_scores, axis=1)

取得评分均值后,分别使用train_mean + train_size、test_mean + train_size绘制点阵图,观察模型超参与训练准确率、测试准确率的关系。进而评估模型最优超参。

5、网格搜索调优超参

from sklearn.grid_search import GridSearchCV

from sklearn.svm import SVC

pipe_scv = Pipeline([('scl', StandardScaler()),

('clf', SVC(random_state=1))])

param_range=[0.0001, 0.001, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0]

param_grid=[{'clf_C':param_range, 'clf_kernel': ['linear']},

{'clf_C':param_range, 'clf_gamma':param_range, 'clf_kernel': ['rbf']}]

gs = GridSearchCV(estimator=pipe_svc,

param_grid = param_grid,

scoring='accuracy',

cv = 10,

n_jobs = -1)

gs = gs.fit(X_train, Y_train)

gs.best_score_ #最优准确率

gs.best_params #最优超参组合

#获取最优模型进行评估

clf = gs.best_estimator_

clf.fit(X_train, Y_train)

clf.score(X_test, Y_test)网格搜索计算成本较高,为提高速度,可采用RandomizedSearchCV类。

6、选择最优算法

上面使用GridSearchCVC得到算法的最优参数和最优准确率,使用同样的方式对多个算法进行横向比较,进而得到最优算法。

gs = GridSearchCV(estimator = pipe_svc,#更换其他算法进行比较

param_grid = param_grid,

scoring='accuracy',

cv = 10,

n_jobs = -1)

scores = cross_val_score(gs, X, Y, scroing = 'accuracy', sv = 5)

np.mean(scores)

np.std(scores)注意:这里将GridSearchCV和cross_val_score组合起来比较算法准确率。

7、模型性能评估指标

在上面评估模型性能的时候,我们只是简单的采用准确率这个指标,在一些场景下,还可以采用其他评估方式。比如我们在分析肿瘤诊断结果时,更为关注的是正确检测出的恶性肿瘤,使得病人得到恰当治疗;当然降低良性肿瘤错误划分为恶性肿瘤的概率也很重要,但对患者影响并不大。这里我们就可以关注真正率。

根据模型验证结果,可以得到混淆矩阵(2X2矩阵,分别是真正、假负、假正、真负)

真正:正确分类的正样本数

假正:错误分类的负样本数

真负:正确分类的负样本数

假负:错误分类的正样本数

from sklearn.metrics import confusion_metrix

pipe_svc.fit(X_train, Y_train)

Y_pred = pipe_scv.predict(X_test)

confmat = confusion_metrix(y_true = Y_test, y_pred = Y_pred)误差率 = (假正+假负) / (真正 + 真负 + 假正 + 假负)

准确率 = 1 - 误差率 = (真正 + 真负)/ (真正 + 真负 + 假正 + 假负)

真正率 = 真正 / (真正 + 假负)

假正率 = 假正 / (真负 + 假正)

针对正样本的三个评估指标:

准确率=真正 / (真正 + 假正)----正样本的正确预测率

召回率 = 真正 / (真正 + 假负)----正样本正确分类的概率

F1 = (准确率 X 召回率 )/ (准确率 + 召回率)

from sklearn.metrics import precision_score, recall_score, f1_score

pipe_svc.fit(X_train, Y_train)

Y_pred = pipe_scv.predict(X_test)

precision_score(y_true=Y_test,y_pred=Y_pred) #计算准确率

recall_score(y_true=Y_test,y_pred=Y_pred) #计算召回率

f1_score(y_true=Y_test,y_pred=Y_pred) #计算f1GridSearchCV构造函数有一个scoring参数(以前传递的是'accuracy'),可以指定上述三个评估指标进而改变评估标准:

from sklearn.metrics import precision_score, recall_score, f1_score

scorer = make_scorer(f1_score, pos_label=0)

gs = GridSearchCV(estimator = pipe_svc,

param_grid = param_grid,

scoring = scorer, #指定了其他评估方法

cv = 10)如果要基于真正率和假正率这两个指标评估分类模型,可绘制出ROC(受试者工作特征)曲线,完美曲线为真正率为1,假正率为0(横轴0与纵轴1组成的折线),绘制各个分类模型的ROC曲线,选择最接近完美曲线的模型。

如果只是想得到ROC AUC评分,可使用roc_auc_score函数:

pipe_svc = pipe_svc.fit(X_train, Y_train)

Y_pred = pipe_svc.predict(X_test)

from sklearn.metrics import roc_auc_score,accuracy_score

roc_auc_score(y_true = Y_test, y_score = Y_pred)#得到roc auc评分

accuracy_score(y_true = Y_test, y_pred = Y_pred)#准确率ROC AUC评分可以进一步评估分类器在类别不均衡样本上的性能。



推荐阅读
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 机器学习之数据均衡算法种类大全+Python代码一文详解
    目录前言一、为什么要做数据均衡?二、数据场景1.大数据分布不均衡2.小数据分布不均衡三、均衡算法类型1.过采样2.欠采样3.组合采样四、算法具体种类1 ... [详细]
  • 本文介绍了如何将Spring属性占位符与Jersey的@Path和@ApplicationPath注解结合使用,以便在资源路径中动态解析属性值。 ... [详细]
  • 在运行于MS SQL Server 2005的.NET 2.0 Web应用中,我偶尔会遇到令人头疼的SQL死锁问题。过去,我们主要通过调整查询来解决这些问题,但这既耗时又不可靠。我希望能找到一种确定性的查询模式,确保从设计上彻底避免SQL死锁。 ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • 本文将详细介绍如何在Mac上安装Jupyter Notebook,并提供一些常见的问题解决方法。通过这些步骤,您将能够顺利地在Mac上运行Jupyter Notebook。 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 为什么python是动态类型语言_Python 3.7.0 面向对象的动态类型语言
    代表Python开发社区和Python3.7发布团队,我们很高兴地宣布https:www.python.orgdownloadsreleasepython-370 ... [详细]
  • 开发笔记:python协程的理解
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了python协程的理解相关的知识,希望对你有一定的参考价值。一、介绍什么是并发?并发的本质就是 ... [详细]
  • Python语言简介、环境搭建、PyCharm的安装和配置
    一、Python语言简介1.1Python语言的基本概念官方对Python语言的介绍如下:Python是一款易于学习且功能强大的编程语言。它具有高效率的数据结构,能够简单又有效地实 ... [详细]
author-avatar
ftwinkle
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有