처음에는 답변이 잘못되었습니다. 그러나 ones
벡터에 97 개의 요소가 하드 코드되어 있습니다. 당신이해야 할 일은 ones
벡터가 훈련 예제만큼 오래 있는지 확인하는 것입니다. 97 요소가 데이터 세트 X
에 대해 작동하지 않습니다. 97 요소가 없으므로 다른 모양의 X
에서이 항목을 실행하려고하면 호환되지 않는 치수 오류가 발생합니다.
따라서, 요소 m
의 총 수를 사용하여 다음 수를 97 대체하는 것을 사용
J= (1/(2*m)) * (ones(1, m) * (((X*theta)-y).^2));
그냥 당신이 바로 그 해답을 얻고 있는지 확인하기를,의는 임의의
X
,
y
를 만들 수 및 100 개의 트레이닝 예제 및 2 개의 파라미터 벡터를 갖는
theta
을 포함한다. 우리는 비용을 모두 표현을 사용하고이 같은 비용으로 생산하는 것을 보여 드리겠습니다 : 조언
>> rng(123);
>> X = rand(100, 2);
>> y = rand(100, 1);
>> theta = rand(2, 1);
>> m = size(X, 1);
>> J = 1/(2 * m) * sum(((X * theta) - y).^2);
>> J2 = (1/(2*m)) * (ones(1, m) * (((X*theta)-y).^2));
>> format long g;
>> J
J =
0.0702559647930643
>> J2
J2 =
0.0702559647930643
단어를
당신은 벡터를 곱하여 벡터의 합을 발견하는 것은 할 수 없다고 판단했습니다 적절하게 채워진 벡터는 ones
으로 가득 차 있습니다. 저는 이것이 덜 효율적이라고 주장 할 것입니다.이 특정 비용 함수에서 X*theta - y
으로 생성 된 벡터와 내적 벡터를 찾을 수 있다는 사실을 사용할 수 있습니다. 내적은 편리하게는 v.' * v
에 의해 계산 될 수 있으며, 여기서 v
은 열 벡터이다. 이것은 단순히 곱셈 연산자의 왼쪽이 행 벡터이고 곱셈 연산자의 오른쪽이 열 벡터 인 행렬 곱셈입니다. 나는 너 자신에게 이것을 확인하게 할 것이지만 만약 동등한 작업이 무엇인지 알아 내면, 이는 내적이다.
위의 공식으로 인해 벡터의 내적을 취하면 X*theta - y
의 모든 요소의 제곱 값이 합쳐집니다. 따라서, 대신 이렇게 :
>> d = X*theta - y;
>> J = (1/(2*m)) * (d.' * d)
J =
0.0702559647930643
:
d = X*theta - y;
J = (1/(2*m)) * (d.' * d);
당신은 또한 당신이 같은 결과를 얻을 것을 볼 수 있습니다