#pandas #numpy #machine-learning #logistic-regression
#pandas #numpy #машинное обучение #логистическая регрессия
Вопрос:
У меня было несколько категориальных переменных, для которых я создал макеты:
#Create Dummy Variables with get_dummies (for Diabetes)
new_df = pd.concat([new_df,pd.get_dummies(new_df['DIABETES'],prefix='DIABETES')], axis=1)
#new_df.drop(['DIABETES'],axis=1, inplace=True)
#Create Dummy Variables with get_dummies (for bmi_cat)
new_df = pd.concat([new_df,pd.get_dummies(new_df['bmi_cat'],prefix='bmi_cat')], axis=1)
#Create Dummy Variables with get_dummies (for albumin_cat)
new_df = pd.concat([new_df,pd.get_dummies(new_df['albumin_cat'],prefix='albumin_cat')], axis=1)
#Create Dummy Variables with get_dummies (for SMOKE)
new_df = pd.concat([new_df,pd.get_dummies(new_df['SMOKE'],prefix='SMOKE')], axis=1)
#Create Dummy Variables with get_dummies (for Age)
new_df = pd.concat([new_df,pd.get_dummies(new_df['age_cat'],prefix='age_cat')], axis=1)
#Create Dummy Variables with get_dummies (for SEX)
new_df = pd.concat([new_df,pd.get_dummies(new_df['SEX'],prefix='Sex')], axis=1)
#Create Dummy Variables with get_dummies (for Readmission)
new_df = pd.concat([new_df,pd.get_dummies(new_df['Readmission'],prefix='Readmission')], axis=1)
Затем я установил интересующие меня независимые переменные в столбцы:
#Columns
columns = new_df[['DIABETES','bmi_cat', 'albumin_cat', 'SMOKE','SEX']]
На данный момент я пытаюсь реализовать модель логистической регрессии, которая выглядит следующим образом:
#Model 1 Target Variable (Mortality)
X = columns
y = new_df['Mortality']
logit_model=sm.Logit (y,X)
После этого я получаю следующие ошибки:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-47-81faac9dff81> in <module>
4 y = new_df['Mortality']
5
----> 6 logit_model=sm.Logit (y,X)
7 #result=logit_model.fit()
8 #print(result.summary2())
E:UsersdavidwoolAnaconda3libsite-packagesstatsmodelsdiscretediscrete_model.py in __init__(self, endog, exog, **kwargs)
416
417 def __init__(self, endog, exog, **kwargs):
--> 418 super(BinaryModel, self).__init__(endog, exog, **kwargs)
419 if (not issubclass(self.__class__, MultinomialModel) and
420 not np.all((self.endog >= 0) amp; (self.endog <= 1))):
E:UsersdavidwoolAnaconda3libsite-packagesstatsmodelsdiscretediscrete_model.py in __init__(self, endog, exog, **kwargs)
169 """
170 def __init__(self, endog, exog, **kwargs):
--> 171 super(DiscreteModel, self).__init__(endog, exog, **kwargs)
172 self.raise_on_perfect_prediction = True
173
E:UsersdavidwoolAnaconda3libsite-packagesstatsmodelsbasemodel.py in __init__(self, endog, exog, **kwargs)
210
211 def __init__(self, endog, exog=None, **kwargs):
--> 212 super(LikelihoodModel, self).__init__(endog, exog, **kwargs)
213 self.initialize()
214
E:UsersdavidwoolAnaconda3libsite-packagesstatsmodelsbasemodel.py in __init__(self, endog, exog, **kwargs)
62 hasconst = kwargs.pop('hasconst', None)
63 self.data = self._handle_data(endog, exog, missing, hasconst,
---> 64 **kwargs)
65 self.k_constant = self.data.k_constant
66 self.exog = self.data.exog
E:UsersdavidwoolAnaconda3libsite-packagesstatsmodelsbasemodel.py in _handle_data(self, endog, exog, missing, hasconst, **kwargs)
85
86 def _handle_data(self, endog, exog, missing, hasconst, **kwargs):
---> 87 data = handle_data(endog, exog, missing, hasconst, **kwargs)
88 # kwargs arrays could have changed, easier to just attach here
89 for key in kwargs:
E:UsersdavidwoolAnaconda3libsite-packagesstatsmodelsbasedata.py in handle_data(endog, exog, missing, hasconst, **kwargs)
631 klass = handle_data_class_factory(endog, exog)
632 return klass(endog, exog=exog, missing=missing, hasconst=hasconst,
--> 633 **kwargs)
E:UsersdavidwoolAnaconda3libsite-packagesstatsmodelsbasedata.py in __init__(self, endog, exog, missing, hasconst, **kwargs)
74 self.orig_endog = endog
75 self.orig_exog = exog
---> 76 self.endog, self.exog = self._convert_endog_exog(endog, exog)
77
78 # this has side-effects, attaches k_constant and const_idx
E:UsersdavidwoolAnaconda3libsite-packagesstatsmodelsbasedata.py in _convert_endog_exog(self, endog, exog)
472 exog = exog if exog is None else np.asarray(exog)
473 if endog.dtype == object or exog is not None and exog.dtype == object:
--> 474 raise ValueError("Pandas data cast to numpy dtype of object. "
475 "Check input data with np.asarray(data).")
476 return super(PandasData, self)._convert_endog_exog(endog, exog)
ValueError: Pandas data cast to numpy dtype of object. Check input data with np.asarray(data).
Я предполагаю, что это связано с тем, что dtypes являются объектами, а не int64.
Однако я не могу изменить dtype в нескольких столбцах:
new_df.infer_objects().dtypes
Age object
SEX object
DIABETES object
bmi float64
SMOKE object
DPRALBUM float64
Readmission object
Infection object
bmi_cat object
albumin_cat object
age_cat object
Optimized object
Mortality int64
any_complication int64
DIABETES_INSULIN uint8
DIABETES_NO uint8
DIABETES_NON-INSULIN uint8
bmi_cat_0 uint8
bmi_cat_gte40 uint8
bmi_cat_lt40 uint8
albumin_cat_0 uint8
albumin_cat_gt3.5 uint8
albumin_cat_lt3.5 uint8
SMOKE_No uint8
SMOKE_Yes uint8
age_cat_0 uint8
age_cat_gte65 uint8
age_cat_lt65 uint8
SEX_female uint8
SEX_male uint8
Readmission_No uint8
Readmission_Yes uint8
dtype: object
Любые советы или рекомендации будут оценены.
Комментарии:
1. Что содержат столбцы-нарушители? В pandas строки являются объектами python.
2. это строки, например, DIABETES имеет значения NO, NON_INSULIN и INSULIN .
3. Вам нужно использовать ваши фиктивные переменные, такие как
DIABETES_INSULIN
inX
, а не строковую версию. Или вы используете интерфейс формулы, который автоматически создает фиктивные переменные из категориальных / строковых столбцов4. Джозеф — я делал это раньше и получил сообщение об ошибке с надписью Singular Matrix или что-то в этом роде, я могу опубликовать код для этого, а также ошибку, если вы хотите ее увидеть.