In [12]: pc2 = RandomizedPCA(n_components=3)
In [13]: pc2.transform(X) # can't transform because it does not know how to do it.
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-13-e3b6b8ea2aff> in <module>()
----> 1 pc2.transform(X)
/usr/local/lib/python3.4/dist-packages/sklearn/decomposition/pca.py in transform(self, X, y)
714 # XXX remove scipy.sparse support here in 0.16
715 X = atleast2d_or_csr(X)
--> 716 if self.mean_ is not None:
717 X = X - self.mean_
718
AttributeError: 'RandomizedPCA' object has no attribute 'mean_'
In [14]: pc2.ftransform(X)
pc2.fit pc2.fit_transform
In [14]: pc2.fit_transform(X)
Out[14]:
array([[-1.38340578, -0.2935787 ],
[-2.22189802, 0.25133484],
[-3.6053038 , -0.04224385],
[ 1.38340578, 0.2935787 ],
[ 2.22189802, -0.25133484],
[ 3.6053038 , 0.04224385]])
所以你想fitRandomizedPCA然后transform为:
In [20]: pca = RandomizedPCA(n_components=3)
In [21]: pca.fit(X)
Out[21]:
RandomizedPCA(copy=True, iterated_power=3, n_components=3, random_state=None,
whiten=False)
In [22]: pca.transform(z)
Out[22]:
array([[ 2.76681156, 0.58715739],
[ 1.92831932, 1.13207093],
[ 0.54491354, 0.83849224],
[ 5.53362311, 1.17431479],
[ 6.37211535, 0.62940125],
[ 7.75552113, 0.92297994]])
In [23]:
9条答案
按热度按时间0s0u357o1#
在**scikit-learn estimator api**中,
fit()
:用于从训练数据生成学习模型参数transform()
:由fit()
方法生成的参数,应用于模型以生成转换数据集。fit_transform()
:同一数据集上的fit()
和transform()
api的组合请参阅本book中的第4章和stackexchange中的答案,以了解更多信息
gt0wga4j2#
这些方法用于给定数据的中心/特征尺度。它基本上有助于在特定范围内对数据进行规范化
为此,我们使用Z分数方法。
我们在训练数据集上这样做。
1.**Fit():**方法计算参数μ和σ,并将其保存为内部对象。
2.**Transform():**使用这些计算参数的方法将变换应用到特定的数据集。
3.**Fit_transform():**连接fit()和transform()方法对数据集进行转换。
功能缩放/标准化的代码片段(train_test_split之后)。
我们在我们的测试集上应用相同的(训练集相同的两个参数μ和σ(值))参数变换。
pieyvz9o3#
.transform
方法适用于已经计算了PCA
的情况,即如果你已经调用了.fit
方法。所以你想
fit
RandomizedPCA
然后transform
为:具体地,PCA
.transform
将通过矩阵X
的PCA分解获得的基的变化应用于矩阵Z
。uinbv5nw4#
为什么和何时使用
fit()
,transform()
,fit_transform()
通常我们有一个监督学习问题,以(X,y)作为我们的数据集,我们将其分为训练数据和测试数据:
想象一下,我们正在拟合一个tokenizer,如果我们拟合X,我们将测试数据包含到tokenizer中,但我已经多次看到这个错误!
正确的方法是只拟合X_train,因为你不知道“你的未来数据”,所以你不能使用X_test数据来拟合任何东西!
然后你可以转换你的测试数据,但是分开,这就是为什么有不同的方法。
最终提示:
X_train_transformed = model.fit_transform(X_train)
相当于:X_train_transformed = model.fit(X_train).transform(X_train)
,但第一个更快。请注意,我所说的“模型”通常是一个缩放器,一个TFIDF转换器,其他类型的矢量化器,一个令牌化器......
请记住:X表示特征,y表示每个样本的标签。X是一个dataframe,y是一个pandas Series对象(通常)
ut6juiuv5#
通俗地说,fit_transform意味着先进行一些计算,然后进行转换(比如从一些数据中计算列的均值,然后替换缺失的值)。所以对于训练集,你需要计算和转换。
但是对于测试集,机器学习基于在训练集期间学习到的内容应用预测,因此它不需要计算,它只需执行转换。
pvcm50d16#
方法之间的一般差异:
*fit(raw_documents[,y]):学习原始文档中所有标记的词汇字典。
*fit_transform(raw_documents[,y]):学习词汇字典并返回术语-文档矩阵。这相当于先拟合后变换,但实现起来更有效。
*transform(raw_documents):将文档转换为文档-术语矩阵。使用适合fit的词汇表或提供给构造函数的词汇表从原始文本文档中提取标记计数。
fit_transform和transform返回相同的Document-term矩阵。
Source
sqxo8psd7#
以下是
.fit()
和.fit_transform()
的基本区别:.fit()
用于监督学习,有两个对象/参数(x,y)来拟合模型并使模型运行,其中我们知道我们要预测什么.fit_transform()
用于无监督学习,有一个对象/参数(x),我们不知道我们要预测什么。p1iqtdky8#
当我们有两个不同元素的数组时,我们分别使用'fit'和transform,我们根据其内部函数拟合'array 1',例如在***MinMaxScaler***中(内部函数是找到均值和标准差)。例如,如果我们根据数组1的平均值拟合数组1并变换数组2,那么数组1的平均值将应用于我们变换的数组2。简单地说,我们将一个数组转换为另一个数组的基本内部函数。
代码演示:
输出:
fit
和transform
,将阵列2变换为拟合(基于平均值)阵列1:输出
检查下面的输出,观察输出的基础上previos两个输出,你会看到差异。基本上,在数组1上,它取每列的平均值,并根据其列在数组2中丢失任何丢失的值。
这是我们要在一个数组的基础上转换另一个数组时所做的。但是当我们有一个单一的数组,我们想根据它自己的均值来变换它。在这种情况下,我们一起使用fit_transform。
见下文;
输出
(上图)另外,我们做:
输出
为什么我们分别拟合和转换同一个数组,它需要两行代码,为什么我们不使用简单的fit_transform,它可以在一行代码中拟合和转换同一个数组。这就是fit和transform以及fit_transform之间的区别。
ep6jt1vc9#
下面的答案适用于任何类型的sklearn相关库。在了解
fit_transform
之前,让我们看看fit方法是什么:fit(X)
-通过提取第一个主成分来用X拟合模型。fit_transform(X)
-用X拟合模型并对X应用降维。fit_transform
--->fit(x).transform(x)
transform(x)
-对X应用降维。你可以查看sklearn随机PCA文档here了解更多细节。