我要写一个小应用来识别手势(现在用鼠标)。
现在,将鼠标坐标记录在Point对象(具有x和y属性的简单类)的numpy数组中。 为了训练我的系统(基于HMM)我需要(我认为......)相同长度的一些样本在相同范围之间归一化。
比方说,我需要一个8元素长度的数组用于我的训练和分类器。 我刚刚记录了a1(5-len元素)和a2(9-len元素)。如何实现len(a1)== len(a2)== 8?
编辑:我找到了一个解释我问题的网站: http://www.creativedistraction.com/demos/gesture-recognition-kinect-with-hidden-markov-models-hmms/ 他在8簇中使用k-means来减少元素..
解决方案:我有一些分散点(我不知道有多少),我想把它减少到8个意义点。我可以使用的一种技术是使用一些集群算法对它们进行聚类。 KMeans可能是一种可能性。在scipy中使用此代码: 来自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 size> = 60,n_cluster = 8)。这是非常合乎逻辑的:k-means不是一个确定性的alorightm,但它是一个涉及一些随机初始化的迭代过程,因为对于这种问题没有解决方案(如果我理解的话)。
肯定有一些我不想深入研究的数学见解。这样做了。
答案 0 :(得分:0)
我不确定这是你需要的,但是这将从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)