相关疑难解决方法(0)

sklearn.LabelEncoder以前从未见过的值

如果a sklearn.LabelEncoder已安装在训练集上,如果在测试集上使用时遇到新值,则可能会中断.

我能想到的唯一解决方案是将测试集中的所有新内容(即不属于任何现有类)映射到"<unknown>",然后在后面显式添加相应的类LabelEncoder:

# train and test are pandas.DataFrame's and c is whatever column
le = LabelEncoder()
le.fit(train[c])
test[c] = test[c].map(lambda s: '<unknown>' if s not in le.classes_ else s)
le.classes_ = np.append(le.classes_, '<unknown>')
train[c] = le.transform(train[c])
test[c] = le.transform(test[c])
Run Code Online (Sandbox Code Playgroud)

这有效,但有更好的解决方案吗?

更新

正如@sapo_cosmico在评论中指出的那样,似乎上面的内容不再适用,因为我认为是实现更改LabelEncoder.transform,现在似乎正在使用np.searchsorted(我不知道以前是否是这种情况).因此,不需要将<unknown>类附加到LabelEncoder已经提取的类的列表中,而是需要按排序顺序插入:

import bisect
le_classes = le.classes_.tolist()
bisect.insort_left(le_classes, '<unknown>')
le.classes_ = le_classes
Run Code Online (Sandbox Code Playgroud)

然而,总而言之,这感觉非常笨重,我确信有更好的方法.

python scikit-learn

57
推荐指数
7
解决办法
3万
查看次数

label-encoder编码缺失值

我使用标签编码器将分类数据转换为数值.

LabelEncoder如何处理缺失值?

from sklearn.preprocessing import LabelEncoder
import pandas as pd
import numpy as np
a = pd.DataFrame(['A','B','C',np.nan,'D','A'])
le = LabelEncoder()
le.fit_transform(a)
Run Code Online (Sandbox Code Playgroud)

输出:

array([1, 2, 3, 0, 4, 1])
Run Code Online (Sandbox Code Playgroud)

对于上面的示例,标签编码器将NaN值更改为类别.我怎么知道哪个类别代表缺失值?

python pandas scikit-learn

26
推荐指数
4
解决办法
2万
查看次数

在多个程序中正确使用Scikit的LabelEncoder

我手头的基本任务是

a)读取一些制表符分隔的数据.

b)做一些基本的预处理

c)对于每个分类列,用于LabelEncoder创建映射.这有点像这样

mapper={}
#Converting Categorical Data
for x in categorical_list:
     mapper[x]=preprocessing.LabelEncoder()

for x in categorical_list:
     df[x]=mapper[x].fit_transform(df.__getattr__(x))
Run Code Online (Sandbox Code Playgroud)

其中df是pandas数据帧,categorical_list是需要转换的列标题列表.

d)训练分类器并使用将其保存到磁盘 pickle

e)现在在另一个程序中,加载了保存的模型.

f)加载测试数据并执行相同的预处理.

g)LabelEncoder's用于转换分类数据.

h)该模型用于预测.

现在我的问题是,步骤g)是否正常工作?

正如文档LabelEncoder所说

It can also be used to transform non-numerical labels (as long as 
they are hashable and comparable) to numerical labels.
Run Code Online (Sandbox Code Playgroud)

那么每个条目每次都会哈希到完全相同的值吗?

如果不是,有什么好办法可以解决这个问题.有没有办法重新编码编码器的映射?或者与LabelEncoder完全不同的方式?

python pandas scikit-learn

21
推荐指数
2
解决办法
1万
查看次数

标签 统计

python ×3

scikit-learn ×3

pandas ×2