【问题标题】:Scikit-learn: Calculate likelihood based on multiple test samplesScikit-learn:基于多个测试样本计算似然度
【发布时间】:2014-01-19 05:39:31
【问题描述】:

我正在使用 scikit learn 构建 GMM 分类器。为了测试,我使用了一个包含大量行的文件 X,每一行代表一个特征向量 [x,y,z]。

例如:

[1,2,3]
[2,2,3]
[4,4,5]
...

我为每一行分配一个相应的类标签。当我使用 scikit-learn score() 函数时,它会计算 X 中每个数据点的对数概率。对于我的应用程序来说,这不是很有用,因为我文件中的每个测试样本都代表一个运动帧和基于单个帧的识别不准确。相反,我想使用更多的帧(样本)进行测试,并根据样本组而不是单个样本计算对数似然度。通过这种方式,我可以通过查看一个人的 30 秒动作而不是查看一个非常短的单个时间框架来识别一个人。 scikit-learn 可以做到这一点吗?我该如何做到这一点?

【问题讨论】:

  • 这似乎是一个 HMM 公式,而不是 GMM。您应该尝试重新表述问题。
  • 我仍然做出简单且不太直观的 GMM 假设,即特征相互独立。我还是想一次看几个特征向量,假设我将 3 个特征向量累积成一个更大的 3 行 3 列特征向量。
  • 然后你应该将每个特征矩阵展平为一行(reshape in numpy)。只要长度相同,就可以被视为特征。
  • 我不确定这是否可能。如果我这样做,我也必须展平训练数据数组。但是训练数据必须排列成与均值数组一样多的列,即在上述情况下为 3。否则 scikit learn 返回值错误。我不知道将手段阵列也展平是否是一个明智的想法。

标签: python scikit-learn


【解决方案1】:

如果我正确理解了这个问题,您想在运行估算器之前获取各种行或“运动帧”并将它们合并为数字表示?所以从你的例子:

[1,2,3]
[2,2,3]
[4,4,5]

您可能需要从 state_0 到 state_n 的差异或方向性进展的最终表示,例如 count1、count2、count3。给定示例数据,最后一步可能是 3,2,2,因为这是与最终状态和开始状态的差异。但是,这并没有捕获沿途表达的波动或方差,请采用如下数据:

[1,2,3]
[10,6,1]
[3,3,5]
[1,0,6]
[2,2,2]

最终指标是 1,0,1,它不会传达或捕捉任何波动。您是否允许使用协方差矩阵以明智地使用方差列/特征?

您可以考虑使用 30 帧(行/观察)的示例检查统计数据:

>> import numpy as np 
>>> data = np.array([
...     [1, 2, 3],
...     [2 ,2, 3],
...     [4, 4, 5],
...     ...........
...     [3, 3, 3]])
>>> np.argmax(np.var(data, axis=1)) #var, mean, std, etc

【讨论】:

    猜你喜欢
    • 2013-09-12
    • 2016-10-17
    • 2017-06-22
    • 2016-01-16
    • 2018-08-12
    • 2017-03-15
    • 1970-01-01
    • 2016-01-24
    • 2014-03-26
    相关资源
    最近更新 更多