Pandas是如何获得虚拟值的

2024-05-17 19:43:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个柱子

df["Pclass"].tail()

Pclass

2
1
3
1
3

我创造了柱子的假人

dummies = pd.get_dummies(df["Pclass"],prefix="Pclass")
df = pd.concat([df,dummies],axis=1)

结果

df["Pclass_1"].tail()


    Pclass_1    Pclass_2    Pclass_3
886   0             1         0
887   1             0         0
888   0             0         1
889   1             0         0
890   0             0         1



我不放弃它,因为它规定列中的数字被转换成1和0


Tags: dfgetprefix数字tailpdaxisconcat
3条回答

^{}

它基本上是将类别的每个唯一值旋转到它自己的列,并有一个布尔标志(10)来标记该行上存在哪个类别值。你知道吗

让我们看一个不那么抽象的例子:

df = pd.DataFrame({'sex':['male', 'female', 'unknown', 'female']})

       sex
0     male
1   female
2  unknown
3   female

df.join(pd.get_dummies(df['sex'], prefix='sex'))

       sex  sex_female  sex_male  sex_unknown
0     male           0         1            0
1   female           1         0            0
2  unknown           0         0            1
3   female           1         0            0

如您所见,我们原始列的第一行是male,在我们的dummies列sex_male,我们看到有一个标志1。你知道吗

       sex  sex_female  sex_male  sex_unknown
0     male           0         1            0

然后在第二行,原始列中的值是female,我们在dummies列中看到sex_female有标志1

       sex  sex_female  sex_male  sex_unknown
1   female           1         0            0

等等。你知道吗

同样需要记住的是,当您应用pd.get_dummies时:

amount of new dummie columns = amount of unique values in original caterogical column


用机器学习的术语来说,我们称之为热编码

对于^{},它将如下所示:

from sklearn.preprocessing import OneHotEncoder

encoder = OneHotEncoder()
encoder.fit_transform(df['sex'].to_numpy().reshape(-1,1)).toarray()

array([[0., 1., 0.],
       [1., 0., 0.],
       [0., 0., 1.],
       [1., 0., 0.]])

它为原始列中出现的每个值创建一个伪列,然后为每一行输入1(如果该行的值与伪列对应),否则输入0。你知道吗

行886的Pclass列中有一个2,因此它被转换为Pclass 2列中的1和所有其他伪列中的0。你知道吗

第887行的Pclass列中有一个1,因此该列被转换为Pclass 1列中的1和所有其他伪列中的0。你知道吗

依赖于数值输入的预测模型不能直接 处理打开的文本字段或分类属性。 相反,这些信息丰富的数据需要在 将信息呈现给模型。 基于树和朴素贝叶斯模型是例外;大多数模型 要求预测值采用数字形式。你知道吗

为无序类别创建虚拟变量是一种将分类属性转换为数值属性的方法。@Erfan回答了虚拟变量的作用。但以编码有序属性为例:具有C类别的无序预测器可以用C−1表示 二进制伪变量或二进制伪变量的散列版本。 这些方法有效地将分类信息呈现给用户 模型。你知道吗

但是现在假设C范畴有一个相对顺序。为了 例如,考虑一个类别为“低”、“中”的预测器, 和“高” 为无序数据创建虚拟属性将丢失 相对顺序中包含的信息。

对于有序数据编码:

  • 多项式对比度:对比度是变量的线性组合 (参数或统计)其系数加起来等于零,允许 不同处理的比较。你知道吗
  • 将预测因素视为无序因素。如果真正的潜在模式 是线性的还是二次的,无序的虚拟变量可能无法有效的控制 揭示这一趋势。你知道吗
  • 将有序类别转换为一组数字分数 基于特定上下文的信息。你知道吗

相关问题 更多 >