python - 如何对列中的字符串数据进行编码,以便我可以应用机器学习技术进行分类,例如 k-means?
问题描述
我在具有相应 ID (Range[kksId]) 的列中有字符串变量 (Range[VarName])。我需要创建一个算法,将新变量分类为现有 ID,或者如果不可能将它们单独放在 N/A 类中。
如何对列中的字符串数据进行编码,以便我可以应用机器学习技术进行分类,例如 k-means?
解决方案
通常,由于您的变量“Range[kksId]”是您的目标类,因此您将每个字符串映射到一个唯一的整数,这是一个如何在 python 中实现的示例:
import pandas as pd
def _categoricalToNumeric(dataset):
categoric_id_mapping = {}
curr_id_to_assign = 0
for row in dataset.index:
categorical_value = dataset.loc[row]
if categorical_value in categoric_id_mapping:
dataset.loc[row] = categoric_id_mapping[categorical_value]
else:
categoric_id_mapping[categorical_value] = curr_id_to_assign
dataset.loc[row] = curr_id_to_assign
curr_id_to_assign += 1
return dataset
df = pd.read_excel('DataModel.xlsx', index_col=0)
df['Range[kksId]'] = _categoricalToNumeric(df['Range[kksId]'])
然后,对于字符串特征,在一个简单的分类器中,它们一般将每个字符映射到一个变量中。例子:
R_r_DegPit1_In_St
R_r_DegPit1_In
变成:
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16
R _ r _ D e g P i t 1 _ I n _ S t
R _ r _ D e g P i t 1 _ I n \0 \0 \0
由于您将拥有与数据集中最长的字符串一样多的变量,因此对于不会占用所有变量的字符串,您应该使用指示空字符的值填充剩余的变量。您还应该将字符值更改为数字,但是,重要的是不要根据每列重置数字计数。结果可能是这样的:
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16
3 1 4 1 5 10 11 6 12 13 2 1 7 14 1 8 9
3 1 4 1 5 10 11 6 12 13 2 1 7 14 0 0 0
请记住,更高级的 ML/DL 技术以不同的方式处理它们的字符串。
推荐阅读
- javascript - 在光滑的轮播中,我希望我的中心滑块图像有一个边缘顶部
- python - Pymongo bson.errors.InvalidDocument:从文件读取时无法编码对象
- java - MapStruct 根据目标类型映射正确的对象实例
- c# - WPF 组合框阻止选择更新
- r - 合并同一地块上的信息
- java - 如何从 ObservableValue 继承?
- docker - 在 Docker 中运行 Gitlab
- php - PHP搜索JSON而不循环
- infiniband - 使用 Inifiniband 将远程内存映射到主机的地址空间
- multithreading - Julia:宏线程和并行