【问题标题】:How to manage a huge number of values for a categorical feature in linear regression如何管理线性回归中分类特征的大量值
【发布时间】:2015-04-27 17:27:51
【问题描述】:

我是机器学习的新手,我正在尝试编写一个线性回归算法,其中我有一个分类特征 - 关键字。我的模型中可以有大约 1000 万个关键字。

按照此处给出的说明 - http://www.psychstat.missouristate.edu/multibook/mlt08m.html

看来我应该对分类特征进行二分法。这是否意味着我将有 23 个特征变量(10M 级别的虚拟编码)?

这是处理这种情况的最佳方法吗?

【问题讨论】:

    标签: machine-learning linear-regression


    【解决方案1】:

    是的。您基本上将拥有 1000 万个预测变量。如果您正在进行回归/分类,这是不可避免的,除非您想将“相似”关键字组合在一起以减少预测变量的数量。例如。如果它们之间有特定的关系,你可以将keyword_1、keyword_2、keyword_3组合成一个关键字,等等。

    要减少大量关键字(10 M),您可以使用 LASSO (http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html) 和 RIDGE (http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html) 惩罚等技术。这个想法是,这 10 M 预测变量中的大多数在预测结果时并不重要,因此您希望在学习阶段的早期将它们删除,以提高可解释性并避免结果过度拟合。

    严格来说RIDGE是为了避免过拟合,LASSO是为了减少预测变量的数量。

    【讨论】:

    • 特征哈希作为一种技术怎么样?
    • '除非您想将“相似”关键字组合在一起以减少预测变量的数量'。这种相似性可以是一种散列技术。
    【解决方案2】:

    如果您将数据转换为稀疏矩阵、One Hot Encoding 等技术,然后使用任何特征选择技术(前向/后向选择、套索),您将获得更好的结果。希望这会有所帮助!

    【讨论】:

    • 如何处理userId等特征?
    • 你的响应变量是什么?你认为 userId 会是一个很好的预测器吗?如果是,那么您需要将 DataFrame 从长帧转换为宽帧,例如响应变量 UserId29(0 或 1)UserId30(0 或 1)UserId31,即转换为稀疏矩阵。
    • 特征散列会比稀疏矩阵快吗?
    • 是的,那是另一种方式.. 更少的内存并且需要很少的预处理。我从未使用过它,但模型性能通常在这两种方法之间有所不同。如果您使用它,请告诉我哪种方法效果更好。
    猜你喜欢
    • 2020-05-27
    • 2016-03-04
    • 2020-08-08
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多