100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 混淆矩阵评价指标_机器学习:模型训练和评估——分类效果的评价

混淆矩阵评价指标_机器学习:模型训练和评估——分类效果的评价

时间:2021-02-18 23:51:36

相关推荐

混淆矩阵评价指标_机器学习:模型训练和评估——分类效果的评价

图 | 源网络文 | 5号程序员

分类模型建立好后,这个模型到底符不符合要求要怎么评判呢?

事实上是有评价标准的。

要评价模型在测试集上预测结果的好坏,可以使用Sklearn库中的metrics模块方法进行计算。

常用的评价方式见下表:

更多方式可以参考网址:/sources/py/sklearn.metrics.html

为了更好的理解,下方将通过实例进行方法讲解。

首先,导入相应的库和鸢尾花数据集,然后找到K近邻参数:

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dimport seaborn as sns%matplotlib inline%config InlineBackend.figure_format = "retina"from matplotlib.font_manager import FontPropertiesfonts = FontProperties(fname="C:\Windows\Fonts\SimHei.ttf", size=14)from sklearn import metricsfrom sklearn.model_selection import train_test_splitfrom sklearn.datasets import load_irisfrom sklearn.pipeline import Pipelinefrom sklearn.preprocessing import StandardScalerfrom sklearn.model_selection import GridSearchCVfrom sklearn.neighbors import KNeighborsClassifier Iris = load_iris()train_x,test_x,train_y,test_y = train_test_split(Iris.data,Iris.target,test_size=0.25,random_state=2)pipe_KNN = Pipeline([("scale",StandardScaler()),("KNN",KNeighborsClassifier())])n_neighbors = np.arange(1,10)para_grid = [{"scale__with_mean":[True,False],"KNN__n_neighbors":n_neighbors}]gs_KNN_ir = GridSearchCV(estimator=pipe_KNN,param_grid=para_grid,cv=10,n_jobs=4)gs_KNN_ir.fit(train_x,train_y)gs_KNN_ir.best_params_

得到如图所示的结果:

01

混淆矩阵

接下来将通过confusion_matrix(真实类别,预测类别)来计算模型混淆矩阵,并将其可视化,使用的模型为通过网格搜索最优参数的K近邻分类模型。

在可视化时,使用sns.heatmap()绘制热力图。

先查看结果数:

pd.value_counts(test_y)

然后输出混淆矩阵:

Iris_clf = gs_KNN_ir.best_estimator_prey = Iris_clf.predict(test_x)metrics.confusion_matrix(test_y,prey)

最后将混淆矩阵可视化:

confm = metrics.confusion_matrix(test_y,prey)heatmap = sns.heatmap(confm.T,square=True,annot=True,fmt="d",cbar=False,cmap=plt.cm.gray_r)bottom,top = heatmap.get_ylim()heatmap.set_ylim(bottom+ 0.5, top - 0.5)plt.xlabel("Truelabel")plt.ylabel("Predictedlabel")plt.show()

从结果可以看出,热力图比直接看混淆矩阵的输出更方便,有更强的视觉对比度。

02

F1得分

使用classification_report()将会得到一个包含主要评价方法结果的报告。

下方是对K近邻预测值进行评价:

print(metrics.classification_report(test_y,prey))

针对上面的输出,各项含义如下表所示:

03

AUC和ROC曲线

很多学习器是为测试样本产生一个实值或者概率预测,然后将这个预测值与一个分类阈值进行比较,如果大于阈值则分为正类,否则为反类。

比如在朴素贝叶斯分类器中,针对每一个测试样本预测出一个[0,1]之间的概率,然后将这个值与0.5比较,如果大于0.5则判断为正类,否则为反类。

阈值的好坏直接反映了学习算法的泛化能力。

根据预测值的概率,可以使用受试者工作特征(ROC)曲线来分析机器学习算法的泛化性能。

在ROC曲线中,纵轴是真正例率(True positive rate),横轴是假正例率(False positive rate)。

可以使用roc_curve()来计算横纵坐标绘制图像。

ROC曲线与横轴围成的面积大小称为学习器的AUC(Area Under ROC Curve),该值越接近1,则算法模型越好,AUC值可通过roc_auc_score()计算。

下图为一个朴素贝叶斯模型的ROC曲线,具体代码将在后文中介绍,这里仅作了解:

04

对模型的评价关系到模型使用的有效性,本节主要介绍metrics模块方法,之后的学习中还会频繁用到。

除了该方法外,我们在建立回归模型时会遇到很多检验结果,也是对模型的好坏进行检验和评价,所以下一节我们将说说回归模型的评价

你确定不关注我一波?!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。