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实现linux下使用xcopy的方法
Jun 28 Python
Python编写电话薄实现增删改查功能
May 07 Python
python实现简易版计算器
Jun 22 Python
python3实现磁盘空间监控
Jun 21 Python
Python 找到列表中满足某些条件的元素方法
Jun 26 Python
python+splinter自动刷新抢票功能
Sep 25 Python
Django模型序列化返回自然主键值示例代码
Jun 12 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
Aug 24 Python
python datetime中strptime用法详解
Aug 29 Python
python函数enumerate,operator和Counter使用技巧实例小结
Feb 22 Python
Python pandas如何向excel添加数据
May 22 Python
Python使用protobuf序列化和反序列化的实现
May 19 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操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
php中strtotime函数用法详解
2014/11/15 PHP
php中实现进程锁与多进程的方法
2016/09/18 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
js setTimeout 常见问题小结
2013/08/13 Javascript
理运用命名空间让js不产生冲突避免全局变量的泛滥
2014/06/15 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
用p5.js制作烟花特效的示例代码
2018/03/21 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
2018/08/06 Javascript
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
Python将string转换到float的实例方法
2019/07/29 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
Python调用JavaScript代码的方法
2020/10/27 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
应届毕业生求职信范文
2013/12/18 职场文书
元旦获奖感言
2014/03/08 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
交通事故和解协议书
2014/09/25 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书