python sklearn包——混淆矩阵、分类报告等自动生成方式


Posted in Python onFebruary 28, 2020

preface:做着最近的任务,对数据处理,做些简单的提特征,用机器学习算法跑下程序得出结果,看看哪些特征的组合较好,这一系列流程必然要用到很多函数,故将自己常用函数记录上。应该说这些函数基本上都会用到,像是数据预处理,处理完了后特征提取、降维、训练预测、通过混淆矩阵看分类效果,得出报告。

1.输入

从数据集开始,提取特征转化为有标签的数据集,转为向量。拆分成训练集和测试集,这里不多讲,在上一篇博客中谈到用StratifiedKFold()函数即可。在训练集中有data和target开始。

2.处理

def my_preprocessing(train_data):
  from sklearn import preprocessing
  X_normalized = preprocessing.normalize(train_data ,norm = "l2",axis=0)#使用l2范式,对特征列进行正则
  return X_normalized
 
def my_feature_selection(data, target):
  from sklearn.feature_selection import SelectKBest
  from sklearn.feature_selection import chi2
  data_new = SelectKBest(chi2, k= 50).fit_transform(data,target)
  return data_new
 
def my_PCA(data):#data without target, just train data, withou train target.
  from sklearn import decomposition
  pca_sklearn = decomposition.PCA()
  pca_sklearn.fit(data)
  main_var = pca_sklearn.explained_variance_
  print sum(main_var)*0.9
  import matplotlib.pyplot as plt
  n = 15
  plt.plot(main_var[:n])
  plt.show()
 
def clf_train(data,target):
  from sklearn import svm
  #from sklearn.linear_model import LogisticRegression
  clf = svm.SVC(C=100,kernel="rbf",gamma=0.001)
  clf.fit(data,target)
 
  #clf_LR = LogisticRegression()
  #clf_LR.fit(x_train, y_train)
  #y_pred_LR = clf_LR.predict(x_test)
  return clf
 
def my_confusion_matrix(y_true, y_pred):
  from sklearn.metrics import confusion_matrix
  labels = list(set(y_true))
  conf_mat = confusion_matrix(y_true, y_pred, labels = labels)
  print "confusion_matrix(left labels: y_true, up labels: y_pred):"
  print "labels\t",
  for i in range(len(labels)):
    print labels[i],"\t",
  print 
  for i in range(len(conf_mat)):
    print i,"\t",
    for j in range(len(conf_mat[i])):
      print conf_mat[i][j],'\t',
    print 
  print 
 
def my_classification_report(y_true, y_pred):
  from sklearn.metrics import classification_report
  print "classification_report(left: labels):"
  print classification_report(y_true, y_pred)

my_preprocess()函数:

主要使用sklearn的preprocessing函数中的normalize()函数,默认参数为l2范式,对特征列进行正则处理。即每一个样例,处理标签,每行的平方和为1.

my_feature_selection()函数:

使用sklearn的feature_selection函数中SelectKBest()函数和chi2()函数,若是用词袋提取了很多维的稀疏特征,有必要使用卡方选取前k个有效的特征。

my_PCA()函数:

主要用来观察前多少个特征是主要特征,并且画图。看看前多少个特征占据主要部分。

clf_train()函数:

可用多种机器学习算法,如SVM, LR, RF, GBDT等等很多,其中像SVM需要调参数的,有专门调试参数的函数如StratifiedKFold()(见前几篇博客)。以达到最优。

my_confusion_matrix()函数:

主要是针对预测出来的结果,和原来的结果对比,算出混淆矩阵,不必自己计算。其对每个类别的混淆矩阵都计算出来了,并且labels参数默认是排序了的。

my_classification_report()函数:

主要通过sklearn.metrics函数中的classification_report()函数,针对每个类别给出详细的准确率、召回率和F-值这三个参数和宏平均值,用来评价算法好坏。另外ROC曲线的话,需要是对二分类才可以。多类别似乎不行。

主要参考sklearn官网

补充拓展:[sklearn] 混淆矩阵——多分类预测结果统计

 调用的函数:confusion_matrix(typeTrue, typePred)

 typeTrue:实际类别,list类型

 typePred:预测类别,list类型

结果如下面的截图:

 第i行:实际为第i类,预测到各个类的样本数

第j列:预测为第j类,实际为各个类的样本数

true↓ predict→

python sklearn包——混淆矩阵、分类报告等自动生成方式

以上这篇python sklearn包——混淆矩阵、分类报告等自动生成方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
RC4文件加密的python实现方法
Jun 30 Python
Python 搭建Web站点之Web服务器与Web框架
Nov 06 Python
Python函数式编程
Jul 20 Python
Python numpy生成矩阵、串联矩阵代码分享
Dec 04 Python
python绘制圆柱体的方法
Jul 02 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
Jul 31 Python
python3 os进行嵌套操作的实例讲解
Nov 19 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
Feb 23 Python
Python中with上下文管理协议的作用及用法
Mar 18 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
Feb 28 #Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 #Python
浅谈ROC曲线的最佳阈值如何选取
Feb 28 #Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
Feb 28 #Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 #Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
Feb 28 #Python
Python post请求实现代码实例
Feb 28 #Python
You might like
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
javascript与CSS复习(三)
2010/06/29 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
AngularJS中run方法的巧妙运用
2017/01/04 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
2020/11/16 Javascript
python实现探测socket和web服务示例
2014/03/28 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
python 实现表情识别
2020/11/21 Python
详解利用css3的var()实现运行时改变scss的变量值
2021/03/02 HTML / CSS
土木工程实习生自我鉴定
2013/09/19 职场文书
个人找工作的自我评价
2013/10/17 职场文书
应届生幼儿园求职信
2013/11/12 职场文书
手机促销活动方案
2014/02/05 职场文书
yy婚礼司仪主持词
2014/03/14 职场文书
信息管理专业自荐书
2014/06/05 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
校园音乐节目广播稿
2015/08/19 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
导游词之无锡东林书院
2019/12/11 职场文书
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android
Python作用域和名称空间的详细介绍
2022/04/13 Python