Матрица Numpy Concat в пошаговой процедуре - PullRequest
0 голосов
/ 12 мая 2018

Мое намерение состоит в том, чтобы создать пошаговый селектор подмножеств для регрессии, основанный на совокупной группе признаков в массивах numpy a, b и c.Я знаю, как это сделать, просматривая все столбцы (опубликованные ниже), но я не знаю, как заставить работать обработку групп столбцов.Вот представление моих данных:

a = np.array([[ 1.,  1.],
              [ 1.,  1.],
              [ 1.,  1.]])

b = np.array([[  88.,    42.5,    9. ],
              [ 121.5,   76.,    42.5],
              [ 167.,  121.5,   88. ]])

c = np.array([[  88.,    42.5,   13. ],
              [ 117.5,   72.,    42.5],
              [ 163.,   117.5,  88. ]])

total features = [a,b,c]
result = np.empty((3,8), dtype=object)

n, p = result.shape
result = np.c_[a,b,c]

, которое дает ожидаемый результат:

[[  1.    1.    88.   42.5   9.   88.   42.5  13. ]
 [  1.    1.    121.5  76.   42.5 117.5  72.   42.5]
 [  1.    1.    167.  121.5  88.  163.  117.5  88. ]]

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

features_in_model = [] 
excluded = list(set(x_train.columns)-set(features_in_model))
for feature in excluded:
     x_train_new = x_train[features_in_model+[feature]]
.....

Как создать список «исключенных» (переменная выше) при обработке групп объектов для сравнения,Список исключений должен начинаться полностью со всеми включенными функциями, и на каждой итерации удаляется одна группа.

Для справки приведем пошаговую пошаговую процедуру: https://datascience.stackexchange.com/questions/24405/how-to-do-stepwise-regression-using-sklearn

1 Ответ

0 голосов
/ 12 мая 2018

Я бы порекомендовал что-то вроде этого:

from collections import OrderedDict

feature_set = np.array([[  1.,    1.,    88.,   42.5,   9.,   88.,   42.5,  13. ],
                        [  1.,    1.,    121.5,  76.,  42.5, 117.5, 72.,   42.5],
                        [  1.,    1.,    167.,  121.5,  88.,  163.,  117.5,  88. ]])

feature_column_index = OrderedDict()
feature_column_index['feature1'] = 0
feature_column_index['feature2'] = 1
feature_column_index['feature3'] = 2
feature_column_index['feature4'] = 3
feature_column_index['feature5'] = 4
feature_column_index['feature6'] = 5
feature_column_index['feature7'] = 6
feature_column_index['feature8'] = 7

excluded_features = ['feature2', 'feature7']

include_columns = [kv[1] for kv in feature_column_index.items() if kv[0] not in excluded_features]
print(include_columns)

feature_subset = feature_set[:, include_columns]

print(feature_subset)

Что дает желаемое подмножество столбцов:

[0, 2, 3, 4, 5, 7]

[[  1.   88.   42.5   9.   88.   13. ]
 [  1.  121.5  76.   42.5 117.5  42.5]
 [  1.  167.  121.5  88.  163.   88. ]]

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

Поскольку автор хотел бы обрабатывать их как группы объектов («a», «b», «c»), это можно сделать, поддерживая сопоставление столбцов в соответствии с этими подмножествами объектов как модификацию более Общее отображение выше:

from collections import OrderedDict

feature_set = np.array([[  1.,    1.,    88.,   42.5,   9.,   88.,   42.5,  13. ],
                        [  1.,    1.,    121.5,  76.,  42.5, 117.5, 72.,   42.5],
                        [  1.,    1.,    167.,  121.5,  88.,  163.,  117.5,  88. ]])

feature_subset_mapping = OrderedDict()
feature_subset_mapping['a'] = [0,1]
feature_subset_mapping['b'] = [2,3,4]
feature_subset_mapping['c'] = [5,6,7]

excluded_subsets = ['b']

include_columns = []
for subset in [kv[1] for kv in feature_subset_mapping.items() if kv[0] not in excluded_subsets]:
    include_columns = include_columns+subset

print(include_columns)

feature_subset = feature_set[:, include_columns]

print(feature_subset)

Что дает:

[0, 1, 5, 6, 7]

[[  1.    1.   88.   42.5  13. ]
 [  1.    1.  117.5  72.   42.5]
 [  1.    1.  163.  117.5  88. ]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...