Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scikit learn sklearn增量Pca大数据集_Scikit Learn_Pca - Fatal编程技术网

Scikit learn sklearn增量Pca大数据集

Scikit learn sklearn增量Pca大数据集,scikit-learn,pca,Scikit Learn,Pca,我有一个大小为42.9GB的大型数据集,存储为numpy的压缩npz格式。加载时的数据已被删除 n_样本,n_特征=40676226421 我需要对其进行降维,并因此使用sklearn的PCA方法。通常,我表演 from sklearn.decomposition import IncrementalPCA, PCA pca = PCA(n_components=200).fit(x) x_transformed = pca.transform(x) 由于数据无法加载到内存中,因此我使用增量

我有一个大小为42.9GB的大型数据集,存储为numpy的压缩npz格式。加载时的数据已被删除

n_样本,n_特征=40676226421

我需要对其进行降维,并因此使用sklearn的PCA方法。通常,我表演

from sklearn.decomposition import IncrementalPCA, PCA

pca = PCA(n_components=200).fit(x)
x_transformed = pca.transform(x)
由于数据无法加载到内存中,因此我使用增量PCA,因为它提供了部分拟合方法,从而具有核心外支持

from sklearn.decomposition import IncrementalPCA, PCA

ipca = IncrementalPCA(n_components=200)

for x in xrange(407):
    partial_x = load("...")
    ipca.partial_fit(partial_x)
现在,一旦模型适合完整的数据,如何执行转换?由于变换需要整个数据,因此没有给出部分_变换方法

编辑:#1

一旦计算出数据的降维表示,这就是我验证重建误差的方法

from sklearn.metrics import mean_squared_error

reconstructed_matrix = pca_model.inverse_transform(reduced_x)
error_curr = mean_square_error(reconstructed_x, x)
如何计算大型数据集的错误?
另外,是否有一种方法可以使用部分拟合作为GridSearch或RandomizedSearch的一部分来查找最佳的n_组件?

您可以使用与拟合模型相同的方法来完成此操作。转换函数不必一次应用于整个数据

x_transform = np.ndarray(shape=(0, 200))
for x in xrange(407):
    partial_x = load("...")
    partial_x_transform = ipca.transform(partial_x)
    x_transform = np.vstack((x_transform, partial_x_transform))
要计算重建的均方误差,可以使用以下代码:

from sklearn.metrics import mean_squared_error

sum = 0
for i in xrange(407):
    # with a custom get_segment function
    partial_x_reduced = get_segment(x_reduced, i)
    reconstructed_matrix = pca_model.inverse_transform(partial_reduced_x)
    residual = mean_square_error(reconstructed_x, get_segment(x, i))
    sum += residual * len(partial_x_reduced)

mse = sum / len(x_reduced)

对于参数调整,您可以将组件数量设置为所需的最大值,转换输入,然后在网格搜索中,仅使用第一列
k
,其中
k
是您的超参数。您不必每次更改
k

时重新计算整个PCA,Transform将转换传递的任何内容。您可以一次传递一个样本的数据。不需要在有效的时间显示全部数据。现在,为了计算重建误差,我需要执行逆_变换方法。逆_变换也以同样的方式工作吗?我已根据此评论对问题进行了编辑。