如何在使用 sklearns 的 LabelEncoder() 时检查分配给哪个标签的值?
Posted
技术标签:
【中文标题】如何在使用 sklearns 的 LabelEncoder() 时检查分配给哪个标签的值?【英文标题】:How can I check what value is assigned to what label while using sklearns' LabelEncoder()? 【发布时间】:2020-06-02 11:52:53 【问题描述】:我正在将分类数据转换为用于机器学习目的的数值。
举个例子,汽车的购买价格(=“购买”变量)分为:“vhigh、high、med、low”。 要将其转换为数值,我使用了:
le = preprocessing.LabelEncoder()
buying = le.fit_transform(list(data["buying"]))
有没有办法检查 Python 如何准确地将每个标签转换为数值,因为这是随机完成的(例如 vhigh = 0,high = 2)?
【问题讨论】:
【参考方案1】:您还可以获取映射到类别的字典,如下所示 从@celius-stingher 停止的地方开始,
d1 = data.drop_duplicates('buying').drop('index', axis=1).set_index('buying')
print(d1)
输出:
buying_encoded
buying
Luffy 1
Nami 2
Franky 0
Sanji 3
Zoro 4
要将此输出转换为字典,
dict_map = d1.to_dict()
print(dict_map)
输出:
'buying_encoded': 'Luffy': 1, 'Nami': 2, 'Franky': 0, 'Sanji': 3, 'Zoro': 4
所以我们可以通过从返回的Dict
中获取buying_encoded
属性来获取字典
print(dict_map['buying_encoded'])
输出:
'Luffy': 1, 'Nami': 2, 'Franky': 0, 'Sanji': 3, 'Zoro': 4
【讨论】:
【参考方案2】:您可以在数据框中创建一个额外的列来映射值:
mapping_df = data[['buying']].copy() #Create an extra dataframe which will be used to address only the encoded values
mapping_df['buying_encoded'] = le.fit_transform(data['buying'].values) #Using values is faster than using list
这是一个完整的工作示例:
import pandas as pd
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
data = pd.DataFrame('index':[0,1,2,3,4,5,6],
'buying':['Luffy','Nami','Luffy','Franky','Sanji','Zoro','Luffy'])
data['buying_encoded'] = le.fit_transform(data['buying'].values)
data = data.drop_duplicates('buying').set_index('index')
print(data)
输出:
buying buying_encoded
index
0 Luffy 1
1 Nami 2
3 Franky 0
4 Sanji 3
5 Zoro 4
【讨论】:
以上是关于如何在使用 sklearns 的 LabelEncoder() 时检查分配给哪个标签的值?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 sklearn 中使用 OneHotEncoder 的输出?
python:如何在sklearn中使用逻辑回归系数构建决策边界
如何在 sklearn 中编写自定义估算器并对其使用交叉验证?