python3机器学习——sklearn0.19.1版本——数据处理(二)(多项式、pipeline、分类模型评价标准)

一、数据变换——多项式

 

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 PolynomialFeatures
import numpy as np

X = np.arange(6).reshape(3,2)
print("============输入数据集==========")
print(X)

poly = PolynomialFeatures(2)    #设置多项式阶数为 2
p = 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 log1p
from sklearn.preprocessing import Imputer
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import FunctionTransformer
from sklearn.preprocessing import Binarizer
from sklearn.preprocessing import MinMaxScaler
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from 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) (精确度)

  • recall=TP/(TP+FN)   (召回率)

  • Accuracy = (TP+FN)/(TP+FP+FN+TN) (准确率)

  • F-Meature = 2(Precision*Recall)/(Precision + Recall)

 

 

 

sklearn0.19中文文档 PDF格式高清。 .1. 广义线性模型 1.1.1. 普通最小乘法 1.1.1.1. 普通最小乘法复杂度 1.1.2. 岭回归 1.1.2.1. 岭回归的复杂度 1.1.2.2. 设置正则化参数:广义交叉验证 1.1.3. Lasso 1.1.3.1. 设置正则化参数 1.1.3.1.1. 使用交叉验证 1.1.3.1.2. 基于信息标准的模型选择 1.1.3.1.3. 与 SVM 的正则化参数的比较 1.1.4. 多任务 Lasso 1.1.5. 弹性网络 1.1.6. 多任务弹性网络 1.1.7. 最小角回归 1.1.8. LARS Lasso 1.1.8.1. 数学表达式 1.1.9. 正交匹配追踪法(OMP) 1.1.10. 贝叶斯回归 1.1.10.1. 贝叶斯岭回归 1.1.10.2. 主动相关决策理论 - ARD 1.1.11. logistic 回归 1.1.12. 随机梯度下降, SGD 1.1.13. Perceptron(感知器) 1.1.14. Passive Aggressive Algorithms(被动攻击算法) 1.1.15. 稳健回归(Robustness regression): 处理离群点 (outliers)和模型错误 1.1.15.1. 各种使用场景与相关概念 1.1.15.2. RANSAC: 随机抽样一致性算法(RANdom SAmple Consensus) 1.1.15.2.1. 算法细节 1.1.15.3. Theil-Sen 预估器: 广义中值估计 1.1.15.3.1. 算法理论细节 1.1.15.4. Huber 回归 1.1.15.5. 注意 1.1.16. 多项式回归:用基函数展开线性模型 1.2. 线性和次判别分析 1.2.1. 使用线性判别分析来降维 1.2.2. LDA 和 QDA 分类器的数学公式 1.2.3. LDA 的降维数学公式 1.2.4. Shrinkage(收缩) 1.2.5. 预估算法 1.3. 内核岭回归 1.4. 支持向量机 1.4.1. 分类 1.4.1.1. 多元分类 1.4.1.2. 得分和概率 1.4.1.3. 非均衡问题 1.4.2. 回归 1.4.3. 密度估计, 异常(novelty)检测 1.4.4. 复杂度 1.4.5. 使用诀窍 1.4.6. 核函数 1.4.6.1. 自定义核 1.4.6.1.1. 使用 python 函数作为内核 1.4.6.1.2. 使用 Gram 矩阵 1.4.6.1.3. RBF 内核参数 1.4.7. 数学公式 1.4.7.1. SVC 1.4.7.2. NuSVC 1.4.7.3. SVR 1.4.8. 实现细节 1.5. 随机梯度下降 1.5.1. 分类 1.5.2. 回归 1.5.3. 稀疏数据的随机梯度下降 1.5.4. 复杂度 1.5.5. 实用小贴士 1.5.6. 数学描述 1.5.6.1. SGD 1.5.7. 实现细节 1.6. 最近邻 1.6.1. 无监督最近邻 1.6.1.1. 找到最近邻 1.6.1.2. KDTree 和 BallTree 类 1.6.2. 最近邻分类 1.6.3. 最近邻回归 1.6.4. 最近邻算法 1.6.4.1. 暴力计算 1.6.4.2. K-D 树 1.6.4.3. Ball 树 1.6.4.4. 最近邻算法的选择 1.6.4.5. leaf_size 的影响 1.6.5. 最近质心分类 1.6.5.1. 最近缩小质心 1.7. 高斯过程 1.7.1. 高斯过程回归(GPR) 1.7.2. GPR 示例 1.7.2.1. 具有噪声级的 GPR 估计 1.7.2.2. GPR 和内核岭回归(Kernel Ridge Regression)的比 较 1.7.2.3. Mauna Loa CO2 数据中的 GRR 1.7.3. 高斯过程分类(GPC) 1.7.4. GPC 示例 1.7.4.1. GPC 概率预测 1.7.4.2. GPC 在 XOR 数据集上的举例说明 1.7.4.3. iris 数据集上的高斯过程分类(GPC) 1.7.5. 高斯过程内核 1.7.5.1. 高斯过程内核 API 1.7.5.2. 基础内核 1.7.5.3. 内核操作 1.7.5.4. 径向基函数内核 1.7.5.5. Matérn 内核 1.7.5.6. 有理次内核 1.7.5.7. 正弦平方内核 1.7.5.8. 点乘内核 1.7.5.9. 参考文献 1.7.6. 传统高斯过程 1.7.6.1. 回归实例介绍 1.7.6.2. 噪声数据拟合 1.7.6.3. 数学形式 1.7.6.3.1. 初始假设 1.7.6.3.2. 最佳线性无偏预测(BLUP) 1.7.6.3.3. 经验最佳线性无偏估计(EBLUP) 1.7.6.4. 关联模型 1.7.6.5. 回归模型 1.7.6.6. 实现细节 1.8. 交叉分解 1.9. 朴素贝叶斯 1.9.1. 高斯朴素贝叶斯 1.9.2. 多项分布朴素贝叶斯 1.9.3. 伯努利朴素贝叶斯 1.9.4. 堆外朴素贝叶斯模型拟合 1.10. 决策树 1.10.1. 分类 1.10.2. 回归 1.10.3. 多值输出问题 1.10.4. 复杂度分析 1.10.5. 实际使用技巧 1.10.6. 决策树算法: ID3, C4.5, C5.0 和 CART 1.10.7. 数学表达 1.10.7.1. 分类标准 1.10.7.2. 回归标准 1.11. 集成方法 1.11.1. Bagging meta-estimator(Bagging 元估计器) 1.11.2. 由随机树组成的森林 1.11.2.1. 随机森林 1.11.2.2. 极限随机树 1.11.2.3. 参数 1.11.2.4. 并行化 1.11.2.5. 特征重要性评估 1.11.2.6. 完全随机树嵌入 1.11.3. AdaBoost 1.11.3.1. 使用方法 1.11.4. Gradient Tree Boosting(梯度树提升) 1.11.4.1. 分类 1.11.4.2. 回归 1.11.4.3. 训练额外的弱学习器 1.11.4.4. 控制树的大小 1.11.4.5. Mathematical formulation(数学公式) 1.11.4.5.1. Loss Functions(损失函数) 1.11.4.6. Regularization(正则化) 1.11.4.6.1. 收缩率 (Shrinkage) 1.11.4.6.2. 子采样 (Subsampling) 1.11.4.7. Interpretation(解释性) 1.11.4.7.1. Feature importance(特征重要性) 1.11.4.7.2. Partial dependence(部分依赖) 1.11.5. Voting Classifier(投票分类器) 1.11.5.1. 多数类标签 (又称为 多数/硬投票) 1.11.5.1.1. 用法 1.11.5.2. 加权平均概率 (软投票) 1.11.5.3. 投票分类器(VotingClassifier)在网格搜索 (GridSearch)应用 1.11.5.3.1. 用法 1.12. 多类和多标签算法 1.12.1. 多标签分类格式 1.12.2. 1对其余 1.12.2.1. 多类学习 1.12.2.2. 多标签学习 1.12.3. 1对1 1.12.3.1. 多类别学习 1.12.4. 误差校正输出代码 1.12.4.1. 多类别学习 1.12.5. 多输出回归 1.12.6. 多输出分类 1.12.7. 链式分类器 1.13. 特征选择 1.13.1. 移除低方差特征 1.13.2. 单变量特征选择 1.13.3. 递归式特征消除 1.13.4. 使用 SelectFromModel 选取特征 1.13.4.1. 基于 L1 的特征选取 1.13.4.2. 基于 Tree(树)的特征选取 1.13.5. 特征选取作为 pipeline(管道)的一部分 1.14. 半监督学习 1.14.1. 标签传播 1.15. 等式回归 1.16. 概率校准 1.17. 神经网络模型(有监督) 1.17.1. 多层感知器 1.17.2. 分类 1.17.3. 回归 1.17.4. 正则化 1.17.5. 算法 1.17.6. 复杂性 1.17.7. 数学公式 1.17.8. 实用技巧 1.17.9. 使用 warm_start 的更多控制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值