Python 如何使用dask数据帧进行降维?
我想对我的dask数据帧执行降维,因为它有25088个特性。 我想从我的数据帧中提取90-95%的信息或前4000-5000个数据特征。 必须根据仅在数据框中可用的“售价”信息提取数据 数据帧的视图为:Python 如何使用dask数据帧进行降维?,python,pandas,dask,Python,Pandas,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
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个特征必须用于降维。
我想要缩小尺寸的输出,这样我就可以在顶部训练模型
编辑:
数据框为100000行和25088列,因此请给出一个不会产生内存错误的解决方案。我假设主成分分析对您来说“足够好”,因为您没有指定算法。请注意,首先需要缩放功能
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)
既然你已经找到了合适的方法,你就可以用pca来寻找90%
(或任何东西)解释的方差
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})
我在aws上有64 gb的可用内存,这个解决方案仍然给我一个内存错误。数据帧是1lakh行和25088列。难怪,您的数据占用的内存可能超过20GB
100000*25088*8字节
。Dask提供分布式处理,但不提供内存效率。例如,您应该查看增量PCA,获取数据子集或简单地使用AWS VM内存。