组合 - 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))
我正在尝试在下面所示的 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))