недостаточно значений для распаковки (ожидал 2, получил 1) алгоритм adaboost - PullRequest
0 голосов
/ 05 марта 2020
def adaboost(X_train, Y_train, X_test, Y_test, lamb=0.01, num_iterations=200, learning_rate=0.001):

    label_train = 2*Y_train -1
    label_test = 2*Y_test -1
    [n,p] = X_train.shape
    [ntest, ptest] = X_test.shape

    X_train_1 = np.concatenate((np.ones([n,1]), X_train), axis=1)
    X_test_1 = np.concatenate((np.ones([ntest,1]), X_test), axis=1)

    beta = np.zeros([p+1])
    acc_train = []
    acc_test = []
    #margins = []

    for it in range(num_iterations):
        score = np.matmul(X_train_1, beta)
        error = (score*label_train < 1)
        dbeta = np.mean(X_train_1 * (error * label_train).reshape(-1,1), axis=0)
        beta += learning_rate * dbeta
        beta[1:] -= lamb * beta[1:]
        #margins.append(np.min(score*label_train))
        # train
        predict = (np.sign(score) == label_train)
        acc = np.sum(predict)/n
        acc_train.append(acc)
        # test
        score_test = np.matmul(X_test_1, beta)
        predict = (np.sign(score_test) == label_test)
        acc = np.sum(predict)/ntest
        acc_test.append(acc)

    return beta, acc_train, acc_test

Я вызываю эту функцию следующим образом:

_, train_acc, test_acc = adaboost(X_train, y_train, X_test, y_test)

и выдает ошибку, указанную в заголовке: для строки 68 '' '[ntest, ptest] = X_test.shape' ''

Есть идеи, как перестать получать эту ошибку? Может кто-нибудь объяснить, что я делаю не так ??

1 Ответ

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

Каким бы ни был X_test, он должен иметь только одно измерение, когда он должен быть двумерным

...