数据挖掘 —— 模型评估
数据挖掘 —— 模型评估
- 1.分类模型评估(一)
- 1.1 二分类模型
- 1.2 多分类模型
- 1.3 代码
- 2.分类模型评估(二)
- 2.1 ROC 与 AUC
- 2.2 代码
1.分类模型评估(一)
1.1 二分类模型
- 一般情况下更关注正类
- 混淆矩阵:
TP(TruePositive):正确的正类
FN(FalseNegative):错误的负类
FP(FalseNegative):错误的正类
TN(TrueNegative):正确的负类
TN FPFN TP
- 关键指标
Accuracy Rate(准确率):(TP+TN)/(TP+TN+FP+FN)
TPR(True Positive Rate)/(Recall Rate)召回率: TP/(TP+FN)
F-measure(F值):2RecallAccuracy/(Recall + Accuracy) 调和平均值
Precision Rate(查准率): TP/(TP+FP)
FPR(False posotive Rate)(错误接受率): (FP)/(FP+TN)
FRR(False Reject Rate)(错误拒绝率): FN/(TP+FN)
1.2 多分类模型
预测分类Y1 Y2 ... Yn
真实分类: Y1Y2...Yn
- 关键指标:
- 准确率:保持不变
- 召回率和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
数据挖掘 —— 模型评估相关推荐
- R语言分类模型:逻辑回归模型LR、决策树DT、推理决策树CDT、随机森林RF、支持向量机SVM、Rattle可视化界面数据挖掘、分类模型评估指标(准确度、敏感度、特异度、PPV、NPV)
R语言分类模型:逻辑回归模型LR.决策树DT.推理决策树CDT.随机森林RF.支持向量机SVM.Rattle可视化界面数据挖掘.分类模型评估指标(准确度.敏感度.特异度.PPV.NPV) 目录
- 数据挖掘 -- 分类的模型评估度量
数据挖掘 – 分类的模型评估度量 混淆矩阵 CM(Confusion Matrix) actual/precide Yes No 合计 Yes TP FN P No FP TN N 合计 P^ N^ ...
- R语言 零基础入门教程第11章 Rattle可视化数据挖掘工具(1)Rattle简介及安装 功能预览 数据导入 数据探索 数据建模 模型评估 Rattle实例
关注公众号凡花花的小窝,收获更多的考研计算机专业编程相关的资料 本章内容 Rattle简介及安装 功能预览 数据导入 数据探索 数据建模 模型评估 Rattle实例 本章目标 了解Rattle的安装及 ...
- Python数据分析-数据挖掘(准备数据——数据建模——模型评估——模型应用)
20 理解业务和数据:我们需要做好什么计划?_哔哩哔哩_bilibili 目录 一.理解业务和数据:我们需要做好什么计划? 1.1两个思想问题 1.2为什么数据挖掘不是万能的 1.3业务背景与目标 1 ...
- 数据挖掘:模型评估指标
数据挖掘:模型评估 一般在比赛中,我们会看到对于回归(分类)问题,不同的比赛会有不同的评价指标.我们在训练模型时,不能只记住回归问题用均方误差,而不去在意比赛目标的评价指标,这样我们往往会得到比较差的 ...
- 分类决策树考虑了经验风险吗_数据挖掘导论 第4章 分类:基本概念、决策树与模型评估...
第4章 分类:基本概念.决策树与模型评估 分类(classification):分类任务就是通过学习得到一个目标函数(target function)f,把每个属性集x映射到一个余弦定义的类标号y.目 ...
- 数据挖掘读书笔记--第八章(下):分类:模型评估与选择、提高分类器准确率技术
散记知识点 --"评估分类器,提高分类器" 5. 模型评估与选择 5.1 评估分类器性能 (1) 评估分类器性能的度量 评估分类器性能的度量主要有:准确率(识别率).敏感度(召回率 ...
- 机器学习模型评估与超参数调优详解
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤 深圳大学,Datawhale高校群成员 机器学习分为两类 ...
- 第六课.模型评估与模型选择
目录 导语 模型评估 回归任务的评估指标 分类任务的评估指标 过拟合现象 过拟合的原因 过拟合解决办法 模型选择与调整超参数 正则化 留出法 交叉验证 网格搜索 实验:线性回归预测股票走势 实验说明 ...
最新文章
- Docker 1.3.2发布:修复重大安全问题
- Spring 源码分析, ApplicationContext build 包找不到编译异常
- 第九章 神经网络学习-机器学习老师板书-斯坦福吴恩达教授
- ASP无法上传大文件的解决方法
- 机房收费系统——转换list泛型时,字段名称不正确应出现故障
- python自动注册邮箱_[转][Python][自动登录163邮箱]
- 使用字符串切割,使手机号中间四位隐藏
- 关闭word_Word文档如何快速查找?超实用的5个Word技巧教给你
- springsecurity 认证之授权码模式
- slice 定义和用法
- 安卓9.0官方系统升级包_想升级鸿蒙系统都来看看!华为新系统升级名单曝光:有你手机吗?...
- 学术 | 不爱科研,只为当大学老师而读博,这种做法对吗?
- 【Daily Scrum】12-25
- c# Excel的操作
- QQ空间自动点赞代码
- 城市智慧停车管理模式方案科普
- sdr 软件_购买软件定义无线电(SDR)还是传统无线电台?|追求欲望无止境
- 辨认NPN三极管的三个管脚
- 云服务器显示异地登录,云服务器异地登录异常
- linux上无法发送163邮件,如何在linux中发送邮件,使用163邮箱发信。
热门文章
- 高效遍历Java容器
- 解决com.alibaba.fastjson.JSONException: autoType is not support
- 框架:@Bean注解
- 2019中国大学生程序设计竞赛(CCPC)-网络选拔赛-第七题Shuffle Card
- win7计算机内存占用高,WIN7系统电脑内存占用高的解决办法有哪些
- html5 input required oninvalid,为什么我的“ oninvalid”属性会让模式失败?
- 直流UPS与传统UPS系统节能分析
- ad软件 pcb如何走线过孔_【经验】关于高速PCB设计的一些经典问答
- 成功解决 利用plt.plot绘图时,横坐标出现浮点小数而不是整数的情况(坐标轴刻度)
- BlockChain:BlockChain周边概念详解+个人理解