首页 > 解决方案 > df 删除高度相关列的更快方法,用于 ML 中的预处理,具有多处理池

问题描述

其目的是从 df 中删除高度相关的列(预处理 ML)

我一直在努力加快这部分机器学习代码的速度,有人可以提出建议吗?我正在考虑在我的部分代码中使用它import multiprocessing as mp,并且pool = mp.Pool(processes=int(mp.cpu_count()))它已经准备好使用。

下面的代码示例按预期完美运行,它真的很慢,这个示例不需要带有#的代码,它只是我原始代码的一部分,

感谢您提前提供任何帮助,(请在答案中发布代码示例)

'''Imports'''
import time
import numpy as np
import pandas as pd
from numpy.random import RandomState

'''example df shape of 9999 * 999'''
prng = RandomState(42)
data = prng.randint(-10,30,size=(10000,1000))
df = pd.DataFrame(data=data[1:,1:], index=data[1:,0], columns=data[0,1:])columns=data[0,1:]+data[0,1:])

tic = time.perf_counter()
'''Main Code'''

def save_corrilation(df):
    corr_matrix = df.corr().abs()
    corr_matrix = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(bool))
    to_drop = [cut_column for cut_column in corr_matrix.columns if any(corr_matrix[cut_column] > 0.95)]
    #while '01' in to_drop:
    #    to_drop.remove('01')
    df = df.drop(df[to_drop], axis=1)
    df = df.dropna(axis=1)
    del corr_matrix, to_drop
    #data_columns = list(df.columns)
    #data_columns.remove('01')

    '''Output'''
    #df.to_csv(data_set_path + file[:-4] + ' Correlated.csv')
    return df #, data_columns

df = save_corrilation(df)
'''Result'''
toc = time.perf_counter()
print(f'Main Code Completed... in {toc - tic:0.4f}')

输出应始终返回形状为 9999 * 24 的 df,对于粗略的基线,我在此示例中的最佳时间是 182

标签: pythonpandasdataframenumpymultiprocessing

解决方案


推荐阅读