Fit是对于数据进行拟合,所谓拟合,就是根据数据,计算获得数据里面的一些指标,比如均值,方差;下一步很多API都是需要这些参数来进行后续对数据的操作,比如下面要讲到的transform。

Transform,对于数据进行变形;常见的变形是标准化和归一化。标准化是需要均值和方差的,标准化本质上将数据进行正态分布化;

很多时候,当需要依次对训练数据和测试数据进行变形处理的时候,首先处理训练数据,这个时候需要调用fit,再调用tranform,或者直接使用fit_transform;然后再处理测试数据,这个时候,直接transform就可以了,因为处理训练数据的时候,其实已经通过fit获取了均值方差等指标;

 rnd.seed(42)

 m = 100

 X = 6 * rnd.rand(m, 1) - 3

 y = 2 + X + 0.5 * X**2 + rnd.randn(m, 1)

 X_train, X_val, y_train, y_val = train_test_split(X[:50], y[:50].ravel(), test_size=0.5, random_state=10)

 poly_scaler = Pipeline((

 ("poly_features", PolynomialFeatures(degree=90, include_bias=False)),

 ("std_scaler", StandardScaler()),

 ))

 X_train_poly_scaled = poly_scaler.fit_transform(X_train)

 X_val_poly_scaled = poly_scaler.transform(X_val)

这里牵涉一个对象就是标准化的伸缩,这个处理是为了避免单个数据过大,进而导致了数据处理异常;于是为了降低单个特征对于整体的影响,对于数据集合进行求导,然后对于所有的数据除以导数;将数据缩小到一定程度,降低了个别数值的影响。Numpy里面是有原始实现的:

 >>> from sklearn import preprocessing

 >>> import numpy as np

 >>> X_train = np.array([[ 1., -1., 2.],

 ... [ 2., 0., 0.],

 ... [ 0., 1., -1.]])

 >>> X_scaled = preprocessing.scale(X_train)

 >>> X_scaled

 array([[ 0. ..., -1.22..., 1.33...],

 [ 1.22..., 0. ..., -0.26...],

 [-1.22..., 1.22..., -1.06...]])

 >>> X_scaled.mean(axis=0)

 array([0., 0., 0.])

 >>> X_scaled.std(axis=0)

 array([1., 1., 1.])

最后看到经过伸缩数据满足了,均值为0,标准差为1(注意这里指定了参数为0,代表是对列求标准差,最后返回的一行数据;如果是1,则代表对行求标准差,最后返回的一列),后面还会以后给予axis的处理。

这个是sklearn中原始的处理;还有一个封装的类专门用于这个处理:StandardScale。

 >>> scaler = preprocessing.StandardScaler().fit(X_train)

 >>> scaler

 StandardScaler(copy=True, with_mean=True, with_std=True)

 >>> scaler.mean_

 array([1. ..., 0. ..., 0.33...])

 >>> scaler.scale_

 array([0.81..., 0.81..., 1.24...])

 >>> scaler.transform(X_train)

 array([[ 0. ..., -1.22..., 1.33...],

 [ 1.22..., 0. ..., -0.26...],

 [-1.22..., 1.22..., -1.06...]])

这个形式变成了我们上面描述的fit-transform,在fit之后,将可以获取到mean以及std;然后将会进行一下数据变形;获取到了最后的矩阵,下面我们要查看一下这个矩阵到底是不是满足均值为0,标准差为1的正态分布呢?

 import numpy as np
formated_data =scaler.transform(X_train)
print(np.mean(formated_data, 0))
print(np.std(formated_data))

返回信息:

[0. 0. 0.]

1.0

注意,在np.mean的时候,传递了第二个参数,且值为0(对列进行均值,返回一行);注意这个有值和没有值结果是完全不一样,没有传递参数只是返回一个值,应该是对于行列统一做了一下均值;

上面的描述中提到了transform的时候,内部执行的是标准化,到底对数据做了什么,到底为什么要做标准化呢?

首先将归一化/ 标准化,就是将数据缩放(映射)到一个范围内,比如[0,1],[-1,1],还有在图形处理中将颜色处理为[0,255];归一化的好处就是不同纬度的数据在相近的取值范围内,这样在进行梯度下降这样的算法的时候,曲线将会更加简单(由原始的椭圆变成了圆形),如下图所示:

至于缩放的原理就是量纲代表,比如身高和指甲宽度,如果统一都是厘米那么两者不是一个数量级,如果把身高的量纲改为米,那么你会发现身高取值范围和指甲宽度其实是相近的取值范围,这样避免了某个维度成为了影响学习结果的主导。

常见的归一化/ 标准化

1. Standard Scala(z-score standardization):是标准化处理;将元素通过下面的公式进行处理:

x =(x -

关于fit和transform的更多相关文章

  1. SimpleImputer 中fit和transform方法的简介

    sklearn.impute.SimpleImputer 中fit和transform方法的简介 SimpleImputer 简介 通过SimpleImputer ,可以将现实数据中缺失的值通过同一列 ...

  2. sklearn中各算法类的fit,fit_transform和transform函数

    在使用PCA和NFC中有三个函数fit,fit_transform,transform区分不清各自的功能.通过测试,勉强了解各自的不同,在这里做一些笔记. 1.fit_transform是fit和tr ...

  3. sklearn fit transform fit_transform

    scikit-learn提供了一系列转换库,他们可以清洗,降维,提取特征等. 在数据转换中有三个很重要的方法,fit,fit_transform,transform ss=StandardScaler ...

  4. fit_transform和transform的区别

    来自:泡泡糖nana 来自:俞驰 1. fit_transform是fit和transform的组合. 2. fit(x,y)传两个参数的是有监督学习的算法,fit(x)传一个参数的是无监督学习的算法 ...

  5. 【原】Spark之机器学习(Python版)(二)——分类

    写这个系列是因为最近公司在搞技术分享,学习Spark,我的任务是讲PySpark的应用,因为我主要用Python,结合Spark,就讲PySpark了.然而我在学习的过程中发现,PySpark很鸡肋( ...

  6. 【原】Spark之机器学习(Python版)(一)——聚类

      kmeans聚类相信大家都已经很熟悉了.在Python里我们用kmeans通常调用Sklearn包(当然自己写也很简单).那么在Spark里能不能也直接使用sklean包呢?目前来说直接使用有点困 ...

  7. KNN算法

    1.算法讲解 KNN算法是一个最基本.最简单的有监督算法,基本思路就是给定一个样本,先通过距离计算,得到这个样本最近的topK个样本,然后根据这topK个样本的标签,投票决定给定样本的标签: 训练过程 ...

  8. spark 基本操作

    读取文件的数据 使用的数据:https://codeload.github.com/xsankar/fdps-v3/zip/master 读取单个文件的数据 case class Employee(E ...

  9. 使用sklearn优雅地进行数据挖掘【转】

    目录 1 使用sklearn进行数据挖掘 1.1 数据挖掘的步骤 1.2 数据初貌 1.3 关键技术2 并行处理 2.1 整体并行处理 2.2 部分并行处理3 流水线处理4 自动化调参5 持久化6 回 ...

随机推荐

  1. java基础学习之final关键字

    final可以修饰类.方法.变量,一旦使用了final则将不能改变被修饰的对象的引用; 被final修饰的类不可以被继承 被final修饰的方法不可以被覆盖 被final修饰的变量一般为常量,只允许对 ...

  2. L255 Learning to say no brings a thrill of freedom

    I am not sure who came up with that thing about never saying yes to something in the distant future ...

  3. 四、使用汇编编写LED裸机驱动

    1. 确定硬件连接 打开OK6410底板电路图,找到LED,可以发现NLEDx为0时LED点亮. 找到LED的控制引脚,发现LED控制引脚通过连接器连到了核心板: 打开核心板电路图,找到对应的连接器中 ...

  4. C++连接mysql数据库的两种方法

    本文主要介绍了C++连接mysql数据库的两种方法,希望通过本文,能对你有所帮助,一起来看. 现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用a ...

  5. logging日志模块,hashlib hash算法相关的库,

    logging: 功能完善的日志模块 import logging #日志的级别 logging.debug("这是个调试信息")#级别10 #常规信息 logging.info( ...

  6. Strut2在Action-Result的配置文件内转到jsp页面时用URL传递参数

    Struts.2.5.5版本在Action配置文件中内有如下result,其中role是Action类中的属性,在配置文件中用到OGNL表达式 <result name="input& ...

  7. BZOJ 1083 [SCOI2005]繁忙的都市 (最小生成树裸题无重边) 超简单写法!!

    Description 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口 ...

  8. 倍增求lca

    /* 节点维护的信息多样 如果用树状数组维护到根节点的边权或者点权, 可以直接插入点权和边权值,不需要预处理, 但是记得一定要使用ot[]消除影响.即差分. Housewife Wind 这个坑踩得死 ...

  9. C#线程、前后台线程

    C#线程.前后台线程 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新 ...

  10. 限定某个目录禁止解析php 、限制user_agent 、php的配制文件、PHP的动态扩展模块

    1. 限定某个目录禁止解析php(有些目录用户可以上传文件或图片,可能会被恶意者上传其它文件):编辑:/usr/local/apache2.4/conf/extra/httpd-vhosts.conf ...