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

    我们将这四种值用矩阵表示如下图:该矩阵即为混淆矩阵。

image

2.ROC曲线

     通过混淆矩阵,我们可以得到真正例率(True Positive Rate ,TPR),也被称为召回率

    clip_image002

    我们还可以得到假正例率(False Positive Rate  , FPR):

    clip_image002[5]

    那么只要给定一个决策边界阈值clip_image002[7],我们可以得到一个对应的TPR和FPR值,然而,我们不从这个思路来简单的得到TPR和FPR,而是反过来得到对应的clip_image002[9],我们检测大量的阈值clip_image002[7],从而可以得到一个TPR-FPR的相关图:

image

图中的红色曲线和蓝色曲线分别表示了两个不同的分类器的TPR-FPR曲线,曲线上的任意一点都对应了一个clip_image002[9]值。

该曲线就是ROC曲线(receiver operating characteristic curve)。该曲线具有以下特征:

  • 一定经过(0,0)点,此时clip_image002[13],没有预测为P的值,TP和FP都为0
  • 一定经过(1,1)点,此时clip_image002[15],全都预测为P
  • 最完美的分类器(完全区分正负样例):(0,1)点,即没有FP,全是TP
  • 曲线越是“凸”向左上角,说明分类器效果越好
  • 随机预测会得到(0,0)和(1,1)的直线上的一个点
  • 曲线上离(0,1)越近的点分类效果越好,对应着越合理的clip_image002[9]

    从图中可以看出,红色曲线所代表的分类器效果好于蓝色曲线所表示的分类器

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)


阅读全文
0 0