gpt4 book ai didi

python - 如何将 Pandas 中的变量指定为序数/分类?

转载 作者:太空狗 更新时间:2023-10-29 18:16:03 25 4
gpt4 key购买 nike

我正在尝试使用 scikit-learn 在数据集上运行一些机器学习算法。我的数据集有一些类似于类别的特征。就像一个特征是 A,它的值 1,2,3 指定某物的质量。 1:上等,2:二等,3:三等。所以它是一个有序变量。

类似地,我重新编码了一个变量 City,具有三个值 ('London', Zurich', 'New York'1,2,3 但对值没有特定偏好。所以现在这是一个名义分类变量。

如何指定算法以将它们视为 pandas 中的分类和顺序等?。与在 R 中一样,分类变量由 factor(a) 指定,因此不被视为连续值。 pandas/python 中有类似的东西吗?

最佳答案

...多年后(因为我认为对这些问题的一个很好的解释不仅是为了这个问题,而且是为了在未来提醒自己)

序数与标称

一般来说,人们会将分类变量转换为虚拟变量(或 host of other methodologies ),因为它们是名义上的,例如他们对 a > b > c 没有没有的感觉。在 OP 的原始问题中,这将在伦敦、苏黎世、纽约等城市执行。

名义虚拟变量

对于此类问题,pandas 使用 pandas.get_dummies 提供了迄今为止最简单的转换.所以:

# create a sample of OPs unique values
series = pandas.Series(
numpy.random.randint(low=0, high=3, size=100))
mapper = {0: 'New York', 1: 'London', 2: 'Zurich'}
nomvar = series.replace(mapper)

# now let's use pandas.get_dummies
print(
pandas.get_dummies(series.replace(mpr))

Out[57]:
London New York Zurich
0 0 0 1
1 0 1 0
2 0 1 0
3 1 0 0

分类变量的顺序编码

但是在序数变量的情况下,用户必须谨慎使用pandas.factorize .原因是工程师希望在映射中保留这样的关系 a > b > c

因此,如果我想获取一组分类变量,其中 large > medium > small 并保留它,我需要确保 pandas.factorize 保留它关系。

# leveraging the variables already created above
mapper = {0: 'small', 1: 'medium', 2: 'large'}
ordvar = series.replace(mapper)

print(pandas.factorize(ordvar))

Out[58]:
(array([0, 1, 1, 2, 1,... 0, 0]),
Index(['large', 'small', 'medium'], dtype='object'))

事实上,使用 pandas.factorize 时,需要保留以保持序数概念 的关系已经丢失。在这种情况下,我使用自己的映射来确保序数属性得以保留。

preserved_mapper = {'large':2 , 'medium': 1, 'small': 0}
ordvar.replace(preserved_mapper)
print(ordvar.replace(preserved_mapper))

Out[78]:
0 2
1 0
...
99 2
dtype: int64

事实上,通过创建您自己的 dict 来映射值不仅是一种保留所需序数关系的方法,而且还可以用作“保持预测算法的内容和映射有条理"确保您不仅不会在此过程中丢失任何序数信息,而且还存储了每个变量的每个映射是什么的记录。

intsklearn

最后,OP 谈到将信息传递到 scikit-lean 分类器中,这意味着 int 是必需的。对于这种情况,请确保您知道 astype(int) gotcha说的很详细here如果您的数据中有任何 NaN

关于python - 如何将 Pandas 中的变量指定为序数/分类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29528628/

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