Ошибка при использовании AU C для DecisionTreeClassifier - Python - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь настроить параметр max_depth моего DecisionTreeClassifier. Я пытаюсь использовать AU C (область под кривой) в качестве показателя оценки c. Вот мой код:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)

    def max_depth_prediction(X_train, y_train, X_test, y_test, y):
        max_depths = np.linspace(1, 32, 32, endpoint=True)
        train_results = []
        test_results = []
        for max_depth in max_depths:
            dt = DecisionTreeClassifier(max_depth=max_depth)
            dt.fit(X_train, y_train)
            train_pred = dt.predict(X_train)
            print(y_train)
            print(train_pred)
            false_positive_rate, true_positive_rate, thresholds = roc_curve(y_train.astype(int), train_pred.astype(int))
            roc_auc = auc(false_positive_rate, true_positive_rate)
            # Add auc score to previous train results
            train_results.append(roc_auc)
            y_pred = dt.predict(X_test)
            false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_pred)
            roc_auc = auc(false_positive_rate, true_positive_rate)
            # Add auc score to previous test results
            test_results.append(roc_auc)

Однако при его использовании я получаю сообщение об ошибке:

ValueError: y_true takes value in {'0', '1'} and pos_label is not specified: either make y_true take value in {0, 1} or {-1, 1} or pass pos_label explicitly.

Я проверил мои 2 вектора, и они кажутся хорошими:

y_train = ['0' '0' '0' ... '1' '1' '0']
train_pred = ['0' '0' '1' ... '1' '1' '0']

1 Ответ

1 голос
/ 18 марта 2020

y_train и train_pred - список строк, и они должны быть целыми числами. Попробуйте это

def max_depth_prediction(X_train, y_train, X_test, y_test, y):
    max_depths = np.linspace(1, 32, 32, endpoint=True)
    train_results = []
    test_results = []
    for max_depth in max_depths:
        dt = DecisionTreeClassifier(max_depth=max_depth)
        dt.fit(X_train, y_train)
        train_pred = dt.predict(X_train)
        train_pred = [int(i) for i in train_pred]
        y_train = [int(i) for i in y_train]
        print(y_train)
        print(train_pred)
        false_positive_rate, true_positive_rate, thresholds = roc_curve(y_train.astype(int), train_pred.astype(int))
        roc_auc = auc(false_positive_rate, true_positive_rate)
        # Add auc score to previous train results
        train_results.append(roc_auc)
        y_pred = dt.predict(X_test)
        false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_pred)
        roc_auc = auc(false_positive_rate, true_positive_rate)
        # Add auc score to previous test results
        test_results.append(roc_auc)
...