我从机器学习开始,已经在做一些任务了。
我想设置(预处理)表列,因为列中的数据是分类的。我已成功处理(更改值)除最后一列以外的所有列。我从中加载(dataset = pd.read_csv("car.data")
)我的值的数据文件是car.data(我从internet下载的)。我正在使用pandas和所有重要的ML库(tensorflow、sklearn、numpy…)
当我运行代码时,所有列都用数字填充,只有最后一列用“无”填充。我注意到,当我运行:dataset.unacc.unique()
时,我得到以下输出:
array([None], dtype=object)
并且它不应该是object类型。在正确的代码中是不同的:array([0, 1, 3, 2], dtype=int64)
有人能帮我解决这个问题吗?我在网上找不到它。先谢谢你
这是我的密码:
dataset.unacc.unique()
此函数用于更改列中的值:
def label_fixTarget(something):
if something=='unacc':
return 0
elif something=='acc':
return 1
elif something=='vgood':
return 3
elif something=="good":
return 2
dataset['unacc'] = dataset['unacc'].apply(label_fixTarget)
dataset.unacc.unique()
dataset.head()
这是我的新桌子:
这不是编码分类数据的正确方法
要实现您想要的,您需要使用
sklearn.preprocessing.LabelEncoder
。调用
fit
后的label_encoder
包含有关将类别转换为整数的所有信息。请注意,它不会转换未看到的内容,例如,如果我执行:如果在调用
fit
期间既没有遇到“a”也没有遇到“b”,则将导致异常。如何将整数解码回标签:
所以首先我对列“a”进行编码,并将编码值放入“encoded”列。然后为了测试
inverse_transform
,我对编码的值(在“encoded”列下的值)调用了逆变换,然后将结果放在“decoded”列中列“a”和“decoded”应该相同,并且它们是相同的
您还可以打印调用
fit
后label_encoder
识别的类注意:我将来自
transform()
(返回一个numpy.array
)的结果放在同一df中的“encoded”列中,inverse_transform()
的结果放在“decoded”列中,只是为了证明解码值必须与初始值相同LabelEncoder scikit-learn documentation
如果知道要更改的值,可以创建字典并将其映射到列上,例如:
相关问题 更多 >
编程相关推荐