当前位置: 首页 > 面试题库 >

Python-scikit-learn中跨多列的标签编码

龚昊然
2023-03-14
问题内容

我正在尝试使用scikit-learn LabelEncoder来编码一大串DataFrame字符串标签。由于数据框有许多(50+)列,因此我想避免LabelEncoder为每一列创建一个对象。我宁愿只有一个LabelEncoder可以在我所有数据列中使用的大对象。

将整个数据DataFrame投入LabelEncoder会产生以下错误。请记住,我在这里使用伪数据。实际上,我正在处理大约50列的字符串标记数据,因此需要一种不按名称引用任何列的解决方案。

import pandas
from sklearn import preprocessing 

df = pandas.DataFrame({
    'pets': ['cat', 'dog', 'cat', 'monkey', 'dog', 'dog'], 
    'owner': ['Champ', 'Ron', 'Brick', 'Champ', 'Veronica', 'Ron'], 
    'location': ['San_Diego', 'New_York', 'New_York', 'San_Diego', 'San_Diego', 
                 'New_York']
})

le = preprocessing.LabelEncoder()

le.fit(df)

追溯(最近一次通话最近):文件“ /Users/bbalin/anaconda/lib/python2.7/site-packages/sklearn/preprocessing/label.py”中的行1,在第y行中= column_or_1d中的第306行“ column_or_1d(y,warn = True)文件“ /Users/bbalin/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.py”引发ValueError(“错误的输入形状{ 0}“。format(shape))ValueError:输入形状错误(6,3)

关于如何解决这个问题有什么想法吗?


问题答案:

你可以轻松地做到这一点,

df.apply(LabelEncoder().fit_transform)

编辑2:

在scikit-learn 0.20中,推荐的方法是

OneHotEncoder().fit_transform(df)

因为OneHotEncoder现在支持字符串输入。使用ColumnTransformer可以仅将OneHotEncoder应用于某些列。

编辑:

由于这个答案是一年多以前的,并且产生了很多赞誉(包括赏金),所以我可能应该进一步扩大。

对于inverse_transform和transform,你必须做一点改动。

from collections import defaultdict
d = defaultdict(LabelEncoder)

这样,你现在将所有列保留LabelEncoder为字典。

# Encoding the variable
fit = df.apply(lambda x: d[x.name].fit_transform(x))

# Inverse the encoded
fit.apply(lambda x: d[x.name].inverse_transform(x))

# Using the dictionary to label future data
df.apply(lambda x: d[x.name].transform(x))


 类似资料:
  • 我正在尝试使用Scikit-Learn的来编码字符串标签的pandas。由于dataframe有许多(50+)列,我希望避免为每个列创建对象;我宁愿只有一个大的对象,它可以跨我的所有数据列工作。 将整个抛入会产生以下错误。请记住,我在这里使用的是虚拟数据;实际上,我正在处理大约50列字符串标记的数据,因此需要一个不引用任何列名称的解决方案。 回溯(最近一次调用):文件“”,第1行,在文件“/use

  • 问题内容: scikit学习的快速SVM问题。训练SVM时,就像 有什么办法可以成为非数字类型的列表?例如,如果我想将向量分类为“猫”或“狗”,而不必使用某种外部查找表将“猫”和“狗”编码为1和2。当我尝试仅传递字符串列表时,我得到… 因此,看起来像只是推弦乐不起作用。有任何想法吗? 问题答案: sklearn的最新版本能够使用字符串作为标签。例如:

  • 这适用于必须使用SVM方法来提高模型精度的分配。 共有3部分,编写了下面的代码 但在此之后,问题如下 执行数字标准化。数据,并将转换后的数据存储在可变数字中。 提示:从sklearn.preprocessing.使用所需的实用程序再次,将digits_standardized分成两个集合名称X_train和X_test。此外,将digits.target分成两组Y_train和Y_test。 提示

  • scikit-learn 是一个 Python 的机器学习项目。是一个简单高效的数据挖掘和数据分析工具。基于 NumPy、SciPy 和 matplotlib 构建。 Installation 依赖 scikit-learn 要求: Python (>= 2.7 or >= 3.3) NumPy (>= 1.8.2) SciPy (>= 0.13.3) 运行示例需要 Matplotlib >= 1

  • 本文向大家介绍解释Python中scikit-learn库的基础?,包括了解释Python中scikit-learn库的基础?的使用技巧和注意事项,需要的朋友参考一下 Scikit-learn,通常称为sklearn,是Python中的一个库,用于实现机器学习算法。 这是一个开源库,因此可以免费使用。强大而强大,因为它提供了多种工具来执行统计建模。在Python强大而稳定的界面的帮助下,这包括分类

  • Introduction to Machine Learning with scikit-learn This video series will teach you how to solve Machine Learning problems using Python's popular scikit-learn library. There are 10 video tutorials tot