机器学习-在sklearn和pybrain中训练多维数据(4d-numpy矩阵)时遇到问题



我正在训练一个通过面部运动检测情绪的情绪识别系统,我正在尝试训练一个4维矩阵。然而,sklearn不允许我训练矩阵。我正在做的是,我试图通过创建一组视频来对每种情绪进行分类

组成4D矩阵的功能:
视频数量(每个视频将被分配情感标签)
每个视频的帧数
每帧面部标志的方向
每帧的面部标志的速度

我正在尝试训练的实际功能矩阵:
左侧是速度(每帧相同面部标志之间的斜边)
右侧是方向(每帧同一面部标志的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 SVM得到的错误:

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算法(比如Naive Bayes)也给了我类似的错误,说它们只接受2D矩阵。

我认为问题不在于我的实现,而是SVM、Naive Bayes和其他ml算法通常无法处理超过2个维度的数据。

我试着在pybrain中使用神经网络,但我无法找到将矩阵输入pybrain神经网络的方法。

我想到了使用PCA或重建矩阵设计的可能性,但我更愿意保持这些特征和相同的维度,不要把它们搞砸。

有没有什么方法,机器学习算法或神经网络可以用来训练4D矩阵?

从您的示例中不清楚哪个是采样轴。但是sklearn中的训练可以这样做(如果第一个轴是你的样本轴):

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

知道任何sklearn分类器的4D结构都没有好处。为了确保简洁明了,整个软件包采用的标准是第一个矩阵维度列举示例,第二个矩阵维度列出特征。因此,在您的情况下,您需要将剩下的3个特征维度分解为一个长向量。

相关内容

  • 没有找到相关文章

最新更新