Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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
Python 如何使用dask数据帧进行降维?_Python_Pandas_Dask - Fatal编程技术网

Python 如何使用dask数据帧进行降维?

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

我想对我的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个特征必须用于降维。 我想要缩小尺寸的输出,这样我就可以在顶部训练模型

编辑:


数据框为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内存。