передискретизировать и нормализовать массив numpy для распознавания жестов

Я собираюсь написать небольшое приложение для распознавания жестов (пока с помощью мыши).

теперь запишите координату мыши в массиве numpy объекта Point (простой класс с атрибутами x и y). для обучения моей системы (на основе HMM) мне нужен (я думаю ...) некоторый образец той же длины, нормализованный между тем же диапазоном.

Скажем, например, что мне нужен массив длиной 8 элементов для моего обучения и для моего классификатора. И я только что записал a1 (элемент с 5 линзами) и a2 (элемент с 9 линзами). Как получить len (a1) == len (a2) == 8?

ИЗМЕНИТЬ: я нашел веб-сайт, на котором объясняется моя проблема: http://www.creativedistraction.com/demos/gesture-recognition-kinect-with-hidden-markov-models-hmms/ он использует k-средства для уменьшения элемента в 8 кластер ..

РЕШЕНИЕ: у меня есть несколько разрозненных точек (я не знаю, сколько), и я хочу уменьшить их до 8 значений. один из методов, который я могу использовать, - это их кластеризация с помощью некоторых кластерных алгоритмов. KMeans может быть одной из возможностей. в scipy с этим кодом: from scipy.cluster.vq import kmeans2

def clusterize(numpy_array, n_cluster):
    centroids, labels = kmeans2(numpy_array, n_cluster)
    #print centroids, labels
    return centroids

Примечание: если размер numpy_array меньше, чем n_cluster, я заметил, что решения не очень хороши, но в моем реальном случае после некоторых испытаний я заметил, что у меня больше, чем (размер numpy_array> = 60, n_cluster = 8). это вполне логично: k-means - это не детерминированный алгоритм, но это итеративный процесс, включающий некоторую случайную инициализацию, потому что для такого рода проблем не существует аналитического хорошего решения (если я хорошо понял).

наверняка есть некоторые математические открытия, в которые я не хочу углубляться. это делает работу.


person nkint    schedule 18.01.2012    source источник


Ответы (1)


Я не уверен, что это то, что вам нужно, но это будет линейно интерполировать входные данные по n точкам, равномерно разнесенным.

input = np.array([0, 1, 2, 3, 4]) ** 2
n = 8
m = len(input)
out = np.interp(np.linspace(0, m-1, n), np.arange(m), input)
person Bi Rico    schedule 19.01.2012