使用Python NumPy的功能组合

时间:2015-11-02 00:35:22

标签: python arrays numpy combinations feature-extraction

对于作业,我必须使用属于某些数据的不同特征组合来评估分类系统。通过特征我的意思是测量,例如身高,体重,年龄,收入。因此,例如,我想看看分类器在给定高度和重量时的表现如何,然后高度和年龄说。我不仅希望能够测试哪两个功能最好地结合在一起,而且还希望能够将3个功能最佳地结合在一起并且希望能够将其概括为 n 功能

我一直在尝试使用numpy的mgrid,创建n维数组,展平它们,然后制作使用每个数组中相同元素的数组来创建新数组。棘手解释所以这里是一些代码和伪代码:

import numpy as np

def test_feature_combos(data, combinations):
    dimensions = combinations.shape[0]
    grid = np.empty(dimensions)
    for i in xrange(dimensions):
        grid[i] = combinations[i].flatten() 
    #The above code throws an error "setting an array element with a sequence" error which I understand, but this shows my approach.

    **Pseudo code begin**
    For each element of each element of this new array, 
    create a new array like so:
    [[1,1,2,2],[1,2,1,2]] --->  [[1,1],[1,2],[2,1],[2,2]]
    Call this new array combo_indices
    Then choose the columns (features) from the data in a loop using:
    new_data = data[:, combo_indices[j]]

combinations = np.mgrid[1:5,1:5]
test_feature_combos(data, combinations)

我承认,由于重复,这种方法意味着很多不必要的组合,但是我甚至无法实现这一点,所以乞丐不能选择。

请有人可以告诉我如何a)实施我的方法或b)以更优雅的方式实现这一目标。

提前致谢,如果需要澄清,请告诉我,这很难解释。

1 个答案:

答案 0 :(得分:1)

要生成 k 元素的所有组合而不从一组大小 n 中替换,您可以使用itertools.combinations,例如:

idx = np.vstack(itertools.combinations(range(n), k)) # an (n, k) array of indices

对于 k = 2 的特殊情况,使用 nxn 矩阵的上三角形的索引通常会更快,例如:

idx = np.vstack(np.triu_indices(n, 1)).T