Как исправить ошибку Python / Pandas слишком много индексаторов? - PullRequest
0 голосов
/ 26 марта 2020

Я попытался выполнить приведенный ниже код в Python 3,7 до l oop через каждую комбинацию столбцов данных в фрейме данных «Rawdata», чтобы создать подмножество моделей регрессии с использованием библиотеки statsmodel и вернуть наилучшую. Код не выдает никаких ошибок, пока я не выполню последнюю строку: best_subset (X, Y). Он возвращает: «IndexingError: Слишком много индексаторов».

Есть идеи, что не так / как исправить?

Было бы здорово, если кто-то может помочь! Спасибо

#Data
Rawdata = pd.read_csv(r'C:\Users\Lucas\Documents\sample.csv')

#Main code
def best_subset(X, Y):
    n_features = X.shape[1]
    subsets = chain.from_iterable(combinations(range(n_features), k+1) for k in range(n_features))
    best_score = -np.inf
    best_subset = None
    for subset in subsets:
        lin_reg = sm.OLS(Y, X.iloc[:, subset]).fit()
        score = lin_reg.rsquared_adj
        if score > best_score:
            best_score, best_subset = score, subset
    return best_subset, best_score

#Define data inputs and call code above
X = Rawdata.iloc[:, 1:10]
Y = Rawdata.iloc[:, 0]

#To return best model
best_subset(X, Y)

1 Ответ

0 голосов
/ 26 марта 2020

Ваше подмножество циклической переменной может быть кортежем длины n_features. Если, например, подмножество (0, 1), ваша регрессия читается как

lin_reg = sm.OLS(Y, X.iloc[:, (0, 1)]).fit()

Pandas, не знает, как с этим справиться (см. здесь ). Одним из решений является преобразование типа подмножества из кортежа в список:

for subset in subsets:
    subset = list(subset)
    lin_reg = sm.OLS(Y, X.iloc[:, subset]).fit()
...