fit/transform/fit_tranfom

本文深入讲解了使用sklearn.preprocessing.StandardScaler进行数据标准化的过程,包括如何通过fit和transform方法计算训练数据的均值和方差,并应用这些参数对训练数据和测试数据进行标准化,确保每个特征的均值为0,方差为1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fit_transform是fit和transform的组合,
fit(x,y)传两个参数的是有监督学习的算法,算法训练的时候用,fit(x)传一个参数的是无监督学习的算法,比如降维、特征提取、标准化。这篇文章主要讲第二种(传一个参数的)。
transform(x),对数据x通过居中和缩放执行标准化使每个特征(每一列)均值为0,方差为1。

下面通过几段代码理解一下

第一段代码:

from sklearn import preprocessing

# 训练数据
X_train = np.array([[1., -1., 2.],
                    [2., 0., 0.],
                    [0., 1., -1.]])
# 测试数据
X_test = [[-1., 1., 0.]]
ss = preprocessing.StandardScaler()
scaler = ss.fit(X_train)  #通过fit,获得了训练数据的均值,方差等等参数
>>> 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)            #用训练数据的fit参数来对训练数据进行transform               
array([[ 0.  ..., -1.22...,  1.33...],
       [ 1.22...,  0.  ..., -0.26...],
       [-1.22...,  1.22..., -1.06...]])

#用训练数据的fit参数来对测试数据进行transform
>>> scaler.transform(X_test)    或     ss.fit_transform(X_test,scaler)      
array([[-2.44...,  1.22..., -0.26...]])

#同时进行fit和transform操作,这种方法是错的
>>> scaler.fit_transform(X_test)
array([[0. 0. 0.]])

第二段代码

from sklearn import preprocessing

# 训练数据
X_train = np.array([[1., -1., 2.],
                    [2., 0., 0.],
                    [0., 1., -1.]])
# 测试数据
X_test = [[-1., 1., 0.]]
ss = preprocessing.StandardScaler()
>>> ss.fit_transform(X_train)            #同时进行fit和transform操作               
array([[ 0.  ..., -1.22...,  1.33...],
       [ 1.22...,  0.  ..., -0.26...],
       [-1.22...,  1.22..., -1.06...]])

>>> ss.transform(X_test)              #用训练数据的fit参数来对测试数据进行transform
array([[-2.44...,  1.22..., -0.26...]])
>>> ss.fit_transform(X_test)              #同时进行fit和transform操作,这种方法是错的
array([[0. 0. 0.]])

注意:test数据在transform的时候必须要用fit到的train数据的均值,方差等,因为模型是在train数据上训练出来的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值