scikit-learn 中的逻辑回归特征值归一化
Posted
技术标签:
【中文标题】scikit-learn 中的逻辑回归特征值归一化【英文标题】:logistic regression feature value normalization in scikit-learn 【发布时间】:2016-12-27 22:01:04 【问题描述】:使用 Python 2.7。问题是关于拟合方法。问题是针对特征(由参数X
提供),如果有非数字特征(例如字符串类型特征,如Male
、Female
),是否需要,或者建议转换成数字特征(出于性能和其他原因)?如果我有多值字符串类型的特征(例如,特征地理可以是San Francisco
、San Jose
、Mountain View
等的任何值)
http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression.fit
问候, 林
【问题讨论】:
【参考方案1】:如果您想使用sklearn
,您必须对分类特征进行编码并将它们转换为数值。这适用于所有sklearn
估计器(包括LogisticRegression
),您使用的python 版本无关紧要。
看看4.3.4。编码http://scikit-learn.org/stable/modules/preprocessing.html#encoding-categorical-features 的分类特征 以获取更多信息。
【讨论】:
0/1 for male/female 是一个合理的选择。但是 1/1 会给你错误的结果,因为它表明男性和女性之间没有区别。如果您将特征传递给sklearn.preprocessing.LabelEncoder
,它将自动对您的分类特征进行编码。
您提到的链接适用于OneHotEncoding
,这与仅将分类变量编码为数值变量不同。几天前,我写了一个很长的答案,其中包含几个关于 ro 如何同时使用LabelEncoder
和OneHotEncoder
的示例。我认为这将帮助您了解它们的工作原理。你可以在这里找到它***.com/questions/38978853/onehotencoding-mapping/…
这取决于您使用的估算器。例如,DecisionTree 很可能会给您类似的结果。 -1/1 仍然是一个不错的选择。例如,您不应该将它们编码为 100/1。
我在聊天中回复了你。希望对你有帮助。
首先,您需要使用 LabelEncoder 将分类特征编码为数值。黑色为 0,绿色为 1,红色为 2(按字母顺序)。您将使用此编码数值作为 OneHotEncoder 输入。由于黑色被编码为 0,因此它是您的一个热编码矩阵中的第一列。【参考方案2】:
只是为 MhFarahani 的回答添加一点内容: 是的,您需要将这些标签转换为数值(通常为 0 或 1)。对于诸如性别之类的事情,您可能希望有一行,其中男性为 0,女性为 1,反之亦然。对于像地理位置这样的东西,它会有点复杂。如果有合理数量的可能答案,您可以使用 pandas 中的 get_dummies 函数(查看文档here)自动用行填充您的数据框以表示每个可能的位置;然后,您可以删除其中一行以将该位置设置为“默认”。
【讨论】:
谢谢 Barak,不确定如果我将男性/女性编码为 0/1 或 -1/1,预测结果是否会改变? 我假设您的意思是 0/1 或 1/0? (也就是说,您将有一个名为“性别”的列,其值为 1 或 0,其中 1 为女性,0 为男性,或者 0 为女性,1 为男性)。选择是任意的,但是当您看到回归结果时,您应该牢记这一点。例如,如果性别系数为正,1 表示男性,则表示男性对因变量有正影响;如果 1 表示女性,那么成为女性就有积极的影响! 嗨 Barak,我的意思是如果我将男性编码为 1,女性编码为 0,或者我可以将男性编码为 -1,女性编码为 1,这两种机制是否对预测结果有影响? 另外,我读了一些关于编码的例子,但仍然感到困惑,例如,从这个链接 (scikit-learn.org/stable/modules/generated/…),这些值是 -[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]
代表 4 个样本,每个样本都有3个特点?如果是这样,为什么文件说three features and two samples
?以上是关于scikit-learn 中的逻辑回归特征值归一化的主要内容,如果未能解决你的问题,请参考以下文章