Функция Python получает другое значение при вызове - PullRequest
0 голосов
/ 19 января 2019

это моя функция

def linearRegCostFunction(X,y,theta,lamda):
[m,n] = X.shape

#hypothesis
h_theta = X*theta

#CostFunction
J = 1/(2*m)*((h_theta-y).transpose())*(h_theta - y)
JReg = (lamda/(2*m)) * (theta[1:,:].transpose()) * theta[1:,:]
CostFun = J + JReg

#GradientDescent
thetaZero = theta
thetaZero[0] = 0
G = (1/m) * ((h_theta-y).transpose()) * X
JGrad = lamda/m * thetaZero.transpose()
gradientDescent = G + JGrad

return(CostFun,gradientDescent)

я звоню с этим: linearRegCostFunction(biasX,y,theta,lamda)

тогда я получаю: (matrix([[303.99319222]]), matrix([[-15.30301567, 598.25074417]]))

когда я пытаюсь вспомнить:

[C,G] = linearRegCostFunction(biasX,y,theta,lamda)
print('CostFunction\n',C)
print('GradientDescent\n',G)

тогда я получаю разные значения:

CostFunction[[319.79620789]]
GradientDescent[[-16.30301567 603.33617052]]

Я подумал, потому что не было определено, что CostFunction и GradientDescent равны нулю в первой строке функции. как я могу определить в моей функции?

1 Ответ

0 голосов
/ 19 января 2019

Поскольку theta представляется списком, вам необходимо скопировать theta, прежде чем манипулировать thetaZero.Обратите внимание, после thetaZero = theta, theta и thetaZero ссылка на один и тот же объект.Это приводит к тому, что thetaZero[0] = 0 манипулирует theta.

thetaZero = theta.copy()
thetaZero[0] = 0

Если theta является массивом numpy:

thetaZero = np.copy(theta)
thetaZero[0] = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...