如何在H2O上使用适合和转换PCA

时间:2018-01-17 16:45:26

标签: python-3.x pca h2o

我想在H2O上使用PCA。在sklearn中,我们可以在火车集上应用fit,然后transform可以应用于测试集。在这里,我试图在H2O中遵循相同的逻辑。在FAQ中,它说:

  

使用h2o.prcomp构建PCA模型后,请使用h2o.predict   在原始数据框架和PCA模型上产生   维数减少的表示。使用cbind添加预测变量   列从原始数据框到由...生成的数据框   输出h2o.predict。此时,您可以建立监督   在新数据框架上学习模型。

基于此,我尝试了以下内容:

from h2o.transforms.decomposition import H2OPCA

trbb_pca = H2OPCA(k = 5, transform = "NORMALIZE", pca_method="GramSVD",
                   use_all_factor_levels=True, impute_missing=True,seed=24)

trbb_pca.train(x=trbb_cols, training_frame=train_h2o)

train_h2o_pca = train_h2o.cbind(trbb_pca.predict(train_h2o))
test_h2o_pca = test_h2o.cbind(trbb_pca.predict(test_h2o))

这是在H2O上实施PCA和测试集的方法吗?

1 个答案:

答案 0 :(得分:1)

简短回答:是的。 H2O Python booklet中有一个示例,为清楚起见,在此复制:

In [25]: from h2o.transforms.decomposition import H2OPCA

In [26]: pca_decomp = H2OPCA(k=2, transform="NONE", pca_method="Power")

In [27]: pca_decomp.train(x=range(0,4), training_frame=iris_df)

pca Model Build Progress: [#######################################] 100%

In [28]: pca_decomp
Out[28]: Model Details
=============
H2OPCA :  Principal Component Analysis
Model Key:  PCA_model_python_1446220160417_10

Importance of components:
                        pc1      pc2
----------------------  -------  --------
Standard deviation      7.86058  1.45192
Proportion of Variance  0.96543  0.032938
Cumulative Proportion   0.96543  0.998368

ModelMetricsPCA: pca

**
Reported on train data.
**
MSE: NaN
RMSE: NaN

In [29]: pred = pca_decomp.predict(iris_df)

pca prediction progress: [#######################################] 100%

In [30]: pred.head() # Projection results
Out[30]:
    PC1      PC2
-------  -------
5.9122   2.30344
5.57208  1.97383
5.44648  2.09653
5.43602  1.87168
5.87507  2.32935
6.47699  2.32553
5.51543  2.07156
5.85042  2.14948
5.15851  1.77643
5.64458  1.99191

技术上有两种方法可以在Python中使用PCA估算器。旧方法位于h2o.transforms.decomposition.H2OPCA。几年前,我们重写了Python API并移动了一些东西,包括将PCA变成一个合适的" H2OEstimator",所以它现在也位于这里:h2o.estimators.pca.H2OPrincipalComponentAnalysisEstimator。这两种方法都有效,但对于新代码,我们推荐新代码,因为它与其他H2O估算器一致。

API是相同的,因此,如果您不想要,可以通过更改import语句切换到新的:

from h2o.transforms.decomposition import H2OPCA

为:

from h2o.estimators.pca import H2OPrincipalComponentAnalysisEstimator as H2OPCA