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的Django框架中的数据库配置指南
Jul 17 Python
Python的requests网络编程包使用教程
Jul 11 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
Python绘制频率分布直方图的示例
Jul 08 Python
使用TensorFlow实现简单线性回归模型
Jul 19 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
Aug 09 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 Python
python代码打印100-999之间的回文数示例
Nov 24 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
PyTorch 对应点相乘、矩阵相乘实例
Dec 27 Python
在keras中对单一输入图像进行预测并返回预测结果操作
Jul 09 Python
python解压zip包中文乱码解决方法
Nov 27 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
Laravel框架中集成MongoDB和使用详解
2019/10/17 PHP
javascript void(0)的妙用
2009/10/21 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
IE图片缓存document.execCommand("BackgroundImageCache",false,true)
2011/03/01 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
判断ie的两种简单方法
2013/08/12 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
2013/12/14 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
上传图片js判断图片尺寸和格式兼容IE
2014/09/01 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
Angularjs中使用轮播图指令swiper
2017/05/30 Javascript
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
让python在hadoop上跑起来
2016/01/27 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
教师学习培训邀请函
2014/02/04 职场文书
大二学生职业生涯规划书
2014/02/05 职场文书
毕业生面试求职信
2014/06/23 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
一年级小学生评语大全
2014/12/25 职场文书
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers
Java设计模式之享元模式示例详解
2022/03/03 Java/Android
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers
Nginx动静分离配置实现与说明
2022/04/07 Servers
Python中np.random.randint()参数详解及用法实例
2022/09/23 Python