【发布时间】:2021-07-25 23:10:51
【问题描述】:
我想将 Google Vision API 面部识别的输出转换为 ML 分类器的特征集。对于每个训练实例,我都会得到一个预测面孔列表,该列表表示为字典列表,其中值本身就是字典,这些“值字典”的值本质上是分类的,如下所示:
$ faces[191:197]
[{'face_1': {'joy': 'VERY_UNLIKELY',
'surprise': 'UNLIKELY',
'anger': 'VERY_UNLIKELY',
'sorrow': 'VERY_UNLIKELY',
'headwear': 'VERY_UNLIKELY'}},
{},
{},
{'face_1': {'joy': 'VERY_LIKELY',
'surprise': 'LIKELY',
'anger': 'VERY_UNLIKELY',
'sorrow': 'VERY_UNLIKELY',
'headwear': 'VERY_UNLIKELY'},
'face_2': {'joy': 'VERY_UNLIKELY',
'surprise': 'VERY_UNLIKELY',
'anger': 'VERY_UNLIKELY',
'sorrow': 'VERY_UNLIKELY',
'headwear': 'VERY_LIKELY'}},
{'face_1': {'joy': 'VERY_LIKELY',
'surprise': 'VERY_UNLIKELY',
'anger': 'VERY_UNLIKELY',
'sorrow': 'VERY_UNLIKELY',
'headwear': 'VERY_UNLIKELY'},
'face_2': {'joy': 'POSSIBLE',
'surprise': 'VERY_UNLIKELY',
'anger': 'VERY_UNLIKELY',
'sorrow': 'VERY_UNLIKELY',
'headwear': 'VERY_UNLIKELY'}}]
我的目标是将其转换为 ML 可读格式。我想使用如下所示的编码(n 是整个数据集中预测人脸的最大数量):
joy_1 surprise_1 , ...., anger_n sorrow_n headwear_n
img_1 1 2 , ...., 0 0 0
img_2 0 0 , ...., 0 0 0
img_3 0 0 , ...., 0 0 0
img_4 5 4 , ...., 0 0 0
.
.
.
我已将 sklearn dictVectorizer 和 labelEncoder 用于其他作为 dicts 列表的功能,但这些 dicts 没有 dicts 作为值,就像这个数据源的情况一样。
【问题讨论】:
-
您能否详细说明这些行在您想要的输出中代表什么?是否要将
faces中的每个值转换为一行? -
@AlexanderL.Hayes 每行代表一张通过 Google Vision API 解析的图像。对于图像中的每张脸,GVA 引擎为以下 5 个字段“快乐/惊喜/愤怒/悲伤/头饰”中的每一个生成一个分数。预测分数分为“非常不像/不像/可能/像/非常像”类别。这些类别不是独立的,因此希望将它们转换为 0-5 之间的分数(0 表示“未观察到”,5 表示“极有可能”)。每张图像中有 0-8 张面孔,所以我最终会得到 40 个特征(8 个潜在面孔中的每一个有 5 个面部表情)。希望它有意义吗?
-
总而言之,是的,所需输出中的每一行都代表一个图像。
-
你可以做两件事。将字典转换为数据框。然后使用分类编码器将您的字符串编码为整数。首先转换为df。然后一个简单的谷歌搜索可以产生编码的解决方案。
标签: python machine-learning scikit-learn feature-extraction feature-engineering