sklearn 增量 Pca 大数据集
sklearn Incremental Pca large dataset
我有一个大小为 42.9 GB 的大型数据集,它以 numpy 的压缩 npz 格式存储。加载时的数据有
n_samples, n_features = 406762, 26421
我需要对此进行降维,因此需要使用 sklearn 的 PCA 方法。通常,我执行
from sklearn.decomposition import IncrementalPCA, PCA
pca = PCA(n_components=200).fit(x)
x_transformed = pca.transform(x)
由于无法将数据加载到内存中,我正在使用增量 PCA,因为它通过提供 partial_fit 方法提供核外支持。
from sklearn.decomposition import IncrementalPCA, PCA
ipca = IncrementalPCA(n_components=200)
for x in xrange(407):
partial_x = load("...")
ipca.partial_fit(partial_x)
现在,模型与完整数据拟合后,我该如何进行转换?由于 transform 需要整个数据并且没有给出 partial_transform 方法。
编辑:#1
一旦计算出数据的降维表示,这就是我验证重建错误的方式。
from sklearn.metrics import mean_squared_error
reconstructed_matrix = pca_model.inverse_transform(reduced_x)
error_curr = mean_square_error(reconstructed_x, x)
如何计算大型数据集的误差?
另外,有没有一种方法可以使用 partial_fit 作为 GridSearch 或 RandomizedSearch 的一部分来找到最好的 n_components?
您可以按照拟合模型的方式进行操作。转换函数不必一次应用于整个数据。
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
成为你的 hyper-parameter。每次更改 k
.
时,您不必重新计算整个 PCA
我有一个大小为 42.9 GB 的大型数据集,它以 numpy 的压缩 npz 格式存储。加载时的数据有
n_samples, n_features = 406762, 26421
我需要对此进行降维,因此需要使用 sklearn 的 PCA 方法。通常,我执行
from sklearn.decomposition import IncrementalPCA, PCA
pca = PCA(n_components=200).fit(x)
x_transformed = pca.transform(x)
由于无法将数据加载到内存中,我正在使用增量 PCA,因为它通过提供 partial_fit 方法提供核外支持。
from sklearn.decomposition import IncrementalPCA, PCA
ipca = IncrementalPCA(n_components=200)
for x in xrange(407):
partial_x = load("...")
ipca.partial_fit(partial_x)
现在,模型与完整数据拟合后,我该如何进行转换?由于 transform 需要整个数据并且没有给出 partial_transform 方法。
编辑:#1
一旦计算出数据的降维表示,这就是我验证重建错误的方式。
from sklearn.metrics import mean_squared_error
reconstructed_matrix = pca_model.inverse_transform(reduced_x)
error_curr = mean_square_error(reconstructed_x, x)
如何计算大型数据集的误差? 另外,有没有一种方法可以使用 partial_fit 作为 GridSearch 或 RandomizedSearch 的一部分来找到最好的 n_components?
您可以按照拟合模型的方式进行操作。转换函数不必一次应用于整个数据。
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
成为你的 hyper-parameter。每次更改 k
.