Я использую Scikit-Learn, чтобы сжать мой набор данных, имеющий около 800 функций. Это очень шумные данные (рыночные и экономические данные). Насколько я знаю, Лассо возвращает те же функции для того же набора данных. Тем не менее, я не наблюдаю это через мои пробежки. Вот моя функция:
def select_lasso_feat(self, train_data, features, target):
if len(features) <= 60:
print('LASSO feature selection step skipped. Too few features on your dataset!')
return features
print('Performing LASSO feature selection...')
X_train = self._standardize(train_data[features])
y = train_data[target]
alpha = 0.0003
feat_len = 0
while feat_len < 60:
estimator = Lasso(alpha=alpha, random_state=23)
feature_selection = SelectFromModel(estimator, threshold=0.1)
feature_selection.fit(X_train, y)
selected_features = feature_selection.transform(X_train)
selected_features = list(pd.DataFrame(X_train).columns[feature_selection.get_support()])
feat_len = len(selected_features)
alpha -= 0.00003
return list(set(selected_features))
Как видно, я продолжаю примерять лассо до тех пор, пока не достигну нужного количества функций (в нашем случае 60). Я делаю свои испытания с Юпитером. И всякий раз, когда я выключаю свой сервер и повторно запускаю свой код с точно такими же данными, я получаю разные списки функций, возвращаемые lasso. Так в чем может быть причина?