Я тренирую систему распознавания эмоций, которая обнаруживает эмоции посредством движения лица, и у меня есть 4-мерная матрица, которую я пытаюсь тренировать. Тем не менее, sklearn не позволяет мне обучать матрицу. То, что я делаю то, что я пытаюсь классифицировать каждую эмоцию, создавая множество видеоПроблемы с подготовкой многомерных данных (4d numpy matrix) в sklearn и pybrain
Возможности, которые составляют матрицу 4D:
Количество видео (и каждое видео будет присвоен ярлык эмоции)
Количество кадров в видео
направления ориентиров лица в кадр
скорости ориентиров лица в кадр
фактическая матрица особенности, которую я пытаюсь поезд:
левая сторона скорость (гипотенуза между одной вехой лица каждой рамка)
Правая сторона направление (арктангенс из й и у значений одного и тот же ориентира для лица каждого кадра)
>> 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 (как наивные байесовский) дают мне подобные ошибки говоря, что они принимают только 2D-матрицы.
Я понял, что проблема заключается в том, что на самом деле не с моей реализацией, но что SVM, Naive Bayes и другие алгоритмы ml вообще не могут обрабатывать более двух измерений данных.
Я попытался обратиться к нейронным сетям в pybrain, но я не мог понять, как подать матрицу в нейронную сеть с пирамидами.
Я, хотя и имею возможность использовать PCA или реконструировать дизайн матрицы, но я бы предпочел сохранить эти функции и те же размеры, а не вмешиваться в них.
Есть ли способ, алгоритм машинного обучения или нейронная сеть, который я могу использовать для обучения 4D-матрицы?
Как бы вы интерпретировали входной сигнал 4D матрицы? В 2D мы знаем, что строка - это наблюдение/экземпляр, тогда как столбцы - это функции. Как бы вы интерпретировали ваши другие два измерения? –
Общим способом является преобразование 4D матрицы в 2D. Близким примером является подготовка алгоритма для распознавания изображений, где изображение имеет 3D (ширина, высота и цвет RGB-цвета). Чтобы подавать эту входную матрицу в sklearn algo, вы можете изменить ее на (ширина x высота) x 3-RGB-цвет. –
Я рассматривал только объединение трех функций в один вектор, но проблема в том, что если бы я объединил свою матрицу функций (отредактированный пост, чтобы показать матрицу, которую я пытаюсь обучить), это просто испортило бы преимущество каждого отдельного значения функции и алгоритм ml имел бы действительно трудное время для понимания этих значений и не очень хорошо тренировался. – user3377126