如何将文本数据编码为Python中ML算法的功能?

时间:2017-11-14 11:26:02

标签: machine-learning data-science

我有一个csv文件,其中的列填充了文本数据。如何用常量数据替换它们,以便我可以在该数据集上应用机器学习算法。 数据集示例:日期,名称,颜色名称,用户名和产品名称。

2 个答案:

答案 0 :(得分:1)

您正在尝试对数据进行分类。请尝试以下方法:

示例1:对于颜色名称和产品名称,假设只有几种类型,您可以按如下方式进行映射:

# Color_name mapping
color_mapping = {"red": 1, "yellow": 2, "blue": 3, "green": 4, "pink": 5}
dataset['color_name'] = dataset['color_name'].map(color_mapping)
# Product_name mapping
product_mapping = {"product1": 1, "product2": 2, "product3": 3, "product4": 4, "product5": 5}
dataset['product_name'] = dataset['product_name'].map(product_mapping)

示例2:对于user_name,如果无法按上述方式进行分类,则可以执行以下操作:

尝试从名称中提取标题。

Ex:以头衔开头的名字可以提取先生,女士,夫人等,并可以相应地进行分组

title_mapping = {"Mr": 1, "Miss": 2, "Mrs": 3}
dataset['user_name'] = dataset['user_name'].map(title_mapping)

示例3:对于日期,您可以将它们分组为属于不同年份或月份或某个特定时期的日期等。

答案 1 :(得分:0)

实际上,上面的答案和评论只是解释了一半的工作。 1,2,3,......意味着编码的单词内的空间依赖性,例如, "红色"更接近"黄色"而不是"蓝",因为1接近2而不是3。 将变换应用于整数值后,您应该使用类似one-hot-encoding的内容。

如果您使用pandas,请查看get_dummies

如果您使用sklearn请转到LabelBinarizer

(Here you can find a very good tutorial on how to deal with categorical data)

由于单热编码会将您输入网络的实际数据放大,您可能会考虑提前使用维度降低技术,或者最好的方法是使用所谓的word embeddings。今天,在真实文本数据中使用单词嵌入是非常明智的,因为它们是现代NLP应用程序的游戏规则改变者。如果您只处理单个单词,则无需进行单词嵌入。

干杯