참고 문헌: 잔차 제곱합 - 위키백과
오차제곱합 Sum of Squares Error(SSE)
SSE(Sum of Squared Errors)을 다음과 같은 행렬로 표현 가능하다.
함수는 다음과 같이 표현된다:
이를 전개하면:
이제 에 대해 미분한다.
미분 규칙
행렬 미분 과정에서 사용할 기본 규칙은 다음과 같다:
- 스칼라-벡터 곱 미분
단, 는 벡터이고 는 행렬 또는 벡터이다.
- 벡터-스칼라 곱 미분
- 이차항 미분 (대칭 행렬일 때)
단, 가 대칭 행렬이어야 한다.
각 항 미분
첫 번째 항
는 상수항(Scalar 값)입니다. 따라서 에 대해 미분하면:
두 번째 항
는 벡터 와 행렬 , 그리고 벡터 의 곱이다. 이 식을 에 대해 미분하면:
여기서 미분 결과는 로, 이는 행렬 와 벡터 의 곱이다.
세 번째 항
는 의 이차항이다. 이 식을 미분하려면 대칭 행렬의 미분 공식을 사용한다:
따라서:
전체 미분 결과
각 항의 미분 결과를 조합하면:
최적화 조건
최적화를 위해 미분값을 으로 설정한다:
양변을 로 나누고 정리하면:
Beta 값 도출
위 식에서 를 구하기 위해 의 역행렬을 곱한다:
import numpy as np
# Define the input matrix X and target vector y
X = np.array([[1, 1], # Example: Add a bias term (column of 1s) for intercept
[1, 2],
[1, 3],
[1, 4]])
y = np.array([6, 5, 7, 10]) # Target values
# Calculate beta using the normal equation: beta = (X^T X)^(-1) X^T y
X_transpose = X.T
beta = np.linalg.inv(X_transpose @ X) @ X_transpose @ y
# Print the resulting beta
print("Calculated beta coefficients:")
print(beta)
# Verify the predicted values
y_pred = X @ beta
print("\nPredicted values:")
print(y_pred)
# Calculate the Sum of Squared Errors (SSE)
sse = np.sum((y - y_pred) ** 2)
print("\nSum of Squared Errors (SSE):")
print(sse)
