gpt4 book ai didi

python - patsy 中的单热编码

转载 作者:太空宇宙 更新时间:2023-11-04 09:53:36 28 4
gpt4 key购买 nike

对于回归,我通常使用 sklearn 的 OneHotEncoder 对分类变量进行编码.

我现在正在探索使用 patsy,但它似乎不提供 One-hot 编码:http://patsy.readthedocs.io/en/latest/categorical-coding.html

是否可以使用 patsy 指定 One-hot 编码?

最佳答案

这里有两件事可能会有所帮助:(1) patsy 默认包含一个截距(每个公式的开头都有一个不可见的 1 +),以及 (2) 在编码时一个分类值,patsy 会自动选择一种编码策略,以避免创建过度参数化的模型。

如果将拦截 + 全秩 one-hot 编码结合起来,就会得到一个过度参数化的模型。因此 patsy 切换到处理编码(= 基本上从您正在考虑的单热编码中删除一列)。这避免了在编码列和截距列之间产生线性相关性。

避免这种情况的一种简单方法是删除截距——这样 patsy 就不会担心线性相关性,并且会使用您期望的那种单热编码:y ~ -1 + a(-1 抵消了不可见的 1 以移除拦截)。<​​/p>

或者,如果您真的想要一个过度参数化的模型,那么如果您在链接到的文档页面上进一步向下滚动,它会告诉您如何定义任意自定义编码方案。

import numpy as np
from patsy import ContrastMatrix

class FullRankOneHot(object):
def __init__(self, reference=0):
self.reference = reference

# Called to generate a full-rank encoding
def code_with_intercept(self, levels):
return ContrastMatrix(np.eye(len(levels)),
["[My.%s]" % (level,) for level in levels])

# Called to generate a non-full-rank encoding. But we don't care,
# we do what we want, and return a full-rank encoding anyway.
# Take that, patsy.
def code_without_intercept(self, levels):
return self.code_with_intercept(levels)

然后你可以像这样使用它:y ~ 1 + C(a, FullRankOneHot)

关于python - patsy 中的单热编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46832637/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com