首页 > 解决方案 > 如何使用 dask 数据框进行降维?

问题描述

我想对我的 dask 数据帧执行降维,因为它有 25088 个特征。我想从我的数据框中提取 90-95% 的信息或前 4000-5000 个数据特征。必须根据仅在数据框中可用的“销售价格”信息来提取数据。

数据框的视图是:

image_features_df.head(3)
   feat1   feat2   feat3  ...  feat25087    feat25088   fid   selling_price
0   0.0    0.0     0.0    ...   0.0          0.0         2       269.00
4   0.3    0.1     0.0    ...   0.0          0.8         26      1720.00    
6   0.8    0.0     0.0    ...   0.0          0.1         50      18145.25

这里只有前 25088 个特征必须用于降维。我想要缩小尺寸的输出,以便我可以在上面训练模型。

编辑:

数据框是 100 000 行和 25 088 列,所以请告诉一个不会出现内存错误的解决方案。

标签: pythonpandasdask

解决方案


我将假设主成分分析对您来说“足够好”,因为您没有指定算法。请注意,首先需要缩放功能。

from dask_ml.decomposition import PCA
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
image_features_df = scaler.fit_transform(image_features_df)

pca = PCA(n_components=5000)
pca.fit(image_features_df)

现在你已经适合了,你可以寻找90%(或其他)解释的方差pca.explained_variance_ratio_,即

explained_variance = 0.9
cumsum_var = pca.explained_variance_ratio_.cumsum() > explained_variance
idx = cumsum_var.argmax()
print(f'Number of components needed for having at least {explained_variance} is equal to {idx})

推荐阅读