文章乃转载

scikit-learn提供了一系列转换库,他们可以清洗,降维,提取特征等。

在数据转换中有三个很重要的方法,fit,fit_transform,transform

ss=StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)

初学时候好奇为何,训练样本用fit_transform,而测试样本用transform?

仔细阅读官方文档发现,fit方法是用于从一个训练集中学习模型参数,其中就包括了归一化时用到的均值,标准偏差。transform方法就是用于将模型用于位置数据,fit_transform就很高效的将模型训练和转化合并到一起,训练样本先做fit,得到mean,standard deviation,然后将这些参数用于transform(归一化训练数据),使得到的训练数据是归一化的,而测试数据只需要在原先得到的mean,std上来做归一化就行了,所以用transform就行了。

StandardScaler对矩阵作归一化处理,变换后的矩阵各特征均值为0,方差为1

网上抄来抄去都是一个意思,

fit_transform是fit和transform的组合。

我们知道fit(x,y)在新手入门的例子中比较多,但是这里的fit_transform(x)的括号中只有一个参数,这是为什么呢?

fit(x,y)传两个参数的是有监督学习的算法,fit(x)传一个参数的是无监督学习的算法,比如降维、特征提取、标准化

然后解释为什么出来fit_transform()这个东西,下面是重点:

fit和transform没有任何关系,之所以出来这么个函数名,仅仅是为了写代码方便,

所以会发现transform()和fit_transform()的运行结果是一样的。

注意:运行结果一模一样不代表这两个函数可以互相替换,绝对不可以!!!

transform函数是一定可以替换为fit_transform函数的

fit_transform函数不能替换为transform函数!!!理由解释如下:

sklearn里的封装好的各种算法都要fit、然后调用各种API方法,transform只是其中一个API方法,所以当你调用除transform之外的方法,必须要先fit,为了通用的写代码,还是分开写比较好

也就是说,这个fit相对于transform而言是没有任何意义的,但是相对于整个代码而言,fit是为后续的API函数服务的,所以fit_transform不能改写为transform。

下面的代码用来举例示范,数据集是代码自动从网上下载的,如果把下面的乳腺癌相关的机器学习代码中的fit_transform改为transform,编译器就会报错。(下面给出的是无错误的代码)

# coding: utf-8
# 导入pandas与numpy工具包。
import pandas as pd
import numpy as np# 创建特征列表。
column_names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape', 'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin', 'Normal Nucleoli', 'Mitoses', 'Class']
# 使用pandas.read_csv函数从互联网读取指定数据。
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data', names = column_names )# 将?替换为标准缺失值表示。
data = data.replace(to_replace='?', value=np.nan)
# 丢弃带有缺失值的数据(只要有一个维度有缺失)。
data = data.dropna(how='any')# 输出data的数据量和维度。
data.shape# In[2]:# 使用sklearn.cross_valiation里的train_test_split模块用于分割数据。
from sklearn.cross_validation import train_test_split# 随机采样25%的数据用于测试,剩下的75%用于构建训练集合。
X_train, X_test, y_train, y_test = train_test_split(data[column_names[1:10]], data[column_names[10]], test_size=0.25, random_state=33)
# print "data[column_names[10]]",data[column_names[10]]# 查验训练样本的数量和类别分布。
y_train=pd.Series(y_train)
y_train.value_counts()# 查验测试样本的数量和类别分布。
y_test=pd.Series(y_test)
y_test.value_counts()# 从sklearn.preprocessing里导入StandardScaler。
from sklearn.preprocessing import StandardScaler
# 从sklearn.linear_model里导入LogisticRegression与SGDClassifier。
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier#标准化数据,保证每个维度的特征数据方差为1,均值为0。使得预测结果不会被某些维度过大的特征值而主导。
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)## 初始化LogisticRegression与SGDClassifier。
lr = LogisticRegression()
sgdc = SGDClassifier()# 调用LogisticRegression中的fit函数/模块用来训练模型参数。
lr.fit(X_train, y_train)
# 使用训练好的模型lr对X_test进行预测,结果储存在变量lr_y_predict中。
lr_y_predict = lr.predict(X_test)# 调用SGDClassifier中的fit函数/模块用来训练模型参数。
sgdc.fit(X_train, y_train)
# 使用训练好的模型sgdc对X_test进行预测,结果储存在变量sgdc_y_predict中。
sgdc_y_predict = sgdc.predict(X_test)# 从sklearn.metrics里导入classification_report模块。
from sklearn.metrics import classification_report# 使用逻辑斯蒂回归模型自带的评分函数score获得模型在测试集上的准确性结果。
print ("Accuracy of LR Classifier:", lr.score(X_test, y_test))
# 利用classification_report模块获得LogisticRegression其他三个指标的结果。
print (classification_report(y_test, lr_y_predict, target_names=['Benign', 'Malignant']))# 使用随机梯度下降模型自带的评分函数score获得模型在测试集上的准确性结果。
print 'Accuarcy of SGD Classifier:', sgdc.score(X_test, y_test)
# 利用classification_report模块获得SGDClassifier其他三个指标的结果。
print classification_report(y_test, sgdc_y_predict, target_names=['Benign', 'Malignant'])

sklearn中, fit,fit_transform,transform的区别与联系相关推荐

  1. sklearn 中 fit fit_transform

    fit(y) Fit label encoder fit_transform(y) Fit label encoder and return encoded labels fit 返回一个实例 fit ...

  2. sklearn中的k_means和KMeans区别

    sklearn中的k_means和KMeans区别 1.KMeans的缺点 2.sklearn.KMeans参数 3.sklearn.KMeans属性 KMeans **: 1.k点中心个数的确定,很 ...

  3. sklearn中的fit_transform和transform以及什么时候使用

    在使用sklearn对数据进行预处理的时候很有可能会遇到fit_transform和transform,网上不少资料写的模棱两可,在这里我回答几个核心问题,也许看完我写的这篇文章,一些疑惑就会豁然开朗 ...

  4. sklearn中的fit_transform、获取特征、标签转换

    skearn中有数据预处理的功能,如fit(),transform()和fit_transform(). fit(): 求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性. transf ...

  5. 机器学习中的fit(),fit_transform(),transform()

    为啥一般都是这样用: from sklearn.preprocessing import StandardScaler sc = StandardScaler() sc.fit_tranform(X_ ...

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

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

  7. StandarScaler(sklearn.preprocessing)标准化中的fit、transform理解。

    如何理解StandarScaler中的fit.transform.fit_transform? fit: 用于计算训练数据的均值和方差,后面就会用均值和方差来"训练"数据. tan ...

  8. fit、transform、fit_transform的区别和联系

    fit.transform.fit_transform的区别和联系 一.fit.transform.fit_transform的区别和联系? 二.注意事项 一.fit.transform.fit_tr ...

  9. 通俗地讲清楚fit_transform()和transform()的区别

    网上抄来抄去都是一个意思, fit_transform是fit和transform的组合. 我们知道fit(x,y)在新手入门的例子中比较多,但是这里的fit_transform(x)的括号中只有一个 ...

最新文章

  1. 立体匹配十大概念综述
  2. boost::geometry::model::point用法的测试程序
  3. 嵌入式Linux操作系统学习规划 (转)
  4. 面试中对hashMap的再次理解,负载因子为什么为0.75
  5. A ndroid 获取屏幕高度、标题高度、状态栏高度详解
  6. mysql 导入oracle 11_导入oracle11g的数据库到自己本地电脑
  7. linux命令详解——sar
  8. Rust 碎碎念:【译】Arc 在 Rust 中是如何工作的
  9. Android四大组件 之一 广播接收者
  10. Cursor finalized without prior close()
  11. 为什么要使用McAfee Endpoint Security?
  12. Python代码——卫星天空图绘制
  13. 自动将视频文件生成字幕的软件autosub的替代工具字幕酱(支持英文、日语和法语、德语、韩语)
  14. B. Silly Mistake(模拟、思维)
  15. 什么是 docker?docker和虚拟机有什么差别和不同?
  16. Web前端学习笔记(四)--- CSS卡贴悬停展开效果
  17. ysdk应用宝渠道接入问题记录
  18. android 大图分块加载,超大图加载
  19. 云服务器可以虚拟内存吗,云服务器可以设置虚拟内存吗
  20. 第二章 四部和声的基本要求

热门文章

  1. php 调用父类变量,PHP-通过实例化父类访问常量
  2. php滚动图代码,JS上下、左右滚动代码(支持图片滚动)
  3. 【英语学习】【Level 08】U03 My Choice L5 The star that shines the brightest
  4. 【英语学习】【科学】【Glencoe Science】【B】From Bacteria to Plants 目录及术语表
  5. 【英语学习】【WOTD】billion 释义/词源/示例
  6. 关于oracle数据库论文,Oracle数据库研究论文 有关Oracle数据库的论文
  7. 巴塞尔问题欧拉解法逐步推导与分析
  8. git只提交一张图片_即使只使用一张静止的图片,也能制作出带有动感天空的视频...
  9. UE4 在C++ 动态生成几何、BSP体、BRUSH ---- MESH_GENERATION
  10. STL之set_union、set_intersection、set_difference、set_symmetric_difference