python - 如何使用 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 列,所以请告诉一个不会出现内存错误的解决方案。
解决方案
我将假设主成分分析对您来说“足够好”,因为您没有指定算法。请注意,首先需要缩放功能。
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})
推荐阅读
- html - 角crud向数据库添加功能
- spring - 尽管 application.properties 说 postgress,但 Spring 想要连接到 Mysql
- javascript - 我在 javascript 过滤中遇到问题,我没有在浏览器中获得过滤的项目,但是当我控制台过滤的产品时它工作得很好?
- python - 在此示例中,如何用字典中的相应值替换列表项?使用蟒蛇
- windows - 有没有办法转换 LocalProfileLoadTimeHigh 和 LocalProfileLoadTimeLow 注册表值?
- javascript - 将 Javascript 对象转换为 Date 对象
- angular - 调整 Nz-Table 动态列中某些列的宽度
- python - 相互引用的两个模型字段 - django rest
- ruby-on-rails - Rails 6 - 将 URL 中 root_path 的参数更改为 SEO 友好的 URL
- go - 我运行我的代码,文件被标记为脏。我该如何解决?