组合 - KNN 安装在特征对上

Combinations - KNN fitted on pairs of features

我正在尝试在下面所示的 4 个特征中的每一对上拟合 KNN 模型。第二个 for 循环没有产生任何结果。我也试过 for i, pair in enumerate(feature_comb) 但循环中的代码再次没有执行。

第一个循环运行良好,打印了列表中的每对特征名称。为什么它在第二种情况下不起作用?提前致谢。

data= data.dropna()
feature_choices= ['fg_pct',
'ast',
'blk',
'tov' ]
feature_comb= combinations(feature_choices, 2)
for pair in feature_comb:
    print(list(pair))
# We have 6 pairs of features to fit.
# predict for column 'cat', produce test r2 for each pair 
categories= pd.unique(data.loc[:,'cat'])  #{0,1,2}

# For each pair of features (key), save the test r2 as the corresponding value
score_dict={}
for pair in feature_comb:
    response= data.loc[:,'cat']
    ytr, yte= train_test_split(response, test_size= 0.2)
    features= data.loc[:, list(pair)]
    ss= StandardScaler()
    features_sc= ss.fit_transform(features)
    xtr, xte= train_test_split(features_sc, test_size= 0.2)
    xtr= pd.DataFrame(xtr, columns= features.columns); xte= pd.DataFrame(xte, columns= features.columns)
    
    knn= KNeighborsClassifier(n_neighbors= 3)
    knnmod= knn.fit(xtr, ytr)
    r2= knnmod.score(xte, yte)
    print(r2)
    score_dict[list(pair)]= [r2]
    

问题是 combinations returns 一个迭代器。在您的第一个循环之后,迭代器已被完全消耗;什么都没有了。它在最后。所以,你的第二个 for 循环没有任何作用。

如果你真的想先打印结果,把它设为list。你想吃多少次都可以:

feature_comb = list(combinations(feature_choices, 2))