我有一个由 85 个特征列和 13195 行组成的数据集。其中大约 50 个特征是我使用 OneHotEncoder 编码的分类特征。我正在阅读有关稀疏数据集的这篇文章,并且很想知道在定义 OneHotEncoder 对象时更改稀疏参数的值如何减少我的数据集的内存使用量。
在将 OneHotEncoding 应用于我的数据集中的分类特征之前,我的内存使用量为 9.394 MB。我通过运行以下代码发现了这一点:
BYTES_TO_MB_DIV = 0.000001
def print_memory_usage_of_data_frame(df):
mem = round(df.memory_usage().sum() * BYTES_TO_MB_DIV, 3)
print("Memory usage is " + str(mem) + " MB")
print_memory_usage_of_data_frame(dataset)
设置 OneHotEncoder 备用 = True:
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn.pipeline import Pipeline
numeric_transformer = Pipeline(steps=[
('knnImputer', KNNImputer(n_neighbors=2, weights="uniform")),
('scaler', StandardScaler())])
categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
('onehot', OneHotEncoder(handle_unknown='ignore', sparse=True))])
preprocessor = ColumnTransformer(transformers=[
('num', numeric_transformer, selector(dtype_exclude="object")),
('cat', categorical_transformer, selector(dtype_include="object"))
])
Z = pd.DataFrame(preprocessor.fit_transform(X))
print_memory_usage_of_data_frame(Z)
内存使用量为 25.755 MB
然后运行上面相同的代码,但像这样设置备用=假:
OneHotEncoder(handle_unknown='ignore', sparse=False)
内存使用量为 25.755 MB
根据链接文章,它在 pandas get_dummies 中使用了 sparse 选项,这应该会导致内存存储减少,这对于 Scikit Learn 的 OneHotEncoder 不一样吗?