Машина с градиентным усилением на питоне

Я пытаюсь использовать машину с градиентным усилением (gbm) в python для моего отчета о модели

Я написал несколько кодов для выполнения задачи, но получал сообщение об ошибке

x_train,x_test,y_train,y_test=train_test_split(ml_Telco.drop(labels=['Churn'],axis=1),
                                               ml_Telco['Churn'],
                                               test_size=0.3,
                                               random_state=0)
target = 'Churn'
x_train.shape,x_test.shape

def modelfit(alg, dtrain, predictors, performCV=True,printFeatureImportance=True, cv_folds=5):
    #Fit the algorithm on the data
    alg.fit(dtrain[predictors], dtrain['Churn'])    
    #Predict training set:
    dtrain_predictions = alg.predict(dtrain[predictors])
    dtrain_predprob = alg.predict_proba(dtrain[predictors])[:,1]
    #Perform cross-validation:
    if performCV:
        cv_score = cross_validation.cross_val_score(alg,dtrain[predictors],dtrain['Churn'], cv=cv_folds, scoring='roc_auc')

    #Print model report:
    print ("\nModel Report")
    print ("Accuracy : %.4g" % metrics.accuracy_score(dtrain['Churn'].values,dtrain_predictions))

    print( "AUC Score (Train): %f" % metrics.roc_auc_score(dtrain['Churn'],dtrain_predprob))   
    if performCV:
        print( "CV Score : Mean - %.7g | Std - %.7g | Min - %.7g | Max %.7g" % (np.mean(cv_score),np.std(cv_score),np.min(cv_score),np.max(cv_score)))        
    #Print Feature Importance:
    if printFeatureImportance:
        feat_imp = pd.Series(alg.feature_importances_,predictors).sort_values(ascending=False)
        feat_imp.plot(kind='bar', title='Feature Importances')
        plt.ylabel('Feature Importance Score')

predictors = [x for x in x_train.columns if x not in ['Churn']]
gbm0 = GradientBoostingClassifier(random_state=10)
modelfit(gbm0, x_train, predictors)

Я ожидал получить модельный отчет, показывающий: Accuracy Auc Score (train) CV Score

Но я получил следующую ошибку:

KeyError                                  Traceback (most recent call last)

<ipython-input-154-2ee19dd7c558> in <module>

      1 predictors = [x for x in x_train.columns if x not in ['Churn']]

      2 gbm0 = GradientBoostingClassifier(random_state=10)

----> 3 modelfit(gbm0, x_train, predictors)

KeyError: 'Churn'

Спасибо


person Loui    schedule 26.07.2019    source источник


Ответы (1)


ваша функция modelfit ожидает фрейм данных dtrain, в котором должны быть все столбцы, включая столбец переменной y 'churn'. поэтому сначала объедините x_train и y_train, а затем передайте полученный фрейм данных в modelfit функцию

df=pd.concat([x_train, y_train], axis=1)
gbm0 = GradientBoostingClassifier(random_state=10)
modelfit(gbm0, df, x_train.columns)

Здесь, в вашей model fit функции, вы подбираете модель и прогнозируете на одном и том же наборе данных, то есть на вашем обучающем наборе (x_train, ytrain). В идеале вы должны подогнать модель под свой обучающий набор и сделать прогноз на своем тестовом наборе (x_test, y_test).

person Shijith    schedule 26.07.2019