分类指标

  • 混淆矩阵
  • ROC曲线
  • AUC
  • EER
  • 改进版本
  • 参考

混淆矩阵


在使用支持向量机模型进行分类时:如果调整判断的阈值,如


则TP,FP均增加。这是因为将判别的阈值改为-1,则会有更多的测试样本被判别为正样本,则TP,FP均增加。

ROC曲线

AUC

代表右下角面积,越大代表分类效果越好。

EER

等错误率。FP=FN

下面是对于兵王问题利用SVM来进行二分类的程序:
首先是对数据集进行一个分析和处理:

'''
总样本数28056,其中正样本2796,负样本25260.
随机选取5000个样本训练,其余测试。
将draw设置为+1,其他为-1
'''
s = open('krkopt.data','r',encoding='utf-8')
x_data = []
y_data = []
for i in s.readlines():i = i.rstrip().split(',')if i[0]=='??': breaky_data.append(1 if i[-1] == "draw" else -1)xs =[]for k in i[:-1]:xs.append(int(k) if k.isalpha()==False else (ord(k)-ord('a')+1))x_data.append(xs)
s.close()

然后进行归一化

#归一化
import pandas as pd
ds = pd.DataFrame(x_data,columns={'pbx','pby','pr1x','pr1y','pr2x','pr2y'})
columnname = [i for i in ds]
for i in columnname:ds[i] = (ds[i]-ds.describe()[i]['mean'])/(ds.describe()[i]['std'])
ds = ds.values
print(ds.shape)
print(len(y_data)

进行随机选取,得到训练集

import numpy as np
ds_x =[]
ds_y =[]
for i in range(2500):ind = np.random.randint(0, 2800)ds_x.append(ds[ind])ds_y.append(y_data[ind])
for i in range(2500):ind = np.random.randint(2800, 25260)ds_x.append(ds[ind])ds_y.append(y_data[ind])
print(ds_x[:5])
print(ds_y[:5])

进行SVM的训练和评估

from sklearn import svm
#3.训练svm分类器
classifier=svm.SVC(C=2,kernel='rbf',gamma=10,decision_function_shape='ovr') # ovr:一对多策略
#参数详解见https://blog.csdn.net/weixin_41990278/article/details/93137009
classifier.fit(ds_x,ds_y)
#4.计算svc分类器的准确率
print("训练集:",classifier.score(ds_x,ds_y))
print("测试集:",classifier.score(ds,y_data))
训练集: 1.0
测试集: 0.9668876532648988
#查看决策函数
print('train_decision_function:',classifier.decision_function(ds_x))
print('predict_result:',classifier.predict(ds_x))

计算混淆矩阵

#计算评价指标。
pred = classifier.predict(ds)
print(pred.shape)
correct = np.equal(y_data[:2796], pred[:2796])
TP = np.mean(correct.astype(np.float))
FN = 1-TP
correct_TN = np.equal(y_data[2796:], pred[2796:])
TN = np.mean(correct_TN.astype(np.float))
FP = 1-TN
matrix = [[TP, FN], [FP, TN]]
matrix = pd.DataFrame(matrix, columns=['正样本','负样本'])
matrix.index=['实际正样本','实际负样本']
print(matrix)
'''正样本       负样本
实际正样本  0.879471  0.120529
实际负样本  0.023436  0.976564
'''

改进版本

参考了一份代码,地址:https://www.yuque.com/docs/share/97eb71c5-2715-40af-b873-a61785175b98?#

#数据预处理与导包,里面有几个非常好用的函数。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib%matplotlib inline
matplotlib.rcParams.update({'font.size': 20})from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import confusion_matrixfrom sklearn.metrics import roc_curve# 读取数据
names = ['x1', 'y1', 'x2', 'y2', 'x3', 'y3', 'label']
data = pd.read_csv('krkopt.data', names=names)
data.head()# 处理数据
letter_num_map = {"a": 1,"b": 2,"c": 3,"d": 4,"e": 5,"f": 6,"g": 7,"h": 8,"draw": 1,"zero": -1,"one": -1,"two": -1,"three": -1,"four": -1,"five": -1,"six": -1,"seven": -1,"eight": -1,"nine": -1,"ten": -1,"eleven": -1,"twelve": -1,"thirteen": -1,"fourteen": -1,"fifteen": -1,"sixteen": -1
}
for i in ["x1", "x2", "x3", "label"]:data[i] = data[i].map(lambda x: letter_num_map.get(x, 0))# 查看数据
data.head()
data.info()
data.describe()
# 查看label分布
data.label.value_counts()
data.label.hist(figsize=(10, 5))
plt.title('Class counts')# 将数据集分割为训练集和测试集
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
# random_state 指定随机数seed
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=5000, random_state=0)print(X_train.shape)
print(y_train.shape)

在进行SVM训练时,用到了GridSearchCV()方法。
参考资料:https://blog.csdn.net/foneone/article/details/89985045
下面这里C与gamma的范围可以根据需要调整,这里我没有改变参数,训练的时间比较长。

# 归一化
scaler = StandardScaler()
scaler.fit(X_train)
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)# Grid Search with Cross-Validation
# 选用高斯核函数
param_grid = {'C': list(map(lambda x: 2 ** x, range(-5, 16))),'gamma': list(map(lambda x: 2 ** x, range(-15, 4)))}
print(f"Parameter grid:\n {param_grid}")# 训练 耗时操作需要等待
grid_search = GridSearchCV(SVC(), param_grid, cv=5)
grid_search.fit(X_train_scaled, y_train)
#评估 包括最佳参数得到的准确率和混淆矩阵,以及多个参数得到的ROC曲线。
# 测试准确率
print("Test set score: {:.4f}".format(grid_search.score(X_test_scaled, y_test)))
print("Best parameters: {}".format(grid_search.best_params_))# 查看混淆矩阵def plot_confusion_matrix(grid_search, x_test, y_test):fig = plt.figure(figsize=(10,10))ax = fig.add_subplot(1, 1, 1)y_pred = grid_search.predict(x_test)Carray = confusion_matrix(y_test, y_pred) #C中为TP FP TN FN 的值TP = Carray[0][0] / (Carray[0][0]+Carray[0][1])FN = 1-TPFP = Carray[1][0] /(Carray[1][0] +Carray[1][1])TN = 1-FPCmat = [[TP, FN] ,[FP , TN]]Cmat = pd.DataFrame(Cmat, columns=['预测正样本','预测负样本'])Cmat.index=['实际正样本','实际负样本']print(Cmat)plot_confusion_matrix(grid_search, X_test_scaled, y_test)# 绘制ROC曲线
def plot_roc_curve(grid_search, x_test, y_test):y_score = grid_search.decision_function(x_test)fpr,tpr,threshold = roc_curve(y_test, y_score) ###计算真正率和假正率roc_auc = auc(fpr,tpr) ###计算auc的值lw = 2plt.plot(fpr, tpr, color='darkorange',lw=lw, label='ROC curve (area = %0.2f)' % roc_auc) ###假正率为横坐标,真正率为纵坐标做曲线plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.05])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.title('Receiver operating characteristic example')plt.legend(loc="lower right")plt.show()print(roc_auc) #输出roc的值。
plot_roc_curve(grid_search, X_test_scaled, y_test)

AUC值为0.997313.

参考

https://blog.csdn.net/u012679707/article/details/80511968
//利用SVM对Iris.data进行分类。
https://blog.csdn.net/weixin_41990278/article/details/93137009
//参数SVM参数详解
https://blog.csdn.net/xyz1584172808/article/details/81839230//ROC
https://blog.csdn.net/foneone/article/details/89985045//GridSearchCV
https://blog.csdn.net/u011734144/article/details/80277225//confusion_matrix

机器学习识别系统的度量指标相关推荐

  1. 机器学习之分类性能度量指标 : ROC曲线、AUC值、正确率、召回率

    北京 | 高性能计算之GPU CUDA课程11月24-26日3天密集学习 快速带你晋级阅读全文> 在分类任务中,人们总是喜欢基于错误率来衡量分类器任务的成功程度.错误率指的是在所有测试样例中错分 ...

  2. 机器学习之性能度量指标

    机器学习的模型性能度量指标 在机器学习中,衡量,评估和选择一个模型好坏是通过一些常见指标实现的,称之为性能指标(Metrics). 对于一个二分类问题,我们首先给出如下基本指标基于这些指标可以推导出其 ...

  3. 网络安全漏洞管理十大度量指标

    当前,网络安全漏洞所带来的风险及产生的后果,影响到网络空间乃至现实世界的方方面面,通信.金融.能源.电力.铁路.医院.水务.航空.制造业等行业各类勒索.数据泄露.供应链.钓鱼等网络安全攻击事件层出不穷 ...

  4. 分类性能度量指标:准确性(AC)、敏感性(SE)、特异性(SP)、F1评分、ROC曲线、PR(Precision-Recall)曲线、AUC曲线,混淆曲线

    一:比较容易理解的比喻 以糖尿病人的筛查为例.第一个钟形代表正常人,第二个钟形代表糖尿病人.理想中,如果正常人和糖尿病人的血糖范围完全没有重合就好了.这样我就把标准定在中间那个最低点.低于此点的,就是 ...

  5. 分类器性能度量指标之ROC曲线、AUC值

    目录 概述 混淆矩阵(Confusion matrix) ROC曲线 AUC(Area under the ROC curve) AUC能拿来干什么 总结 参考资料: 概述 二分类问题在机器学习中是一 ...

  6. 机器学习算法(一):k-近邻理论与python实现+经典应用(约会网站匹配、手写识别系统)

    一份算法学习笔记~ 亲爱的朋友,恭喜你点开神秘之门,哈哈哈哈!从这里开始,我们一起学习机器学习的经典算法吧. 这一次的主要内容是机器学习入门算法:k-近邻.理论相当好理解,下面我们正式开始啦! 算法简 ...

  7. 微软为什么要公开AI系统测试数据集和度量指标?

    来源: 微软研究院AI头条 概要:微软研究院Maluuba团队的研究员Samira Ebrahimi Kahou等人在研究如何利用人工智能理解柱线图和饼图中所包含的信息这一问题时遇到了一个难题:没有现 ...

  8. 机器学习实战-手写识别系统

    在实现了K近邻算法后,书中给出了一个实例,今天来学习一下使用K近邻分类器的手写识别系统.书中原带的文件已经过处理转换为了文本格式,方便了许多. 先看一下原带文件 准备数据 #将图像转换为测试向量 de ...

  9. 解读:机器学习预测收益模型应该采取哪种度量指标

    写在前面 下面这篇文章的内容主要是来自发表于Expert Systems with Applications 的一篇文章<Machine learning models predicting r ...

最新文章

  1. Learun FrameWork 强大工作流引擎,让OA更智能
  2. java-web——第十课 session
  3. 街景图像分割_借助深度学习和街景图像进行城市的大规模树木死亡率研究
  4. 003Java语言环境搭建
  5. gradle入门_Gradle入门:简介
  6. 数据结构-树的基础代码
  7. 任正非:不向美国人民学习他们的伟大,就永远战胜不了美国
  8. 火热报名 |【 6月26日上海站】VCEC沙龙第5期:智能化技术在质量场景落地和实践...
  9. 天合光能环卫机器人_无人驾驶已在南京多个领域落地!无人环卫,离全面落地还有多久...
  10. vplex实施手册_VPLEX 运维及异构存储双活使用实例技术 | 在线答疑
  11. android 8.1.0怎么截屏,vivo Z1i怎么截屏?4种vivo Z1i截图方法
  12. 用OpenStack构建中国人寿数据中心生产云
  13. bootice工具修复linux,bootice工具怎么修复引导win7
  14. 微博、微信、qq、空间、等分享功能
  15. vue 时间线组件(时间轴组件)
  16. 利用ode45求解含控制量并且控制量为离散点的动力学方程
  17. 报表中小计汇总总计在代码实现
  18. SpringBoot 接口防止恶意刷新和暴力请求
  19. from keras.preprocessing.sequence import pad_sequences 标红
  20. 均值不等式中考_不等式(初三不等式100道带答案)

热门文章

  1. 分享丨从事设计10年后转行产品经理,总结6种工作差异
  2. 双屏神器——UltraMon,提升工作效率
  3. 信捷8轴焊锡机程序,采用显控触摸屏加XD5-60T10 每个轴的电子齿轮比单独设置,转盘式
  4. JAVA计算机毕业设计学生二手书籍交易平台计算机(附源码、数据库)
  5. 在“互联网+”时代下,专为餐饮行业量身打造的智能管理系统!
  6. Windows系统下安装CentOS
  7. 天猫11·11:蚂蚁金服如何用小团队支撑数亿人买买买?
  8. 专业技术计算机应用能力考试ppt2007,全国专业技术人员计算机应用能力考试专用教程:PowerPoint 2003中文演示稿(附光盘1张)...
  9. 网络资源共享实验报告
  10. 微软发布6月份安全更新程序补丁(For Windows xp/2003/2000/vista和Office 2003/2007所有更新产品补丁)