Реализация валидации k-cross в python - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь реализовать логику проверки k-cross без использования библиотеки на тестовой матрице. Так что мои повернутые матрицы не работают нормально.

Я взял k равным 5.

X = np.matrix([[1,2,3,4,5],[7,8,9,4,5],[4,9,6,4,2],[9,5,1,2,3],[7,5,3,4,6]])
P = np.ones((5,5))
target = np.matrix([[1,2,3,4,5]]).T
#def k_fold(X,target,k):
r = X.shape[0]  
k=5
step = r//k  
last_row_train = step*(k-1) 

for i in range(5):
    X_train = X[0:last_row_train,:]
    tempX = X_train

    X_test = X[last_row_train:r,:]
    temp_X_test = X_test

    t_train = target[0:last_row_train,:]
    temp_t_train = t_train
    t_test = target[last_row_train:r,:]
    temp_test = t_test
    X[step:r,:] = tempX # On running this line, it changes the value of 
                        #  temp_X_test which is very weird and not
                        # supposed to happen 
    X[0:step,:] = temp_X_test 
    target[0:step,:] = temp_test
    target[step:r,:] = temp_t_train
    print (X)
    print (target)

1 Ответ

0 голосов
/ 26 марта 2019

tempX = X_train

Этот оператор не создает новую переменную tempX и не присваивает ей X_train. Имена переменных tempX и X_train указывают на один и тот же объект. Любое изменение в tempX будет отражено в X_train. Это повторяющаяся проблема в вашем коде.

При попытке сделать такое назначение списка используйте код ниже.

tempX = X_train.copy()

Вот ссылка на похожий вопрос с дополнительными решениями.
Как клонировать или скопировать список?

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