【问题标题】:Scikit Learn: Predicting Categorical FeaturesScikit Learn:预测分类特征
【发布时间】:2015-01-12 09:02:39
【问题描述】:

我正在尝试找出在 scikit-learn 中预测分类特征的最佳通用方法,并希望得到一些建议。特别是,我可以只做一个决策树,它可以很好地处理分类数据,但我想尝试一些其他的多分类模型。我可以使用 one-hot 方法将分类特征转化为大量的二元特征。

训练集示例:

Age| Color  | City     | Freq
35 |'Orange'|'Seattle' | '<30'
55 |'Black' |'Portland'| '>30'
75 |'Red'   |'Seattle' | 'Never'

可以很容易地改成:

Age| Color |City | Freq
35 | 1 0 0 | 1 0 | 1 0 0
55 | 0 1 0 | 0 1 | 0 1 0
75 | 0 0 1 | 1 0 | 0 0 1

我可以将其拆分为数据目标对:

X= Age| Color |City
   35 | 1 0 0 | 1 0
   55 | 0 1 0 | 0 1
   75 | 0 0 1 | 1 0

y= Freq
   1 0 0
   0 1 0
   0 0 1

然后我可以使用各种 SK-Learn 分类模型来处理这个问题,但我不清楚这三个“频率”特征是否被理解为相互排斥。因此我的问题是:

除了决策树之外,是否可以使用广义分类例程来预测分类特征?

如何确保一组二元特征保持互斥?

此外,是否有可能以智能连接三个二元特征的度量来呈现结果?

感谢您的帮助!

【问题讨论】:

  • 分类输出变量等价于分类问题。你可以只是一个普通的分类器。这是你的情况吗?或者我理解错了
  • 所以你是说虽然训练数据不需要是分类数据,但训练目标不需要?文档提到 - 4.2.4。对分类特征进行编码:“将分类特征转换为可与 scikit-learn 估计器一起使用的特征的一种可能性是使用 OneHotEncoder 中实现的 one-of-K 或 one-hot 编码。该估计器将每个分类特征转换为m 个可能的值转换为 m 个二进制特征,只有一个处于活动状态。”,所以我认为目标也必须转换。
  • 只要你明确地使用分类算法比输出变量不是问题。可能你必须用数字替换字符串y=(a,a,b,c,a,c) -&gt; y=(1,1,2,3,1,3)

标签: machine-learning scikit-learn classification categorical-data


【解决方案1】:

是的,这是可能的。只是不要“一热”你的输出向量。将其转换为数字。

如频率:

'<30' = 0
'>30' = 1
'Never' = 2

如果您这样做,任何回归算法都应该可以工作。然后,您可以为每个输出类设置阈值。

另一种选择是拥有 3 个二元分类模型,每个模型都针对每个类别进行训练。

另外看看 Softmax 回归。

【讨论】:

    猜你喜欢
    • 2018-09-07
    • 2014-02-17
    • 2015-03-19
    • 2021-03-26
    • 1970-01-01
    • 2013-04-30
    • 2016-02-25
    • 2018-02-24
    • 2021-08-24
    相关资源
    最近更新 更多