Python 如何对字符串分类数据进行编码?

Python 如何对字符串分类数据进行编码?,python,pandas,dataframe,keras,scikit-learn,Python,Pandas,Dataframe,Keras,Scikit Learn,因此,我有一个数据集,它本质上是单个程序执行的windowsapi调用列表。每一行属于一个程序。同一行的连续单元格是由同一程序进行的API调用。我的问题是无法弄清楚如何对这些分类数据进行编码,这样我就可以从中建立一个基于回归的ML模型 我尝试使用Pandas方法,get\u dummies()但这似乎把事情搞砸了,因为生成的列数呈指数级增长 我的数据集看起来像这样- ROW [9822] GetStartupInfoA LockResource GetCommandLineA GetModule

因此,我有一个数据集,它本质上是单个程序执行的
windowsapi
调用列表。每一行属于一个程序。同一行的连续单元格是由同一程序进行的API调用。我的问题是无法弄清楚如何对这些分类数据进行
编码
,这样我就可以从中建立一个基于回归的
ML
模型

我尝试使用
Pandas
方法,
get\u dummies()
但这似乎把事情搞砸了,因为生成的列数呈指数级增长

我的数据集看起来像这样-

ROW [9822] GetStartupInfoA LockResource GetCommandLineA GetModuleFileNameA ShowWindow EnableWindow DestroyWindow    lstrcpyW GetThreadLocale lstrcmpiW GlobalAlloc
如果有帮助的话,我还有一个独特的API列表


我的目标基本上是建立一个模型,分析API调用并预测进行这些调用的程序是否是良性的。

这是整数编码:

api_dict={
'call_1':1,
“call_2”:2,
“呼叫3”:3,
...}
#从字典中获取相应的值
`api_dict.get({api_name_here})`
我不确定您的数据结构是如何安排的,但假设它是一个列表列表:

一个热编码类似,只是值将转换为二进制:

从keras.utils导入到
数据=[‘冷’、‘暖’、‘热’]#3个可能值
encoded=到_分类(数据)
返回
[[1 0],[0 1 0],[0 0 1]]

~2000个不同的值将被转换为11位二进制数,这意味着为了表示所有不同的API调用,该函数将转换每个值,即1或0的11个不同列。这样做是为了尽可能保持数据的中立性

如果使用我上面提供的算法,最终将得到1-1替换,但单元格中的值将介于1-2000之间。这可能会影响模型的输出

备选方案:

  • 减少您希望允许程序进行的调用量,这将减少列数
  • RI>重新考虑你希望模型在预测时要考虑的数据。您可以删除任何不需要的数据,或者使用不同的方法来减少数据
  • 更改表的结构,而不是记录所有调用,您可以记录诸如总运行时间、API调用数或您认为可能影响输出的任何其他内容。这取决于你

  • 列名称是什么?如果要使用
    get\u dummies()
    ,所有条目都需要有一组公共列。此外,如果您的程序不都进行相同数量的API调用,则会有不同列数的行,这也是
    get\u dummies()不允许的
    。在创建ML模型时,有很多因素决定您应该如何对数据集建模。我建议你添加模型的目标,以便社区能够更好地帮助你。嘿,乔希!数据集没有任何列名。所有程序进行相同数量的API调用(至少,我通过限制它来确保这一点)。你建议我添加列名吗?我没有这样做,因为这没有任何意义。很公平。考虑到API调用是名义上的,这是有道理的。我应该如何将API调用映射到一个数值(因为我有大约2000个唯一的API调用)?如果我不明白,我很抱歉,但是这对我面临的问题有什么帮助呢?我不能对所有2000个API调用都这样做。为什么我不能只使用标签编码器或热编码?你试过使用标签编码器吗?请更新您的问题以包含此信息。不管你怎么看,如果你想让你的模型区分2000个不同的API调用,你的结果将有许多不同的列。我给你的答案和标签编码器将产生相同的结果
    LabelEncoder
    是一个更简单的例子。如果您需要使用该函数的帮助,那么您应该提出一个新问题。如果我有2000个API调用,并且我只对数据进行了一次热编码,为什么会有2000多列?
    for row in sheet:
        for cell in row:
           cell = api_dict.get(value)