我想为k个变量列表生成长度为n的所有组合。我可以这样做:
import itertools
import pandas as pd
from sklearn import datasets
dataset = datasets.load_breast_cancer()
X = dataset.data
y = dataset.target
df = pd.DataFrame(X, columns=dataset.feature_names)
features = dataset.feature_names
x = set(['mean radius', 'mean texture'])
for s in itertools.combinations(features, 3):
if x.issubset(set(s)):
print s
len(features)= 30,因此这将生成4060个组合,其中n = 3。当n = 10时,这是30,045,015种组合。
len(tuple(itertools.combinations(features, 10)
然后将根据条件语句评估这些组合中的每一个。然而,对于n> 10,这变得不可行。
不是生成所有组合,而是按照本例中的某些条件进行过滤,是否可以在给定此条件的情况下生成所有组合?
换句话说,生成所有组合,其中n = 3,4,5 ... k,给定'平均半径'和'意味着纹理'出现在组合中?
答案 0 :(得分:3)
只需生成没有'mean radius'
和'mean texture'
的组合,并将这两个组合添加到每个组合中,从而大大减少了组合的数量。这样您就不必进行过滤,生成的每个组合都很有用。
# remove the fixed features from the pool:
features = set(features) - x
for s in itertools.combinations(features, n - len(x)):
s = set(s) & x # add the fixed features to each combination
print(s)