Я пытался сделать выборку объектов на синтетическом наборе данных с несколькими метками.Было отмечено, что время вычислений для предоставления полного набора данных для SelectKBest было намного выше по сравнению со временем, необходимым для предоставления одной функции за раз.В этом примере ниже рассматривается только одна метка (или целевая переменная).
import pandas as pd
from sklearn.datasets import make_multilabel_classification
from sklearn.feature_selection import chi2, SelectKBest, f_classif
# Generate a multilabel dataset
x, y = make_multilabel_classification(n_samples=40000, n_features = 1000, sparse = False, n_labels = 4, n_classes = 9,
return_indicator = 'dense', allow_unlabeled = True, random_state = 1000)
X_df = pd.DataFrame(x)
y_df = pd.DataFrame(y)
%%time
selected_features2 = []
for label in y_df.columns.tolist()[0:1]:
selector = SelectKBest(f_classif, k='all')
selected_features = []
for ftr in X_df.columns.tolist():
selector.fit(X_df[[ftr]], y_df[label])
selected_features.extend(np.round(selector.scores_,4))
Время ЦП: пользователь 3,2 с, sys: 0 нс, всего: 3,2 с.Время ожидания: 3,18 с
%%time
sel_features = []
for label in y_df.columns.tolist()[0:1]:
selector = SelectKBest(f_classif, k='all')
selector.fit(X_df, y_df[label])
sel_features.extend(np.round(selector.scores_,4))
Время ЦП: пользовательский 208 мс, sys: 37,2 с, всего: 37,4 с Время наработки: 37,4 с
%%time
sel_features = []
for label in y_df.columns.tolist()[0:1]:
selector = SelectKBest(f_classif, k='all')
selector.fit(X_df.as_matrix(), y_df[label].as_matrix())
sel_features.extend(np.round(selector.scores_,4))
Время ЦП: пользовательский 220 мс, sys: 35,4 с, всего: 35,7 с Время стены: 35,6 с.
Почему такая большая разница во времени вычислений?