文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python计算分类问题的评价指标(准确率、精确度、召回率和F1值,Kappa指标)

2023-09-17 12:59

关注

机器学习的分类问题常用评论指标有:准确率、精确度、召回率和F1值,还有kappa指标 。

每次调包去找他们的计算代码很麻烦,所以这里一次性定义一个函数,直接计算所有的评价指标。

每次输入预测值和真实值就可以得到上面的指标值,很方便。

下面是这些指标的计算公式:

kappa指标:

  


Python计算代码

下面是定义函数:(主要也是借助sklearn库)

#导入数据分析常用包import numpy as np import pandas as pd from sklearn.metrics import confusion_matrixfrom sklearn.metrics import classification_reportfrom sklearn.metrics import cohen_kappa_scoredef evaluation(y_test, y_predict):    accuracy=classification_report(y_test, y_predict,output_dict=True)['accuracy']    s=classification_report(y_test, y_predict,output_dict=True)['weighted avg']    precision=s['precision']    recall=s['recall']    f1_score=s['f1-score']    #kappa=cohen_kappa_score(y_test, y_predict)    return accuracy,precision,recall,f1_score #, kappa

这个函数就两个参数,真实值和预测值,放入就可以计算上面的所有指标了,函数的返回值就是accuracy,precision,recall,f1_score #, kappa。

kappa我注释掉了,要用的话拿出来就行。


画图展示:

比如我们已经准备好了特征变量X和响应变量y

下面划分测试集和训练集:

#划分训练集和测试集from sklearn.model_selection import train_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,stratify=y,test_size=0.2,random_state=0)

标准化一下: 

#数据标准化from sklearn.preprocessing import StandardScalerscaler = StandardScaler()scaler.fit(X_train)X_train_s = scaler.transform(X_train)X_test_s = scaler.transform(X_test)print('训练数据形状:')print(X_train_s.shape,y_train.shape)print('验证集数据形状:')print(X_test_s.shape,y_test.shape)

弄十个机器学习模型对比:

from sklearn.linear_model import LogisticRegressionfrom sklearn.discriminant_analysis import LinearDiscriminantAnalysisfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.ensemble import GradientBoostingClassifierfrom xgboost.sklearn import XGBClassifierfrom lightgbm import LGBMClassifierfrom sklearn.svm import SVCfrom sklearn.neural_network import MLPClassifier

 实例化分类器:

#逻辑回归model1 =  LogisticRegression(C=1e10,max_iter=10000)#线性判别分析model2 = LinearDiscriminantAnalysis()#K近邻model3 = KNeighborsClassifier(n_neighbors=10)#决策树model4 = DecisionTreeClassifier(random_state=77)#随机森林model5= RandomForestClassifier(n_estimators=1000,  max_features='sqrt',random_state=10)#梯度提升model6 = GradientBoostingClassifier(random_state=123)#极端梯度提升model7 =  XGBClassifier(use_label_encoder=False,eval_metric=['logloss','auc','error'],                        objective='multi:softmax',random_state=0)#轻量梯度提升model8 = LGBMClassifier(objective='multiclass',num_class=3,random_state=1)#支持向量机model9 = SVC(kernel="rbf", random_state=77)#神经网络model10 = MLPClassifier(hidden_layer_sizes=(16,8), random_state=77, max_iter=10000)model_list=[model1,model2,model3,model4,model5,model6,model7,model8,model9,model10]model_name=['逻辑回归','线性判别','K近邻','决策树','随机森林','梯度提升','极端梯度提升','轻量梯度提升','支持向量机','神经网络']

 计算评价指标:用df_eval数据框装起来计算的评价指标数值

df_eval=pd.DataFrame(columns=['Accuracy','Precision','Recall','F1_score'])for i in range(10):    model_C=model_list[i]    name=model_name[i]    model_C.fit(X_train_s, y_train)    pred=model_C.predict(X_test_s)    #s=classification_report(y_test, pred)    s=evaluation(y_test,pred)    df_eval.loc[name,:]=list(s)

 查看

df_eval

 

 

 画对应的柱状图:

import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['KaiTi']  #中文plt.rcParams['axes.unicode_minus'] = False   #负号bar_width = 0.4colors=['c', 'b', 'g', 'tomato', 'm', 'y', 'lime', 'k','orange','pink','grey','tan']fig, ax = plt.subplots(2,2,figsize=(10,8),dpi=128)for i,col in enumerate(df_eval.columns):    n=int(str('22')+str(i+1))    plt.subplot(n)    df_col=df_eval[col]    m =np.arange(len(df_col))    plt.bar(x=m,height=df_col.to_numpy(),width=bar_width,color=colors)        #plt.xlabel('Methods',fontsize=12)    names=df_col.index    plt.xticks(range(len(df_col)),names,fontsize=10)    plt.xticks(rotation=40)    plt.ylabel(col,fontsize=14)    plt.tight_layout()#plt.savefig('柱状图.jpg',dpi=512)plt.show()

 四个评价指标,对应的十种模型进行对比。

这个自定义计算分类评价指标函数还是很方便的,还可以用于交叉验证里面,全面评价模型的预测好坏程度。

来源地址:https://blog.csdn.net/weixin_46277779/article/details/129338660

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯