Подготовка данных перед RFECV или любой другой выбор функции - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь выяснить, целесообразно ли удалять высококоррелированные и негативно коррелированные объекты перед выбором функции. Вот снимок моего кода

def find_correlation(data, threshold=0.9, remove_negative=False):
        corr_mat = data.corr()
        if remove_negative:
            corr_mat = np.abs(corr_mat)
        corr_mat.loc[:, :] = np.tril(corr_mat, k=-1)
        already_in = set()
        result = []
        for col in corr_mat:
            perfect_corr = corr_mat[col][corr_mat[col] > threshold].index.tolist()
            if perfect_corr and col not in already_in:
                already_in.update(set(perfect_corr))
                perfect_corr.append(col)
                result.append(perfect_corr)
        select_nested = [f[1:] for f in result]
        select_flat = [i for j in select_nested for i in j]
        return select_flat

corrFeatList = find_correlation(x)
fpd = x.drop(corrFeatList,axis = 1 )

fpd['label'] = catlabel 
fpd = fpd[fpd['label'].notnull()]

Features = np.array(fpd.iloc[:,:-1])
Labels = np.array(fpd.iloc[:,-1])

hpd = fpd.iloc[:,:-1]
headerName = hpd.columns

#Scale first
#Scaling normalisation
scaler = preprocessing.StandardScaler()
Features = scaler.fit_transform(Features)

#RFECV logReg first
## Reshape the Label array
Labels = Labels.reshape(Labels.shape[0],)

## Set folds for nested cross validation
nr.seed(988)
feature_folds = ms.KFold(n_splits=10, shuffle = True)

## Define the model
logistic_mod = linear_model.LogisticRegression(C = 10, class_weight = "balanced") 

## Perform feature selection by CV with high variance features only
nr.seed(6677)
selector = fs.RFECV(estimator = logistic_mod, cv = feature_folds)
selector = selector.fit(Features, Labels)

Features = selector.transform(Features)
print('Best features :', headerName[selector.support_])

Так что я попробовал это с и без отбрасывания связанных функций и получил совершенно другие функции. Учитывает ли RFECV и другие характеристики (методы уменьшения размерности) эти сильно коррелированные особенности? Я правильно здесь поступаю? Наконец, если удаление функций с высоким порогом - хорошая идея, следует ли мне масштабировать перед этим. Спасибо.

Кевин

1 Ответ

0 голосов
/ 09 января 2019

RFECV просто берет ваши исходные данные, перекрестно проверяет модель и отбрасывает наименее значимую особенность, значимость которой обеспечивается вашим классификатором / регрессором. Затем он делает то же самое со всеми возвращенными функциями рекурсивно. Так что он не знает явно о линейных корреляциях.

В то же время высокая корреляция функций не означает, что один из них является лучшим кандидатом для удаления. Сильно коррелированный признак может нести некоторую полезную информацию, например, он может иметь меньшую дисперсию, чем повторный.

Уменьшение размерности не подразумевает удаления сильно коррелированных функций в общем случае, однако некоторые линейные модели, такие как PCA, неявно делают это.

...