【问题标题】:How to encode bank account numbers before k-means?如何在 k-means 之前对银行帐号进行编码?
【发布时间】:2021-10-12 08:44:07
【问题描述】:

我有这个庞大的交易数据集(约 400 000 行)。每笔交易都有sourcedestination 帐号。两者中的每一个都包含大约 50 000 个唯一条目。

如何编码这些分类变量?显然,one-hot 编码不是一种选择,因为这甚至需要大约 400GB 的 RAM 才能存储编码的数据集。有没有更好的方法使用更少的 RAM?

【问题讨论】:

    标签: pandas scikit-learn cluster-analysis categorical-data one-hot-encoding


    【解决方案1】:

    您可以使用 factorizeCategorical dtype 将帐户转换为数字 id,并为跨列的每个帐户保持相同的 id:

    df = pd.DataFrame({'source': {0: 'Acc1', 1: 'Acc1', 2: 'Acc3', 3: 'Acc2'},
                       'destination': {0: 'Acc2', 1: 'Acc3', 2: 'Acc2', 3: 'Acc4'}})
    
    vals = pd.unique(df[['source', 'destination']].values.ravel('K'))
    
    df[['src_id', 'dest_id']] = df[['source', 'destination']] \
                                    .apply(lambda x: pd.Categorical(x, vals).codes)
    
    >>> df
    
      source destination  src_id  dest_id
    0   Acc1        Acc2       0        2
    1   Acc1        Acc3       0        1
    2   Acc3        Acc2       1        2
    3   Acc2        Acc4       2        3
    

    【讨论】:

    • 但是src_iddest_id 是分类的,而不是序数的!即使帐号 6 并不比帐号 5 好,k-means 算法也会假设它是。还有一个专栏salaries
    • 我同意。也许你可以阅读这篇论文来帮助你:zenodo.org/record/1130687
    • 我的意思是.. 如果与 k-means 算法一起使用,分解和分类是否有意义?如果是这样,我会接受的。
    • 不要接受我的回答,因为我无法保证结果。充其量,您可以投票,但不能再投票了。在数据科学论坛上阅读this post。祝你好运:)
    • 我发现了这个KModes 算法,也许可以。这显然是分类因素的 KMeans。 analyticsvidhya.com/blog/2021/06/…
    猜你喜欢
    • 2018-02-16
    • 2011-12-16
    • 2021-05-14
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2017-07-12
    相关资源
    最近更新 更多