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 相关文章推荐
Python with用法实例
Apr 14 Python
python协程之动态添加任务的方法
Feb 19 Python
python re库的正则表达式入门学习教程
Mar 08 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
Jun 12 Python
python 含子图的gif生成时内存溢出的方法
Jul 07 Python
python代码编写计算器小程序
Mar 30 Python
简单了解Django应用app及分布式路由
Jul 24 Python
Python实现密码薄文件读写操作
Dec 16 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
在keras里面实现计算f1-score的代码
Jun 15 Python
python支持多继承吗
Jun 19 Python
Python爬虫之Selenium设置元素等待的方法
Dec 04 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
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
解决laravel session失效的问题
2019/10/14 PHP
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2010/02/04 Javascript
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
React Navigation 使用中遇到的问题小结
2018/05/08 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
详解Vue的mixin策略
2020/11/19 Vue.js
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
python读取与处理netcdf数据方式
2020/02/14 Python
python如何更新包
2020/06/11 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
如何编写python的daemon程序
2021/01/07 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
无工作经验者个人求职信范文
2013/12/22 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
法定代表人免职证明
2015/06/24 职场文书
2016寒假假期总结
2015/10/10 职场文书
javascript函数式编程基础
2021/09/15 Javascript
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL