使用 Python NumPy 的特征组合
Combinations of features using Python NumPy
对于一项作业,我必须使用属于某些数据的不同特征组合来评估分类系统。我所说的特征是指测量值,例如身高、体重、年龄、收入。因此,例如,我想看看在仅给出要处理的身高和体重,然后是身高和年龄的情况下,分类器的表现如何。我不仅希望能够测试哪些两个功能一起工作效果最好,而且还想测试哪些 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) 以更优雅的方式实现这个目标。
在此先感谢,如果需要任何澄清,请告诉我,这很难解释。
要生成 k 个元素的所有组合,而无需从一组大小为 n 的元素中进行替换,您可以使用 itertools.combinations
,例如:
idx = np.vstack(itertools.combinations(range(n), k)) # an (n, k) array of indices
对于 k=2 的特殊情况,使用 n x n 矩阵的上三角索引通常更快,例如:
idx = np.vstack(np.triu_indices(n, 1)).T
对于一项作业,我必须使用属于某些数据的不同特征组合来评估分类系统。我所说的特征是指测量值,例如身高、体重、年龄、收入。因此,例如,我想看看在仅给出要处理的身高和体重,然后是身高和年龄的情况下,分类器的表现如何。我不仅希望能够测试哪些两个功能一起工作效果最好,而且还想测试哪些 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) 以更优雅的方式实现这个目标。
在此先感谢,如果需要任何澄清,请告诉我,这很难解释。
要生成 k 个元素的所有组合,而无需从一组大小为 n 的元素中进行替换,您可以使用 itertools.combinations
,例如:
idx = np.vstack(itertools.combinations(range(n), k)) # an (n, k) array of indices
对于 k=2 的特殊情况,使用 n x n 矩阵的上三角索引通常更快,例如:
idx = np.vstack(np.triu_indices(n, 1)).T