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里对list中的整数求平均并排序
Sep 12 Python
python通过imaplib模块读取gmail里邮件的方法
May 08 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
Python中defaultdict与lambda表达式用法实例小结
Apr 09 Python
python代码 输入数字使其反向输出的方法
Dec 22 Python
python实现连连看辅助(图像识别)
Mar 25 Python
python实现socket+threading处理多连接的方法
Jul 23 Python
PyTorch 对应点相乘、矩阵相乘实例
Dec 27 Python
基于keras输出中间层结果的2种实现方式
Jan 24 Python
python高阶函数map()和reduce()实例解析
Mar 16 Python
正确的理解和使用Django信号(Signals)
Apr 14 Python
Pandas自定义选项option设置
Jul 25 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 CURL 多线程操作代码实例
2015/05/13 PHP
php实现粘贴截图并完成上传功能
2015/05/17 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
基于datagrid框架的查询
2013/04/08 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
详解React项目中碰到的IE问题
2019/03/14 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
Element Breadcrumb 面包屑的使用方法
2020/07/26 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
Python与Redis的连接教程
2015/04/22 Python
python网络编程之数据传输UDP实例分析
2015/05/20 Python
总结Python编程中函数的使用要点
2016/03/20 Python
pyttsx3实现中文文字转语音的方法
2018/12/24 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
基于Django统计博客文章阅读量
2019/10/29 Python
pygame实现烟雨蒙蒙下彩虹雨
2019/11/11 Python
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
Shell编程面试题
2012/05/30 面试题
PyQt 如何创建自定义QWidget
2021/03/24 Python
在校生钳工实习自我鉴定
2013/09/19 职场文书
Nginx 根据URL带的参数转发的实现
2021/04/01 Servers
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫
Java数组详细介绍及相关工具类
2022/04/14 Java/Android
vue实现登陆页面开发实践
2022/05/30 Vue.js