gpt4 book ai didi

python - 机器学习中删除重复特征列的哪个版本更快,为什么?

转载 作者:行者123 更新时间:2023-11-28 17:59:51 24 4
gpt4 key购买 nike

我正在 Udemy 学习机器学习类(class),目前正在阅读有关特征工程的内容。需要从数据集中删除重复的列(特征),作者建议了两个版本的代码。

数据集下载Link

版本 1:
版本 1 使用矩阵转置,然后应用 duplicated() 方法如下

data_unique = data.T.drop_duplicates(keep='first').T

这部分代码用了大约 9 秒,我的 PC 从 350 个特征中找出了 52 个重复特征。数据的形状是 (92500, 350) 并且我的 Windows PC 正在运行 双核 i5、16 GB 和 500 GB SSD
运行时间:每个循环 9.71 秒 ± 299 毫秒(7 次运行的平均值 ± 标准偏差,每次 1 个循环)

版本 2:
导师又推荐了一种方法如下

# check for duplicated features in the training set
duplicated_feat = []
for i in range(0, len(X_train.columns)):
if i % 10 == 0: # this helps me understand how the loop is going
print(i)

col_1 = X_train.columns[i]

for col_2 in X_train.columns[i + 1:]:
if X_train[col_1].equals(X_train[col_2]):
duplicated_feat.append(col_2)

运行时间:每个循环 2 分钟 16 秒 ± 4.97 秒(7 次运行的平均值 ± 标准差,每次 1 个循环)

最终,这花了超过 2 分钟 来找出重复的特征 但讲师声称如果我有大数据,这是更快的方法。虽然,根据我的发现, 我不相信他的说法。

最佳答案

执行此操作的最佳方法是使用 numpy 沿列 (axis=1) 查找唯一索引,然后将原来的。

import numpy as np
import pandas as pd
df = pd.read_csv('data.csv')

_, idx = np.unique(df.to_numpy(), axis=1, return_index=True)
df_uniq = df.iloc[:, np.sort(idx)]

我机器上的一些时间:

# First a sanity check they are equivalent (lucikly all values are non-Null)
(df_uniq == df.T.drop_duplicates(keep='first').T).all().all()
True

%%timeit
_, idx = np.unique(df.to_numpy(), axis=1, return_index=True)
df_uniq = df.iloc[:, np.sort(idx)]
#3.11 s ± 60.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit df.T.drop_duplicates(keep='first').T
#25.9 s ± 112 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

我什至不会为循环而烦恼,因为它太糟糕了。

关于python - 机器学习中删除重复特征列的哪个版本更快,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56200882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com