Невозможно исправить ValueError («endog должен быть в единичном интервале») - PullRequest
2 голосов
/ 21 сентября 2019

Меня попросили написать программу для логистической регрессии, используя следующие шаги.

  1. Загрузка биопсии набора данных R из пакета MASS.
  2. Захват данных в виде кадра данных pandas.
  3. Переименование класса имени столбца в Class.
  4. Преобразование значений столбцов класса доброкачественных и злокачественных в '0' и '1' соответственно.
  5. Создание модели логистической регрессии с независимой переменной V1 и зависимой переменной Class.
  6. Подгонка моделис данными и отображением псевдо-R-квадрата значения

Я пытался изменить значения, но я не уверен, что делать.Кроме того, я новичок в статистике с использованием Python.

import statsmodels.api as sa
import statsmodels.formula.api as sfa
biopsy = sa.datasets.get_rdataset("biopsy","MASS")
biopsy_data = biopsy.data
biopsy_data.rename(columns={"class":"Class"})
biopsy_data.Class = biopsy_data.Class.map({"benign":0,"malignant":1})
log_mod1 = sfa.logit("V1~Class",biopsy_data)
log_res1 = log_mod1.fit()
print(log_res1.summary())

Я ожидал таблицу значений, но на выходе получилось

ValueError("endog must be in the unit interval.")

1 Ответ

1 голос
/ 21 сентября 2019

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

, что вы можете сделать, это выполнить масштабирование функции, выполнив: X -Xmin / Xmax - Xmin

Вот модификации, которые должны работать:

import statsmodels.api as sa
import statsmodels.formula.api as sfa
biopsy = sa.datasets.get_rdataset("biopsy","MASS")
biopsy_data = biopsy.data
biopsy_data.rename(columns={"class":"Class"},inplace=True)
biopsy_data.Class = biopsy_data.Class.map({"benign":0,"malignant":1})
biopsy_data["V1"] = np.divide(biopsy_data["V1"] - biopsy_data["V1"].min(), biopsy_data["V1"].max() - biopsy_data["V1"].min())
log_mod1 = sfa.logit("V1~Class",biopsy_data)
log_res1 = log_mod1.fit()
print(log_res1.summary())

Просто перед вызовом по sfa.logit() Я сделал предварительную обработку независимой переменной, которую вы хотели использовать (V1 здесь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...