繁体   English   中英

不同的 output 同时使用 fit_transform vs fit and transform from sklearn

[英]Different output while using fit_transform vs fit and transform from sklearn

下面的代码片段说明了这个问题:

from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import numpy as np

(nrows, ncolumns) = (1912392, 131)

X = np.random.random((nrows, ncolumns))

pca = PCA(n_components=28, random_state=0)
transformed_X1 = pca.fit_transform(X)
pca1 = pca.fit(X)
transformed_X2 = pca1.transform(X)

print((transformed_X1 != transformed_X2).sum()) # Gives output as 53546976


scalar = StandardScaler()
scaled_X1 = scalar.fit_transform(X)
scalar2 = scalar.fit(X)
scaled_X2 = scalar2.transform(X)

(scaled_X1 != scaled_X2).sum() # Gives output as 0

有人可以解释为什么第一个 output 不为零而第二个 output 是?

使用这个作品:

pca = PCA(n_components=28, svd_solver = 'full')
transformed_X1 = pca.fit_transform(X)
pca1 = pca.fit(X)
transformed_X2 = pca1.transform(X)

print(np.allclose(transformed_X1, transformed_X2))
True

显然svd_solver = 'random' (这是'auto'默认值)在.fit(X).transform(X)fit_transform(X)之间有足够的过程差异,即使使用相同的种子也会给出不同的结果。 还要记住浮点错误使==/=不可靠地判断不同进程的相等性,因此请使用np.allclose()

似乎StandardScaler.fit_transform()只是直接使用.fit(X).transform(X)在引擎盖下,所以那里没有浮点错误让你绊倒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM