数据挖掘 —— 模型评估

  • 1.分类模型评估(一)
    • 1.1 二分类模型
    • 1.2 多分类模型
    • 1.3 代码
  • 2.分类模型评估(二)
    • 2.1 ROC 与 AUC
    • 2.2 代码

1.分类模型评估(一)

1.1 二分类模型

  • 一般情况下更关注正类
  • 混淆矩阵:
  1. TP(TruePositive):正确的正类

  2. FN(FalseNegative):错误的负类

  3. FP(FalseNegative):错误的正类

  4. TN(TrueNegative):正确的负类

         TN     FPFN     TP
    
  • 关键指标
  1. Accuracy Rate(准确率):(TP+TN)/(TP+TN+FP+FN)

  2. TPR(True Positive Rate)/(Recall Rate)召回率: TP/(TP+FN)

  3. F-measure(F值):2RecallAccuracy/(Recall + Accuracy) 调和平均值

  4. Precision Rate(查准率): TP/(TP+FP)

  5. FPR(False posotive Rate)(错误接受率): (FP)/(FP+TN)

  6. FRR(False Reject Rate)(错误拒绝率): FN/(TP+FN)

1.2 多分类模型

                    预测分类Y1    Y2   ...   Yn
真实分类: Y1Y2...Yn
  • 关键指标:
  1. 准确率:保持不变
  2. 召回率和F值:两种思路
    (1)、先计算所有的TP、FN,加起来,再以二值方式计算(微平均)
    (2)、分别把每个类当做正类,都算一个召回率或者F值,然后取加权或者不加权的平均(宏平均)

1.3 代码

# sklearn实现:
from sklearn.datasets import load_iris
from sklearn.metrics import recall_score,accuracy_score,f1_score,precision_score
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
import pandas as pd
data  = load_iris()
X = data["data"]
Y = data["target"]X_train,X_test,Y_train,Y_test = train_test_split(X,Y)
knn_model = KNeighborsClassifier(n_neighbors = 6)
knn_model.fit(X_train,Y_train)
Y_predict= knn_model.predict(X_test)
print("*"*8,"metrics","*"*8)
print("ACC:",accuracy_score(Y_test,Y_predict))
print("recall for micro:",recall_score(Y_test,Y_predict,average="micro"))
print("recall for macro:",recall_score(Y_test,Y_predict,average="macro"))
print("f1 for micro:",f1_score(Y_test,Y_predict,average="micro"))
print("f1 for macro:",f1_score(Y_test,Y_predict,average="macro"))
******** metrics ********
ACC: 0.9736842105263158
recall for micro: 0.9736842105263158
recall for macro: 0.9629629629629629
f1 for micro: 0.9736842105263158
f1 for macro: 0.9696394686907022

2.分类模型评估(二)

2.1 ROC 与 AUC

  • ROC : Receiver Operating Characteristic Curve
  • AUC: Area under Curve

2.2 代码

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
import os
os.environ["PATH"] += os.pathsep + "D://bin/"# 准备数据
features = pd.read_excel("./data.xlsx",sheet_name = "features",header = 0)
label = pd.read_excel("./data.xlsx",sheet_name = "label",header = 0)# 训练集 验证集 测试集 拆分
def data_split(X,Y):X_tt,X_validation,Y_tt,Y_validation = train_test_split(X,Y,test_size = 0.2)X_train,X_test,Y_train,Y_test = train_test_split(X_tt,Y_tt,test_size = 0.25)return X_train,Y_train,X_validation,Y_validation,X_test,Y_test
X_train,Y_train,X_validation,Y_validation,X_test,Y_test = data_split(features.values,label.values)# 搭建神经网络模型
from keras.models import Sequential
# 搭建模型框架
nn_model = Sequential()
# 添加输入层
from keras.layers import Dense,Activation
nn_model.add(Dense(50,input_dim = len(X_train[0])))
nn_model.add(Activation("sigmoid"))
# 添加隐含层
nn_model.add(Dense(10))
nn_model.add(Activation("sigmoid"))
# 添加输出层
nn_model.add(Dense(2))
nn_model.add(Activation("softmax"))# 神经网络编译
from keras.optimizers import SGD,Adam
sgd = SGD(lr = 0.51) # lr为学习率
adam = Adam(lr = 0.01)
nn_model.compile(loss = "mean_squared_error",optimizer = adam)
"""
改用亚当优化器 效果更好 adam
"""# 神经网络训练
Y_train_nn = np.array([[1,0] if i ==0 else [0,1] for i in Y_train])
nn_model.fit(X_train,Y_train_nn,nb_epoch = 1000,batch_size = 4000)# nb_epoch 为最大迭代次数,bath_size为随机样本数量# 使用模型预测
validation_predict = nn_model.predict_classes(X_validation)
test_predict = nn_model.predict_classes(X_test)
train_predict = nn_model.predict_classes(X_train)# 预测效果检验
def model_metrics(x1,x2,name):from sklearn.metrics import f1_score,recall_score,accuracy_score,precision_scoreprint(name,":")print("\tf1_score",f1_score(x1,x2))print("\taccuracy_score",accuracy_score(x1,x2))print("\trecall_score",recall_score(x1,x2))print("\tprecision_score",precision_score(x1,x2))model_metrics(train_predict,Y_train,"训练集")
model_metrics(validation_predict,Y_validation,"验证集")
model_metrics(test_predict,Y_test,"测试集")# 预测训练集属于正类的概率值
Y_predict_test = nn_model.predict(X_test)
Y_predict_test = Y_predict_test[:,1]from sklearn.metrics import roc_curve,auc,roc_auc_score
import matplotlib.pyplot as plt# 计算 fpr(错误接受率)和TPR(召回率)
fpr,tpr,threshold = roc_curve(Y_test,Y_predict_test) # threshold为阈值
plt.plot(fpr,tpr)
plt.xlabel("fpr")
plt.ylabel("tpr")
plt.show()print("AUC",auc(fpr,tpr))
print("AUC",roc_auc_score(Y_test,Y_predict_test))

by CyrusMay 2022 04 06

数据挖掘 —— 模型评估相关推荐

  1. R语言分类模型:逻辑回归模型LR、决策树DT、推理决策树CDT、随机森林RF、支持向量机SVM、Rattle可视化界面数据挖掘、分类模型评估指标(准确度、敏感度、特异度、PPV、NPV)

    R语言分类模型:逻辑回归模型LR.决策树DT.推理决策树CDT.随机森林RF.支持向量机SVM.Rattle可视化界面数据挖掘.分类模型评估指标(准确度.敏感度.特异度.PPV.NPV) 目录

  2. 数据挖掘 -- 分类的模型评估度量

    数据挖掘 – 分类的模型评估度量 混淆矩阵 CM(Confusion Matrix) actual/precide Yes No 合计 Yes TP FN P No FP TN N 合计 P^ N^ ...

  3. R语言 零基础入门教程第11章 Rattle可视化数据挖掘工具(1)Rattle简介及安装 功能预览 数据导入 数据探索 数据建模 模型评估 Rattle实例

    关注公众号凡花花的小窝,收获更多的考研计算机专业编程相关的资料 本章内容 Rattle简介及安装 功能预览 数据导入 数据探索 数据建模 模型评估 Rattle实例 本章目标 了解Rattle的安装及 ...

  4. Python数据分析-数据挖掘(准备数据——数据建模——模型评估——模型应用)

    20 理解业务和数据:我们需要做好什么计划?_哔哩哔哩_bilibili 目录 一.理解业务和数据:我们需要做好什么计划? 1.1两个思想问题 1.2为什么数据挖掘不是万能的 1.3业务背景与目标 1 ...

  5. 数据挖掘:模型评估指标

    数据挖掘:模型评估 一般在比赛中,我们会看到对于回归(分类)问题,不同的比赛会有不同的评价指标.我们在训练模型时,不能只记住回归问题用均方误差,而不去在意比赛目标的评价指标,这样我们往往会得到比较差的 ...

  6. 分类决策树考虑了经验风险吗_数据挖掘导论 第4章 分类:基本概念、决策树与模型评估...

    第4章 分类:基本概念.决策树与模型评估 分类(classification):分类任务就是通过学习得到一个目标函数(target function)f,把每个属性集x映射到一个余弦定义的类标号y.目 ...

  7. 数据挖掘读书笔记--第八章(下):分类:模型评估与选择、提高分类器准确率技术

    散记知识点 --"评估分类器,提高分类器" 5. 模型评估与选择 5.1 评估分类器性能 (1) 评估分类器性能的度量 评估分类器性能的度量主要有:准确率(识别率).敏感度(召回率 ...

  8. 机器学习模型评估与超参数调优详解

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤  深圳大学,Datawhale高校群成员 机器学习分为两类 ...

  9. 第六课.模型评估与模型选择

    目录 导语 模型评估 回归任务的评估指标 分类任务的评估指标 过拟合现象 过拟合的原因 过拟合解决办法 模型选择与调整超参数 正则化 留出法 交叉验证 网格搜索 实验:线性回归预测股票走势 实验说明 ...

最新文章

  1. Docker 1.3.2发布:修复重大安全问题
  2. Spring 源码分析, ApplicationContext build 包找不到编译异常
  3. 第九章 神经网络学习-机器学习老师板书-斯坦福吴恩达教授
  4. ASP无法上传大文件的解决方法
  5. 机房收费系统——转换list泛型时,字段名称不正确应出现故障
  6. python自动注册邮箱_[转][Python][自动登录163邮箱]
  7. 使用字符串切割,使手机号中间四位隐藏
  8. 关闭word_Word文档如何快速查找?超实用的5个Word技巧教给你
  9. springsecurity 认证之授权码模式
  10. slice 定义和用法
  11. 安卓9.0官方系统升级包_想升级鸿蒙系统都来看看!华为新系统升级名单曝光:有你手机吗?...
  12. 学术 | 不爱科研,只为当大学老师而读博,这种做法对吗?
  13. 【Daily Scrum】12-25
  14. c# Excel的操作
  15. QQ空间自动点赞代码
  16. 城市智慧停车管理模式方案科普
  17. sdr 软件_购买软件定义无线电(SDR)还是传统无线电台?|追求欲望无止境
  18. 辨认NPN三极管的三个管脚
  19. 云服务器显示异地登录,云服务器异地登录异常
  20. linux上无法发送163邮件,如何在linux中发送邮件,使用163邮箱发信。

热门文章

  1. 高效遍历Java容器
  2. 解决com.alibaba.fastjson.JSONException: autoType is not support
  3. 框架:@Bean注解
  4. 2019中国大学生程序设计竞赛(CCPC)-网络选拔赛-第七题Shuffle Card
  5. win7计算机内存占用高,WIN7系统电脑内存占用高的解决办法有哪些
  6. html5 input required oninvalid,为什么我的“ oninvalid”属性会让模式失败?
  7. 直流UPS与传统UPS系统节能分析
  8. ad软件 pcb如何走线过孔_【经验】关于高速PCB设计的一些经典问答
  9. 成功解决 利用plt.plot绘图时,横坐标出现浮点小数而不是整数的情况(坐标轴刻度)
  10. BlockChain:BlockChain周边概念详解+个人理解