python3机器学习——sklearn0.19.1版本——数据处理(二)(多项式、pipeline、分类模型评价标准)
来源:互联网 发布:datediff mysql 编辑:程序博客网 时间:2024/06/09 20:37
一、数据变换——多项式
sklearn.preprocessing.PolynomialFeatures类实现多项式的数据转换。
用于产生多项式,并且多项式包含的是相互影响的特征集。比如:一个输入样本是2维的。
形式如[a,b],则二阶多项式的特征集为[1,a,b,a^2,ab,b^2]。
#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:ZhengzhengLiu#数据转换——多项式from sklearn.preprocessing import PolynomialFeaturesimport numpy as npX = np.arange(6).reshape(3,2)print("============输入数据集==========")print(X)poly = PolynomialFeatures(2) #设置多项式阶数为 2p = poly.fit_transform(X) #训练输入数据集并进行多项式转换print("============多项式转换==========")print(p)poly1 = PolynomialFeatures(degree=2,interaction_only=True) # 2阶,交互关系p1 = poly1.fit_transform(X)print("============交互关系多项式转换==========")print(p1)#运行结果:============输入数据集==========[[0 1] [2 3] [4 5]]============多项式转换==========[[ 1. 0. 1. 0. 0. 1.] [ 1. 2. 3. 4. 6. 9.] [ 1. 4. 5. 16. 20. 25.]]============交互关系多项式转换==========[[ 1. 0. 1. 0.] [ 1. 2. 3. 6.] [ 1. 4. 5. 20.]]
注:上面的数组中,每一行是一个list。比如[0,1] 类似与上面的[a,b]。它的多项式输出矩阵就是[1,a,b,a^2,ab,b^2]。
所以就是下面对应的[1,0,1,0,0,1]。现在将interaction_only=True。这时就是只找交互作用的多项式输出矩阵。
例如[a,b]的多项式交互式输出[1,a,b,ab]。不存在自己与自己交互的情况如;a^2或者b^2之类的。
二、pipeline管道——并行优化
关于pipeline管道的详细介绍,见链接:https://www.cnblogs.com/midhillzhou/p/5588958.html
简介: pipeline的概念抽象出来:将一件需要重复做的事情(这里指为客户准备一份精美的食物)切割成各个不同的阶段(这里是四个阶段:盘子,薯条,豌豆,饮料),每一个阶段由独立的单元负责(四个生产者分别负责不同的环节)。所有待执行的对象依次进入作业队列(这里是所有的客户排好队依次进入服务,除了开始和结尾的一段时间,任意时刻,四个客户被同时服务)。对应到CPU中,每一条指令的执行过程可以切割成:fetch instruction、decode it、find operand、perform action、store result 5个阶段。
sklearn提供的pipeline包的使用,详见链接:https://www.cnblogs.com/jasonfreak/p/5448462.html
sklearn提供了包pipeline来完成流水线式和并行式的工作。基于流水线组合的工作需要依次进行,前一个工作的输出是后一个工作的输入;
基于并行式的工作可以同时进行,其使用同样的输入,所有工作完成后将各自的输出合并之后输出。
并行处理和流水线处理将多个特征处理工作,甚至包括模型训练工作组合成一个工作(从代码的角度来说,即将多个对象组合成了一个对象)。
并行处理使得多个特征处理工作能够并行地进行。根据对特征矩阵的读取方式不同,可分为整体并行处理和部分并行处理。
pipeline包提供了FeatureUnion类来进行整体并行处理;使用FeatureUnionExt类进行部分并行处理;
pipeline包提供了Pipeline类来进行流水线处理。流水线上除最后一个工作以外,其他都要执行fit_transform方法,
且上一个工作输出作为下一个工作的输入。最后一个工作必须实现fit方法,输入为上一个工作的输出;
但是不限定一定有transform方法,因为流水线的最后一个工作可能是训练!
核心代码如下:
from numpy import log1pfrom sklearn.preprocessing import Imputerfrom sklearn.preprocessing import OneHotEncoderfrom sklearn.preprocessing import FunctionTransformerfrom sklearn.preprocessing import Binarizerfrom sklearn.preprocessing import MinMaxScalerfrom sklearn.feature_selection import SelectKBestfrom sklearn.feature_selection import chi2from sklearn.decomposition import PCAfrom sklearn.linear_model import LogisticRegressionfrom sklearn.pipeline import Pipeline#新建计算缺失值的对象step1 = ('Imputer', Imputer())#新建将部分特征矩阵进行定性特征编码的对象step2_1 = ('OneHotEncoder', OneHotEncoder(sparse=False))#新建将部分特征矩阵进行对数函数转换的对象step2_2 = ('ToLog', FunctionTransformer(log1p))#新建将部分特征矩阵进行二值化类的对象step2_3 = ('ToBinary', Binarizer())#新建部分并行处理对象,返回值为每个并行工作的输出的合并step2 = ('FeatureUnionExt', FeatureUnionExt(transformer_list=[step2_1, step2_2, step2_3], idx_list=[[0], [1, 2, 3], [4]]))#新建无量纲化对象step3 = ('MinMaxScaler', MinMaxScaler())#新建卡方校验选择特征的对象step4 = ('SelectKBest', SelectKBest(chi2, k=3))#新建PCA降维的对象step5 = ('PCA', PCA(n_components=2))#新建逻辑回归的对象,其为待训练的模型作为流水线的最后一步step6 = ('LogisticRegression', LogisticRegression(penalty='l2'))#新建流水线处理对象#参数steps为需要流水线处理的对象列表,该列表为二元组列表,第一元为对象的名称,第二元为对象pipeline = Pipeline(steps=[step1, step2, step3, step4, step5, step6])
三、分类模型评价标准
ROC曲线、AUC值、混淆矩阵、准确率、召回率
1.混淆矩阵(confusion matrix)
针对预测值和真实值之间的关系,我们可以将样本分为四个部分,分别是:
真正例(True Positive,TP):预测值和真实值都为1
假正例(False Positive,FP):预测值为1,真实值为0
真负例(True Negative,TN):预测值与真实值都为0
假负例(False Negative,FN):预测值为0,真实值为1
我们将这四种值用矩阵表示如下图:该矩阵即为混淆矩阵。
2.ROC曲线
通过混淆矩阵,我们可以得到真正例率(True Positive Rate ,TPR),也被称为召回率:
我们还可以得到假正例率(False Positive Rate , FPR):
那么只要给定一个决策边界阈值,我们可以得到一个对应的TPR和FPR值,然而,我们不从这个思路来简单的得到TPR和FPR,而是反过来得到对应的,我们检测大量的阈值,从而可以得到一个TPR-FPR的相关图:
图中的红色曲线和蓝色曲线分别表示了两个不同的分类器的TPR-FPR曲线,曲线上的任意一点都对应了一个值。
该曲线就是ROC曲线(receiver operating characteristic curve)。该曲线具有以下特征:
- 一定经过(0,0)点,此时,没有预测为P的值,TP和FP都为0
- 一定经过(1,1)点,此时,全都预测为P
- 最完美的分类器(完全区分正负样例):(0,1)点,即没有FP,全是TP
- 曲线越是“凸”向左上角,说明分类器效果越好
- 随机预测会得到(0,0)和(1,1)的直线上的一个点
- 曲线上离(0,1)越近的点分类效果越好,对应着越合理的
从图中可以看出,红色曲线所代表的分类器效果好于蓝色曲线所表示的分类器。
3.利用ROC的其他评估标准
AUC(area under thecurve),也就是ROC曲线的下夹面积,越大说明分类器越好,最大值是1,
图中的蓝色条纹区域面积就是蓝色曲线对应的 AUC。
Precision = TP/(TP+FP)
(精确度)Accuracy = (TP+FN)/(FP+TN)
(准确率)F-Meature = 2(Precision*Recall)/(Precision + Recall)
- python3机器学习——sklearn0.19.1版本——数据处理(二)(多项式、pipeline、分类模型评价标准)
- python3机器学习——sklearn0.19.1版本——数据处理(一)(数据标准化、tfidf、独热编码)
- 从GLM广义线性模型到线性回归、二项式及多项式分类——机器学习笔记整理(一)
- 机器学习基础(二十一)—— 分类与回归、生成模型与判别模型
- 机器学习(二十三)——Beam Search, NLP机器翻译常用评价度量, 模型驱动 vs 数据驱动
- 机器学习实战学习笔记(二)分类—ID3决策树算法(python3实现)
- (机器学习)如何评价回归模型?——Adjusted R-Square(校正决定系数)
- 机器学习——如何评价回归模型
- 机器学习分类器模型评价指标
- 机器学习笔记5——线性模型(二)
- 机器学习27—隐马尔科夫模型HMM(二)
- 机器学习(十)机器学习模型的评价
- 机器学习概念总结笔记(二)——逻辑回归、贝叶斯分类、支持向量分类SVM、分类决策树ID3、
- 【机器学习算法模型】分类决策树——ID3
- 【机器学习算法模型】分类决策树——C4.5
- 【机器学习算法模型】分类决策树——CART
- 【机器学习算法模型】分类算法——朴素贝叶斯
- 【机器学习算法模型】分类算法——贝叶斯网络
- 知识付费市场巨大,拿什么内容付费工具去实现知识变现?
- PULPino在zedboard上的下载、测试
- Ecplise安装FindBugs插件
- 代码三神器?
- echarts的x轴y轴的颜色改变
- python3机器学习——sklearn0.19.1版本——数据处理(二)(多项式、pipeline、分类模型评价标准)
- WebApi 的Action跳不进去
- 基于cyptopp库的rsa加解密详解
- 矩阵中的路径
- 10.2 数字与静态
- Java中抽象类和接口的配合使用
- angular @input @output
- 新建MAVEN项目--pom.xml报错
- SQL基础教程学习(二)开始学习SQL语句