matrix - 在sklearn和pybrain中,在训练多维数据( 四维numpy矩阵) 时遇到困难

  显示原文与译文双语对照的内容
0 0

我已经训练了一个情感识别系统,通过面部运动检测情感,我有 4维矩阵。 但是sklearn不允许我训练矩阵。 我正在做的是通过创建一组视频来分类每个情感

构成 4D 矩阵的特性:
视频数量( 和每个视频都将被分配情感标签)
每个视频帧数
每帧脸部标志的方向
每帧脸部标志的速度

我正在尝试训练的实际特征矩阵:
左侧是速度( 每个帧的相同的斜边)
右侧是方向( 每个帧的同一facial的x 和y 值)


>> main.shape
(2, 17, 68, 2)
# 2 videos, 17 frames per video, 68 facial landmarks, 2 features (direction and speed)
>> main
array([[[[ 0., 0. ],
 [ 0., 0. ],
 [ 0., 0. ],
. . ., 
 [ 0., 0. ],
 [ 0., 0. ],
 [ 0., 0. ]],

 [[-1., -0. ],
 [-1., -0. ],
 [-1., -0. ],
. . ., 
 [ 0., 0. ],
 [ 1.41421356, 0.78539816],
 [ 1., 0. ]],

 [[ 3.16227766, -1.24904577],
 [ 2.23606798, -1.10714872],
 [ 2.23606798, -1.10714872],
. . ., 
 [ 1.41421356, -0.78539816],
 [-1.41421356, 0.78539816],
 [-2., -0. ]],

. . ., 
 [[-3.60555128, -0.5880026 ],
 [-2.23606798, -0.46364761],
 [-2.23606798, -0.46364761],
. . ., 
 [ 3., 0. ],
 [ 2.23606798, 0.46364761],
 [ 0., 0. ]],

 [[ 2.82842712, -0.78539816],
 [ 2.23606798, -1.10714872],
 [ 2.23606798, -1.10714872],
. . ., 
 [ 1.41421356, 0.78539816],
 [ 1., 1. ],
 [ 1., 1. ]],

 [[-1.41421356, 0.78539816],
 [ 0., 0. ],
 [ 0., 0. ],
. . ., 
 [-2.23606798, 1.10714872],
 [-2.23606798, 1.10714872],
 [ 2., 1. ]]],


 [[[ 0., 0. ],
 [ 0., 0. ],
 [ 0., 0. ],
. . ., 
 [ 0., 0. ],
 [ 0., 0. ],
 [ 0., 0. ]],

 [[-1., -0. ],
 [-1., -0. ],
 [-1., -0. ],
. . ., 
 [ 0., 0. ],
 [ 1.41421356, 0.78539816],
 [ 1., 0. ]],

 [[ 3.16227766, -1.24904577],
 [ 2.23606798, -1.10714872],
 [ 2.23606798, -1.10714872],
. . ., 
 [ 1.41421356, -0.78539816],
 [-1.41421356, 0.78539816],
 [-2., -0. ]],

. . ., 
 [[-3.60555128, -0.5880026 ],
 [-2.23606798, -0.46364761],
 [-2.23606798, -0.46364761],
. . ., 
 [ 3., 0. ],
 [ 2.23606798, 0.46364761],
 [ 0., 0. ]],

 [[ 2.82842712, -0.78539816],
 [ 2.23606798, -1.10714872],
 [ 2.23606798, -1.10714872],
. . ., 
 [ 1.41421356, 0.78539816],
 [ 1., 1. ],
 [ 1., 1. ]],

 [[-1.41421356, 0.78539816],
 [ 0., 0. ],
 [ 0., 0. ],
. . ., 
 [-2.23606798, 1.10714872],
 [-2.23606798, 1.10714872],
 [ 2., 1. ]]]])

我从sklearn支持程序获得的错误:


ValueError: Buffer has wrong number of dimensions (expected 2, got 4)

然后我试着用一个更简单的3D 矩阵来看看我能否找到一个方法,但是它给了我同样的错误:


>>> from sklearn.svm import SVC
>>> model = SVC()
>>> features = np.array([[[1,2],[3,4]],[[8,9],[10,11]]])
>>> features.shape
(2, 2, 2)
>>> labels = [1,2]
>>> model.fit(features,labels)
ValueError: Buffer has wrong number of dimensions (expected 2, got 3)

其他sklearn算法( 朴素贝叶斯) 给我类似的错误说它们只接受 2D matricies 。

I的问题是,在一般情况下,支持向量机和其他的ml算法不能处理超过 2个数据维的问题。

我试图在pybrain中找到神经网络,但是我无法找到一种方法来将矩阵输入pybrain神经网络。

我尽可以能使用PCA或者重构矩阵的设计,但是我更愿意保持这些特性和相同的维度。

是否有任何方式,机器学习算法,或者我可以用于训练 4D 矩阵的神经网络?

时间: 原作者:

0 0

从你的例子中还不清楚哪个样本轴。 但是sklearn中的培训可以像这个( 。如果第一个轴是你的示例轴) 一样完成:


model.fit(features.reshape(len(features), -1), labels)

了解任何sklearn分类器的4D 结构没有什么好处。 所采用的标准,以确保简单和清晰,是第一个矩阵维度枚举示例和第二个特征。 所以在你的例子中,你需要将 3个剩余的特征维分解成一个长向量。

原作者:
...