如何将Python中的列类型从INT更改为Sklearn的对象



我真的是Python和Scikit-learn(Sklearn)的新手,我正在尝试加载该数据集,该数据集由7列属性和1列数据分类(类/数据目标)。但是,有一个由数据[1,2,3,4,5]组成的一个属性,实际上标志着某物的阶段,因此使其成为名义而不是数字。但是,当然,Python将其视为数值数据(INT64),而实际上我希望将其视为标称数据(对象)。如何将列类型更改为名义?

我已经完成了以下操作。

print(data.dtypes)
data["col_name"]=data["col_name"].astype(numpy.object)
print(data.dtypes)

在第一个打印中,它仍然识别我的数据[" col_name"]为INT64,但是在astype行之后,它已将其更改为object。但这对数据没有任何影响,因为当我尝试使用matplotlib并创建直方图时,它仍然识别x和y是数字而不是对象。

我也在文档上阅读了有关One Hot EncodingLabel Encoding的信息,但我认为在我的情况下它们不是我所需要的。我想知道我是否误解了某些东西,或者也许还有另一个解决方案。

谢谢

通过Sklearn的文档阅读。该软件包具有详尽的文档。特别是关于编码分类特征的预处理部分:

关于在整数中表示的分类特征,即[1,2,3,4,5],我们有:

这种整数表示不能直接与Scikit-learn一起使用 估计器,正如这些期望的连续输入一样,将解释 类别是被订购的类别,通常是不需要的(即集合 任意订购浏览器的浏览器。转换的一种可能性 可以与Scikit-Learn一起使用的功能的分类功能 估计器将使用独一无二的或一hot编码 在onehotencoder中实现。此估计器会转换每个 分类功能具有M可能值为M二进制特征的特征, 只有一个活动。

因此,您可以做的是使用单速编码将数组转换为5个新列(这种情况,因为您有5个可能的值)。

这是一些工作代码。输入是分类参数[1,2,3,4,5]的一列,OUPUT是一个矩阵,5列,1个可能的选择中的每一个:

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
enc.fit([[1],[2],[3],[4],[5]])  
OneHotEncoder(categorical_features='all', dtype='numpy.float64', handle_unknown='error', n_values='auto', sparse=True)
print enc.transform([[1],[2],[3],[4],[5]]).toarray()

输出:

[[ 1.  0.  0.  0.  0.]
 [ 0.  1.  0.  0.  0.]
 [ 0.  0.  1.  0.  0.]
 [ 0.  0.  0.  1.  0.]
 [ 0.  0.  0.  0.  1.]]

说您的分类参数按以下顺序:[1,3,2,5,4,3,2,1,3,4,2]。您将获得此输出:

[[ 1.  0.  0.  0.  0.]
 [ 0.  0.  1.  0.  0.]
 [ 0.  1.  0.  0.  0.]
 [ 0.  0.  0.  0.  1.]
 [ 0.  0.  0.  1.  0.]
 [ 0.  0.  1.  0.  0.]
 [ 0.  1.  0.  0.  0.]
 [ 1.  0.  0.  0.  0.]
 [ 0.  0.  1.  0.  0.]
 [ 0.  0.  0.  1.  0.]
 [ 0.  1.  0.  0.  0.]]

因此,此1列将转换为5列。

print(data.dtypes)
data["col_name"]=data["col_name"].astype(str)
print(data.dtypes)

相关内容

  • 没有找到相关文章

最新更新