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的几条建议分享
Feb 10 Python
Python解决鸡兔同笼问题的方法
Dec 20 Python
使用Pyrex来扩展和加速Python程序的教程
Apr 13 Python
Python中的模块导入和读取键盘输入的方法
Oct 16 Python
浅谈python脚本设置运行参数的方法
Dec 03 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
python实现单链表的方法示例
Sep 03 Python
关于Python解包知识点总结
May 05 Python
python爬虫scrapy框架的梨视频案例解析
Feb 20 Python
Keras多线程机制与flask多线程冲突的解决方案
May 28 Python
基于PyTorch实现一个简单的CNN图像分类器
May 29 Python
进行数据处理的6个 Python 代码块分享
Apr 06 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求两个文件的相对路径
2013/06/20 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
2016/07/25 PHP
Javascript操纵Cookie实现购物车程序
2006/11/23 Javascript
摘自百度的图片轮换效果代码
2007/11/19 Javascript
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
python求列表交集的方法汇总
2014/11/10 Python
利用Psyco提升Python运行速度
2014/12/24 Python
如何在python中使用selenium的示例
2017/12/26 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
解决Python一行输出不显示的问题
2018/12/03 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
俄罗斯小米家用电器、电子产品和智能家居商店:Poood.ru
2020/04/03 全球购物
致接力运动员广播稿
2014/02/17 职场文书
合作协议书范本
2014/04/17 职场文书
商场消防安全责任书
2014/07/29 职场文书
2014年银行工作总结范文
2014/11/12 职场文书
大学生英文求职信范文
2015/03/19 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书
2016教师节问候语
2015/11/10 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android