将文本条目转换为机器学习的值 - KNN

数据挖掘 机器学习 k-nn javascript
2022-02-23 16:28:57

考虑以下数据集。

| Area | Job Type | Complete |
-------------------------------
| AAA  | Install  |     N    |
| AAB  | Repair A |     Y    |
| OOC  | Repair C |     Y    |
| LCX  | Cease    |     N    |
-------------------------------

我正在使用 JavaScript(开始进入 Tensorflow.js 以及其他 ML 算法和理论。)并且我正在努力寻找合适的 ML 方法来处理它。可能有超过 100 个区域和超过 15 种 Job Type,但 Complete 只能是 Y/N。

我正在考虑为每个案例分配一个数字,如下所示

AAA -> 1    |   Install  -> 1   |    Y -> 1
AAB -> 2    |   Repair A -> 2   |    N -> 0
OOC -> 3    |   Repair C -> 3   |
LCX -> 4    |   Cease    -> 4   |
... -> x    |

这可行吗?它会工作吗?

我想给它另一个案例并返回该案例发生的百分比。我曾尝试使用朴素贝叶斯分类器并取得了一些成功。

-------------------------------
| LCX  | Cease    |     10%    |
-------------------------------

这只是一个小样本,我还想包括其他 x,它们是浮点数和其他字符串值的混合。整个主要数据集包含超过 4000 万个条目和 40 多个可能的列,这可能是影响“已完成”的一个因素,因此有大量的训练数据可供使用!

最好的方法是您推荐哪种方法?

1个回答

不建议使用您建议的将文本转换为整数值的方法(除非您使用决策树或 XGBoost 作为预测模型)。如果您使用 KNN(和许多其他模型),您应该使用一种称为one-hot encoding的技术。这样做的原因是(使用上面的示例)Installis1Repair Ais 2,但Install不一定是数量上的两倍,Repair A但是您正在分配它们1并且2它们是数量上相关的(2 是 1 的两倍)。所以你的模型会这样解释它。

这就是您需要使用 One Hot 编码的原因。

我不熟悉 JS 中的 ML,但在 python 中你可以这样做: 使用 pandas:

import pandas as pd

df = pd.DataFrame({
      'A':['a','b','a'],
      'B':['b','a','c']
    })
df
Out[]: 
   A  B
0  a  b
1  b  a
2  a  c

# Get one hot encoding of columns B
one_hot = pd.get_dummies(df['B'])
# Drop column B as it is now encoded
df = df.drop('B',axis = 1)
# Join the encoded df
df = df.join(one_hot)
df  
Out[]: 
   A  a  b  c
0  a  0  1  0
1  b  1  0  0
2  a  0  0  1

也许其他人可以在 JS 中给你特定的代码。