python - 如何编码字符串分类数据?
问题描述
所以我有一个数据集,它本质上Windows API
是单个程序进行的调用列表。每一行属于一个程序。同一行的连续单元格是同一程序进行的 API 调用。我的问题是无法弄清楚如何处理encode
这些分类数据,以便我可以从中制作基于回归的ML
模型。
我尝试使用该Pandas
方法,get_dummies()
但这似乎只是把事情搞砸了,因为似乎生成的列数呈指数增长。
我的数据集看起来像这样 -
ROW [9822] GetStartupInfoA LockResource GetCommandLineA GetModuleFileNameA ShowWindow EnableWindow DestroyWindow lstrcpyW GetThreadLocale lstrcmpiW GlobalAlloc
如果有帮助的话,我还有唯一 API 的列表。
我的目标本质上是建立一个模型来分析 API 调用并预测进行这些调用的程序是否是良性的。
解决方案
这是整数编码:
api_dict = {
'call_1': 1,
'call_2': 2,
'call_3': 3,
...}
#grab the corresponding value from the dictionary
`api_dict.get({api_name_here})`
我不确定您的数据结构是如何排列的,但假设它是一个列表列表:
for row in sheet:
for cell in row:
cell = api_dict.get(value)
一种热编码是类似的,除了值将被转换为二进制:
from keras.utils import to_categorical
data = ['cold', 'warm', 'hot'] # 3 possible values
encoded = to_categorical(data)
返回
[[1 0 0],[0 1 0],[0 0 1]]
大约 2000 个不同的值将被转换为 11 位二进制数,这意味着为了表示所有不同的 API 调用,该函数将每个值转换为 1 或 0 的 11 个不同列。这样做是为了保留数据尽可能中立。
如果你使用我上面提供的算法,你最终会得到一个 1-1 的替换,但单元格中的值将是 1-2000 之间的任何值。这可能会影响模型的输出。
备择方案:
- 减少您希望允许程序进行的调用量,这将减少列
- 重新考虑您希望模型在进行预测时考虑哪些数据。您可以删除任何不需要的数据或使用不同的方法来减少它。
- 更改表的结构,而不是记录所有调用,您可以记录总运行时间、API 调用次数或您认为可能影响输出的任何其他内容。由你决定。
推荐阅读
- sql - 我想找到已经租借的电影比“Silverado”还多?需要输出:标题和租用次数
- rust - 使用 reqwest crate 进行 oauth2 身份验证 - redirect_uri_mismatch
- python-3.x - 在 asyncio 中何处捕获键盘中断:在代码入口点或主函数?
- c++ - 在块内使用 main 中声明的变量
- vim - 如何在 Vim 中不按顺序执行多个全局命令?
- cron - 具有特定要求的 Cron 表达式
- python - pandas json_normalize 返回空数据框
- python - 如何从字典值中删除逗号?
- amazon-web-services - 使用 AWS Cognito 保护托管在 EC2 上的 Web 应用程序,而无需修改 Web 应用程序
- sql - 查询 PostgreSQL 的 Open-High-Low-Close (OHLC)