分类模型的评估和模型选择与调优

模型的评估标准

  • 准确率

    • estimator.score() 最常见,预测结果的正确百分比
  • 混淆矩阵
    • 在分类任务下,预测结果与正确标记之间存在四种不同的组合,构成了混淆矩阵(适用于多分类)
  • 精确率
    • 预测结果为正例样本中真实为正例的比例,也就是查得准
  • 召回率
    • 真实为正例的样本中预测结果为正例的比例,查的全,对正样本的区分能力
  • 其他分类标准
    • F1-score , 反映了模型的稳健性。具体会在代码运行结果中会显示。

以上都是对模型评估的一个标准。一些基础。


分类模型的评估API

sklearn.metrics.classfication_report(y_true,y_pred,target_names=None)
  y_true:真实目标值
  y_pred:估计器预测目标值
  target_names:目标类别名称
  return:每个类别精确率与召回率

 案例演示:

# 以新闻分类这个案例为例

from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer  # 特征抽取
from sklearn.naive_bayes import MultinomialNB  # 贝叶斯

# 1.获取数据
news = fetch_20newsgroups(subset=‘all‘)
# 2. 进行数据分割
x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25)
# 3.对数据集进特征抽取
tf = TfidfVectorizer()
# 以训练集当中的词进行重要性统计
x_train = tf.fit_transform(x_train)
# 对测试集也要进行词重要性统计
x_test = tf.transform(x_test)
# 4. 进行朴素贝叶斯算法
bys = MultinomialNB(alpha=0.1)
bys.fit(x_train, y_train)
# 5. 进行预测
predict = bys.predict(x_test)
print("预测文章类别为:",predict)
print("准确率:", bys.score(x_test, y_test))
# 6. 模型评估
from sklearn.metrics import classification_report
classification_report(y_test, predict, target_names=news.target_names)

代码


模型的选择与调优

交叉验证

  为了让评估模型更加的精准和可靠

  交叉验证过程:

将拿到的训练数据,分为训练和验证集.以下图为例:将数据分成 5份,其中一份作为验证集.然后经过 5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果.又称 5折交叉验证。

网格搜索

  调参数,也叫 超参数!

  超参数搜索 -- 网格搜索:

通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。 每组超参数都采用交叉验证来进行评估。最后选出 最优参数组合建立模型.


网格搜索 和 交叉验证API

sklearn.model_selection.GridSearchCV(estimator, param_grid=None, cv=None)
    对估计器的指定参数进行详尽搜索
    estimator:估计器对象
    param_grid:估计器参数(dict){"n_neighbors":[1,3,5]}
    cv:指定几折交叉验证
    fit:输入训练集数据
    score:准确率
结果分析
    best_score:在交叉验证中验证的最好结果
    best_estimator_:最好的参数模型
    cv_results_:每次交叉验证后的测试集准确率结果和训练集准确率结果

  案例代码:

# 代码案例
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.preprocessing import MinMaxScaler

# 读取数据
import pandas as pd
import numpy as np

data = np.loadtxt(‘datingTestSet.txt‘,dtype=np.object,delimiter=‘\t‘,encoding=‘gbk‘)
df = pd.DataFrame(data)

#获取特征值
x = df.iloc[:,:3]
# 获取目标值
y = df[3]

#特征工程
# 归一化
scaler = MinMaxScaler()
x = scaler.fit_transform(x)

# 分割数据集
x_train , x_test, y_train,y_test=train_test_split(x,y,test_size=0.25)

# 实例化估计器
kn= KNeighborsClassifier()

# 构造一些参数的值进行搜索
param={‘n_neighbors‘:[15,16,17,18,19,20,21,22,23,24]}

# 进行网格交叉搜索
gc = GridSearchCV(kn,param_grid=param,cv=2)
gc.fit(x_train,y_train)

# 预测准确率
print(‘测试集上的准确率:‘,gc.score(x_test,y_test))
print(‘在交叉验证中最好的结果:‘,gc.best_score_)
print(‘选择最好的模型是:‘,gc.best_estimator_)
print(‘每个超参数,每次交叉验证的结果:‘,gc.cv_results_)

原文地址:https://www.cnblogs.com/luowei93/p/11964729.html

时间: 2024-09-30 07:44:29

分类模型的评估和模型选择与调优的相关文章

Spark2 Model selection and tuning 模型选择与调优

Model selection模型选择 ML中的一个重要任务是模型选择,或使用数据为给定任务找到最佳的模型或参数. 这也称为调优. 可以对诸如Logistic回归的单独Estimators进行调整,或者对包括多个算法,特征和其他步骤的整个Pipeline进行调整. 用户可以一次调整整个Pipeline,而不必单独调整Pipeline中的每个元素. MLlib支持使用CrossValidator和TrainValidationSplit等工具进行模型选择.这些工具需要以下items:    Est

模型评估与模型选择

机器学习算法 原理.实现与实战——模型评估与模型选择 1. 训练误差与测试误差 机器学习的目的是使学习到的模型不仅对已知数据而且对未知数据都能有很好的预测能力. 假设学习到的模型是$Y = \hat{f}(X)$,训练误差是模型$Y = \hat{f}(X)$关于训练数据集的平均损失: $$R_{emp}(\hat{f}) = \frac{1}{N}\sum_{i=1}^NL(y_i,\hat{f}(x_i))$$ 其中$N$是训练样本容量. 测试误差是模型$Y = \hat{f}(X)$关于测

机器学习之模型评估与模型选择(学习笔记)

时间:2014.06.26 地点:基地 -------------------------------------------------------------------------------------- 一.训练误差和测试误差 机器学习或者说统计学习的目的就是使学习到的模型不仅对已知数据而且对未知数据都都很好的预测能力.不同的学习方法会得出不同的模型.在评判学习方法的好坏时,常用的是: 1.基于损失函数的模型的训练误差                          2.模型的测试误

机器学习:模型性能评估与参数调优

模型性能评估的常用指标 真阳性(True Positive,TP):指被分类器正确分类的正例数据 真阴性(True Negative,TN):指被分类器正确分类的负例数据 假阳性(False Positive,FP):被错误地标记为正例数据的负例数据 假阴性(False Negative,FN):被错误地标记为负例数据的正例数据 精确率=TP/(TP+FP),TP+FP是模型预测的正样本总数,精确率衡量的是准确性: 召回率=TP/(TP+FN),TP+FN是真实的正样本总数,召回率衡量的是覆盖率

模型性能评估

模型性能评估 模型性能评估是为了评价模型的泛化能力,模型性能评估主要有两个问题要解决: 1)用什么数据来评估? 2)用什么标准来评估? 下面的第一节内容主要解答用什么数据来评估模型的性能,第二节解答用什么标准来评估. 1.用什么数据来评估模型性能 常用的有3中,按照复杂程度程度排序分别为: 1)训练集+测试集 2)holdout方法 3)K折交叉验证 其中第1种方法是用测试集来评估模型的性能:第二种方法是用验证集+测试集来评估,验证集用于训练过程中的评估,测试集用于最终的评估:第3种方法也是用验

【NLP】蓦然回首:谈谈学习模型的评估系列文章(三)

基于NLP角度的模型评价方法 作者:白宁超 2016年7月19日19:04:51 摘要:写本文的初衷源于基于HMM模型序列标注的一个实验,实验完成之后,迫切想知道采用的序列标注模型的好坏,有哪些指标可以度量.于是,就产生了对这一专题进度学习总结,这样也便于其他人参考,节约大家的时间.本文依旧旨在简明扼要梳理出模型评估核心指标,重点达到实用.本文布局如下:第一章采用统计学习角度介绍什么是学习模型以及如何选择,因为现今的自然语言处理方面大都采用概率统计完成的,事实证明这也比规则的方法好.第二章采用基

性能测试模型和评估

性能的测量 性能只有在你决定测量性能的时候性能才是重要的.但一些人发现在测量性能的时候,很难确定需要测量哪个度量值,而且就算他们手头上有了这些信息之后 也不知道该怎么办.结果导致了很多人开始竭尽全力地获得所有相关信息.这当然也导致了系统负载过重和获得一些看起来没有意义的信息.在这样的情况下,一些 人完全放弃了测量,开始凭着他们的直觉对系统性能调优. 我们当然不能这么干,而应该系统地并且一步一步地对它进行测量.首先,理解为什么要测量性能和通过这些工作你想达到一个什么目标.如果你没有一个目标,那么就

Spark2.0机器学习系列之2:基于Pipeline、交叉验证、ParamMap的模型选择和超参数调优

Spark中的CrossValidation Spark中采用是k折交叉验证 (k-fold cross validation).举个例子,例如10折交叉验证(10-fold cross validation),将数据集分成10份,轮流将其中9份做训练1份做验证,10次的结果的均值作为对算法精度的估计. 10折交叉检验最常见,是因为通过利用大量数据集.使用不同学习技术进行的大量试验,表明10折是获得最好误差估计的恰当选择,而且也有一些理论根据可以证明这一点.但这并非最终结论,争议仍然存在.而且似

在PYTHON中使用TMTOOLKIT进行主题模型LDA评估

主题建模的英文一种在大量文档中查找抽象艺术主题艺术的方法.有了它,就有可能发现隐藏或"潜在"主题的混合,这些主题因给定语料库中的文档而异.一种作为监督无的机器学习方法,主题模型不容易评估,因为没有标记的"基础事实"数据可供比较.然而,由于主题建模通常需要预先定义一些参数(首先是要发现的主题?的数量),因此模型评估对于找到给定数据的"最佳"参数集是至关重要的. 概率LDA主题模型的评估方法 使用未标记的数据时,模型评估很难.这里描述的指标都试图用理