- 질문 게시판입니다.
Date | 21/02/03 00:31:58 |
Name | 아침커피 |
Subject | 다변수 최적화 (오차 최소화) |
안녕하세요? 카테고리를 수학으로 하고 싶었으나 없어서 ㅠ 과학 카테고리에 올립니다. 다변수 최적화, 자세히는 오차 최소화 방법에 대해 여쭤보고자 합니다. 상수인 참값은 9개이고 변수는 총 6개 (x1, x2, x3, y1, y2, y3) 인 상황입니다. 이 때 오차를 최소화하고 싶은데 오차는 절대값의 합이든 차이의 제곱의 합의 루트이든 큰 상관은 없을 것 같습니다. '참값 : 근사값' 방식으로 표기하자면 다음과 같은 상황입니다. 각각의 x1, x2, x3에 대해 y1, y2, y3이 돌아가며 곱해집니다. a1 : x1 * y1 a2 : x1 * y2 a3 : x1 * y3 a4 : x2 * y1 a5 : x2 * y2 a6 : x2 * y3 a7 : x3 * y1 a8 : x3 * y2 a9 : x3 * y3 경사 하강법 쓰면 얼추 될 것 같기는 한데 더 쉽고 간단한 방법이 있을 것 같습니다. 문제는 그게 뭔지 모르겠네요 ㅠ 도와주세요~~~ ㅠㅠ 0
이 게시판에 등록된 아침커피님의 최근 게시물
|
팬터그래프키보드 님이 말씀하신대로 SVD (singular vector decomposition)을 사용하면, "오차의 제곱들의 합"을 최소화하는 솔루션을 얻으실 수 있습니다. 짧게 방법만 요약하자면 다음과 같습니다.
***
[1] 일단 지금 ~{a1, a2, ... , a9}라고 써놓으신 애들을 ~{a11, a12, a13, a21, a22, a23, a31, a32, a33}으로 이름을 바꿔서 부르겠습니다.
[2] 얘네들을 3 by 3 행렬로 만... 더 보기
***
[1] 일단 지금 ~{a1, a2, ... , a9}라고 써놓으신 애들을 ~{a11, a12, a13, a21, a22, a23, a31, a32, a33}으로 이름을 바꿔서 부르겠습니다.
[2] 얘네들을 3 by 3 행렬로 만... 더 보기
팬터그래프키보드 님이 말씀하신대로 SVD (singular vector decomposition)을 사용하면, "오차의 제곱들의 합"을 최소화하는 솔루션을 얻으실 수 있습니다. 짧게 방법만 요약하자면 다음과 같습니다.
***
[1] 일단 지금 ~{a1, a2, ... , a9}라고 써놓으신 애들을 ~{a11, a12, a13, a21, a22, a23, a31, a32, a33}으로 이름을 바꿔서 부르겠습니다.
[2] 얘네들을 3 by 3 행렬로 만들고, A라고 부를게요.
[3] A를 SVD합니다 (MATLAB이나 Python 같은 걸 쓰시면 되겠네요). 그러면 A가 3 by 3 행렬 세 개의 곱으로 표현이 되는데요 (A = UDV^t), 여기서 U, V는 orthogonal matrix이고 (각 열이 다른 열과 내적하면 0이 나옴) D는 diagonal matrix이고 (행렬의 diagonal 외에 전부 0), ^t 해놓은 것은 transpose했다는 표시입니다.
[4] 아마 많은 툴들에서 D의 diagonal 값들을 내림차순으로 정렬한 상태로 보여줄 것입니다. 첫번째 element, 그러니까 가장 큰 애를 d_max라고 할게요.
[5] U와 V에서 첫번째 열들을 고른 다음, 각각에 루트(d_max)를 곱해서 x, y로 쓰시면 됩니다.
***
이렇게 하는 방법을 [주성분분석] (PCA; Principal Component Analysis)이라고 부르는데요, 왜 이 방법이 최적의 해를 구하는지 자세히 알고 싶으시다면 이 키워드로 검색해보시면 좋을 것 같습니다.
***
[1] 일단 지금 ~{a1, a2, ... , a9}라고 써놓으신 애들을 ~{a11, a12, a13, a21, a22, a23, a31, a32, a33}으로 이름을 바꿔서 부르겠습니다.
[2] 얘네들을 3 by 3 행렬로 만들고, A라고 부를게요.
[3] A를 SVD합니다 (MATLAB이나 Python 같은 걸 쓰시면 되겠네요). 그러면 A가 3 by 3 행렬 세 개의 곱으로 표현이 되는데요 (A = UDV^t), 여기서 U, V는 orthogonal matrix이고 (각 열이 다른 열과 내적하면 0이 나옴) D는 diagonal matrix이고 (행렬의 diagonal 외에 전부 0), ^t 해놓은 것은 transpose했다는 표시입니다.
[4] 아마 많은 툴들에서 D의 diagonal 값들을 내림차순으로 정렬한 상태로 보여줄 것입니다. 첫번째 element, 그러니까 가장 큰 애를 d_max라고 할게요.
[5] U와 V에서 첫번째 열들을 고른 다음, 각각에 루트(d_max)를 곱해서 x, y로 쓰시면 됩니다.
***
이렇게 하는 방법을 [주성분분석] (PCA; Principal Component Analysis)이라고 부르는데요, 왜 이 방법이 최적의 해를 구하는지 자세히 알고 싶으시다면 이 키워드로 검색해보시면 좋을 것 같습니다.
목록 |
|