【发布时间】:2019-01-21 07:32:38
【问题描述】:
我正在清理 jupyter 上的 csv 文件以进行机器学习。 但是,有几列具有字符串值,例如“描述”列:
我知道我需要使用 NLP 进行清理,但在 jupyter 上找不到如何执行此操作。 您能建议我如何将这些值转换为数值吗?
谢谢
【问题讨论】:
标签: python machine-learning deep-learning nlp
我正在清理 jupyter 上的 csv 文件以进行机器学习。 但是,有几列具有字符串值,例如“描述”列:
我知道我需要使用 NLP 进行清理,但在 jupyter 上找不到如何执行此操作。 您能建议我如何将这些值转换为数值吗?
谢谢
【问题讨论】:
标签: python machine-learning deep-learning nlp
数值比文字或图像更适合创建学习模型。(为什么?降维)
常见的机器学习算法需要数字输入。
用于将单词转换为相应数值的技术称为词嵌入。
在word embedding 中,字符串转换为feature vectors(数字)。
通常建议忽略那些对模型不重要的字段。因此,仅在绝对必要时才包含描述。
【讨论】:
您描述的问题是将分类数据(通常以字符串或数字 ID 的形式)转换为纯数字数据。我相信您知道使用数字 ID 有一个问题:它会导致错误地解释为数据具有某种顺序。就像apple < orange < lime,当不是这种情况时。
通常使用one-hot encoding 来生成数字指标变量。编码一列后,您有 N 列,其中 N 是唯一标签的数量。当相应的分类变量具有该值时,列的值为 1,否则为 0。如果一列中的唯一标签很少,这将特别方便。 Pandas 和 sklearn 都有这些可用的功能,尽管它们的功能并不像人们希望的那样完整。
您的“描述”列似乎有点棘手,因为它实际上包括语言,而不仅仅是分类数据。因此,需要以其他方式解析或处理该列。虽然,one-hot 编码方案可以很好地用于描述中的所有单词,从而产生一个包含更多 1 的向量。
例如:
>>> import pandas as pd
>>> df = pd.DataFrame(['a', 'b', 'c', 'a', 'a', pd.np.nan])
>>> pd.get_dummies(df)
0_a 0_b 0_c
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0
4 1 0 0
5 0 0 0
需要额外的处理才能逐字获取编码。此方法仅将完整值视为变量。
【讨论】: