PBL Report (자기평가서, QnA 활동 상황 포함)
PBL Report (개인성찰 노트)
2021년 여름 도전학기
PBL Report (Form)
Your Class: 인공지능을 위한 기초수학 (입문)
Prof : 이 상 구 Sang-Gu LEE
과제함 Due day : 2021.08.21 (in HW box in LMS)
*Name (이름) : 이시원, 유민솔, 이혜연, ...
*Student ID (아이디) : 2021**, 2020,
*e-mail(이-메일): lsw***,
[보고서 양식 다운로드/PBL report Form Download]
Korean (HWP) : http://matrix.skku.ac.kr/PBL/PBL-Report-Form-Korean.hwp
English (MS Word) : http://matrix.skku.ac.kr/PBL/PBL-Report-Form-English.docx
Sample [예시] (이전 학기 학생들의 질문/답변/활동 기록)
도전학기 7주차 기말보고서 http://matrix.skku.ac.kr/2020-Math4AI-Final-pbl2/
도전학기 7주차 기말보고서 http://matrix.skku.ac.kr/2020-math4ai-final-pbl/
도전학기 4주차 중간보고서 http://matrix.skku.ac.kr/2020-Mid-PBL-2/
도전학기 4주차 중간보고서 http://matrix.skku.ac.kr/2020-Mid-PBL-1/
(영어) http://matrix.skku.ac.kr/2018-album/LA-PBL.htm (선형대수학)
http://matrix.skku.ac.kr/2015-album/2015-F-LA-Sep-Record.pdf
http://matrix.skku.ac.kr/Cal-Book1/Calculus-1/ (미적분학 1)
http://matrix.skku.ac.kr/Cal-Book1/Calculus-2/ (미적분학 2)
학생들의 질문/답변/활동 기록: http://matrix.skku.ac.kr/2020-Math4AI-PBL/ Basic Math for AI)
Ch 1장. Participation [참여평가] (10점)
담당교수 또는 다른 학생들이 QnA에 업로드한 글에 자신의 Comment or Answer를 10개 이상 주시오.
(1) State more than 10 Math Definitions and concepts what you learned in Part 1, 2, 3, ...
초록색으로 작성된 키워드는 ch 1-(2)에 보다 자세하게 다루어집니다.
Part 0 (인공지능 개요)
1) Python
인터프리터 방식의 프로그래밍언어로 numpy, scipy과 같은 라이브러리를 사용할 수 있게 지원하면서 행렬과 함수 연산 등에서 도움을 받을 수 있다. 또한 tensorflow, pytorch 등에서 다양한 딥러닝과 머신런닝에 보다 용이하게 접근할 수 있게 도움을 준다. 이 외에도, 많은 이들이 사용하는 언어라는 요소 때문에 문법적인 오류나 라이브러리에 대한 참고 코드가 다수 존재하고 있으며, matplotlib와 같은 라이브러리를 통해 시각화 요소에서도 강점을 보여준다.
2) Sage
Sage는 다양한 오픈소스 소프트웨어와 라이브러리 등을 python 인터페이스를를 기반으로 묶어 만들어진 수학 소프트웨어이다. 이 코드를 통해서 python보다 수식을 보다 직관적으로 입력하는 것이 가능하고 SVD와 같은 python에서는 제공하지 않는 함수들도 제공하고 있다. 또한 http://sage.knou.ac.kr/에서 타인이 공개한 오픈소스를 통해 Sage 사용방식을 배울 수 있다.
3) R
통계 계산과 그래픽 작업을 위해서 만들어진 프로그래밍 언어이다. 다양한 패키지를 지원하고 있으며, 선형 모델링과 비선형 모델링, 시계열 분석, 클러스터링 등의 다양한 통계 기술 및 그래픽 기술을 구현하였다. 또한 무료로 사용이 가능하며, 만든 패키지를 공유하여 사용이 가능하다는 점에서 여러 연구 분야에서 사용되고 있다.
4) MNIST
손으로 쓴 숫자들로 이루어진 대형 데이터베이스이다. 기계 학습 분야에서 모델의 트레이닝 및 테스트에 널리 사용된다. MNIST는 60000개의 트레이닝 이미지와 10000개의 테스트 이미지를 포함하고 있으며 각 이미지는 28*28픽셀의 크기로 구성되어 있다.
Part 1 (행렬과 데이터분석)
1) 스칼라
길이, 넓이, 질량, 온도 등의 크기만 주어지는 변수로써 방향을 지정하지 않아도 표현할 수 있는 양들을 나타낼 수 있다.
2) 벡터
속도, 위치이동, 힘 등의 방향까지 지정하여야만 표현할 수 있는 요소들을 나타낼 때 사용되며 크기와 방향을 모두 포함하는 물리량을 가지고 있다.
3) 노름
의 벡터
에 대하여
를 x에 대한 노름이라고 한다.
이때의 노름은 원점에서 P(
)에 이르는 거리를 나타낸다.
4) 벡터의 내적
상의 벡터
,
에 대하여
를 x와 y의 내적이라하며,
처럼 표기한다.
5) 코시-슈바르츠 부등식
의 임의의 두 벡터 x,y에 대하여
가 성립한다.
이때의 등호는 x,y가 서로 실수배인 경우에만 성립한다.
6) 사잇각
두 벡터 사이의 각도를 의미하며,
을 통해서
값을 구해낼 수 있다.
7) 정사영
그림의 벡터 x, y에 대하여 점 p에서 OQ에 내린 수선의 발 S에 대하여 벡터 P = OS를 x 위로의 y의 정사영이라 하고
로 나타낸다. 이때의 P는 x와 평행하므로 P=tx가 된다.
이때 y-p는 x와 직교하므로
의 식을 변형함으로써
가 성립한다.
따라서
이고 이때의 t는
가 성립한다.
8) 최단 거리
P(x,y,z)이 평면
위의 점이고 v = (
,
,
), n(a,b,c)이라고 한다면, 점 P와 평면
사이의 최단 거리는 n위로의 v의 정사영의 노름을 통해서 구할 수 있다.
식으로 표현한다면
로 나타낼 수 있다.
9) 선형연립방정식
일반적으로, 미지수
에 관한 유한개의 선형방정식의 모임을 선형연립방정식이라 한다. 만약 이때의 상수항들이 모두 0인 경우에는 동차선형연립방정식이라고 한다.
10) 첨가행렬
n개의 미지수를 가지는 m개의 일차방정식으로 이루어진 선형연립방정식
에 대하여
,
,
로 나타내고 행렬의 곱을 이용해 Ax=b로 나타낼 때, A를 계수행렬
를 첨가행렬이라고 한다.
11) 기본행 연산
행렬 A에 대하여 아래 3가지의 연산을 기본행 연산이라고 한다.
(ⅰ) A의 두 행 i행과 j행을 서로 바꾸는 연산.
(ⅱ) A의 i행에 0이 아닌 상수 k를 곱하는 연산.
(ⅲ) A의 i행을 k배 하여 j행에 더하는 연산.
12) 행 사다리꼴
행렬 A가 아래의 3가지 성질을 만족할 때, 행 사다리꼴이라고 한다.
(ⅰ) 성분이 모두 0인 행이 존재하면 그 행은 행렬의 맨 아래에 위치한다.
(ⅱ) 각 행에서 처음으로 나타나는 0이 아닌 성분은 1이다.
(ⅲ) i행과 (i+1)행에 모두 선행성분이 존재한다면, (i+1)행의 선행선분은 i행의 선행선분보다 오른쪽에 위치하며, 이러한 행 사다리꼴은 여러 개 존재할 수 있다.
13) 기약 행 사다리꼴
행렬 A가 행 사다리꼴이기 위한 3가지 조건을 만족하며 아래의 한가지 조건을 추가로 만족할 때 기약 행 사다리꼴이라 한다.
(ⅳ) 선행성분을 포함하는 열의 선행성분은 모두 0이다.
14) Guass 소거법
선형연립방정식의 첨가행렬을 행 사다리꼴(REF)로 변형하여 푸는 방법이다.
15) Guass-Jordan 소거법
선형연립방정식의 첨가행렬을 기약 행 사다리꼴(RREF)로 변형하여 푸는 방법이다.
16) 행렬의 곱
행렬 A와
행렬 B에 대하여 곱을 진행하여 얻은 행렬을 C라 정의한다.
C = AB와 같이 표기할 수 있으며 C는
행렬이 된다. 이 때 A행렬의 열의 개수와 B행렬의 행의 개수가 같아야 행렬의 곱 연산을 진행할 수 있다.
이 행렬의 곱 연산이다.
17) 영행렬
행렬의 성분이 모두 0인 행렬을 말하며 O 또는
으로 나타낸다.
18) 단위행렬
주 대각선성분이 모두 1이고, 나머지 성분이 모두 0인 n차 정사각행렬을 단위행렬이라고 말하며
으로 나타낸다.
19) 전치행렬
행렬 A=
에 대하여 전치행렬은
로 나타내며 다음과 같이 정의된다.
,
, 이때 두 행렬 A, B와 임의의 스칼라 k에 대해 아래의 4가지가 성립한다.
(ⅰ)
(ⅱ)
(ⅲ)
(ⅳ)
20) 대각합
행렬 A=
의 대각합은
이다.
21) 역행렬
n차의 정사각행렬 A에 대하여 다음을 만족하는 행렬 B를 A의 역행렬이라고 한다.
이때 B를
로 표현하기도 한다.
22) 가역행렬
역행렬이 존재하는 행렬을 가역행렬이라고 하며, 가역이자 n차 정사각행렬인 A,B와 0이 아닌 스칼라 k사이에서 다음 4가지가 성립한다.
(ⅰ)
은 가역이고,
(ⅱ) AB는 가역이고,
(ⅲ) kA는 가역이고,
(ⅳ)
도 가역이고,
23) 대각선행렬
주대각성분을 제외한 모든 성분이 0인 정사각행렬으로 주대각성분이
일 때, diag(
)으로 표기한다.
24) 스칼라행렬
단위행렬에 특정한 스칼라를 곱한 행렬을 말한다.
이다.
25) 대칭행렬
정사각행렬 A가
를 만족할 때, 대칭행렬이라고 하며,
를 만족할 경우에는 반대칭행렬이라고 한다.
26) 하삼각행렬
주대각선 위의 모든 성분이 0인 정사각행렬이다.
27) 상삼각행렬
주대각선 아래의 모든 성분이 0인 정사각행렬이다.
28) 치환
치환(Permutation)은 자연수의 집합 S={1,2,3,...,n}의 S에서 S로의 일대일 대응함수를 말하며 n!개 존재한다. 이때 모든 치환의 집합을
으로 나타낸다.
29) 반전
치환에서 큰 자연수가 작은 자연수보다 왼쪽에 나타나는 경우를 말한다.
치환의 개수가 짝수이면 짝치환, 홀수이면 홀치환이라 한다.
30) 행렬식
행렬 A가 n차 정사각행렬이 때 행렬식을 det(A) 또는 |A|로 나타내고 아래와 같이 연산한다.
31) 수반행렬
n차 정사각행렬 A의 성분
에 대한 여인자를
라 할때, 행렬
를 A의 수반행렬이라고 하며 adjA로 나타낸다.
32) 벡터공간
임의의 집합 V에 덧셈과 스칼라 배가 정의되고, 2개의 연산에 대한 닫혀있다는 2가지의 기본성질과 8개의 연산성질을 만족할 경우 벡터공간을 이룬다고 한다. 10가지의 조건을 V의 모든 원소 u,v,w와 모든 스칼라 k,l를 통해 나타내면 아래와 같다.
(ⅰ) u,v가 V의 원소이면, u+v도 V의 원소이다.
(ⅱ) u+v = v+u
(ⅲ) (u+v)+w = u+(v+w)
(ⅳ) u+0 = 0+u = u
(ⅴ) u+(-u) = (-u)+u = 0
(ⅵ) u가 V의 원소이고 k가 임의의 스칼라일때 ku는 V에 속한다.
(ⅶ) k(u+v) = ku+kv
(ⅷ) (k+l)u = ku+lu
(ⅸ) (kl)u = k(lu)
(ⅹ) 1u= u
33) 부분공간
의 부분집합 W가 다음 2가지를 만족할때 부분공간이라 한다.
(ⅰ)
(ⅱ)
34) 일차결합
의 부분집합 {
}에 대하여,
인 벡터 x가
의 형태로 표시되면 x를
의 일차결합이라 한다.
35) span
일차결합들의 전체집합으로 <U>와 같이 표기한다.
36) 일차독립
S={
}
,
에 대하여 아래 식이 성립할때 집합 S를 일차독립이라한다.
37) 일차종속
일차결합이면서 일차독립이 아닌 경우를 말하며 이 경우에는 스칼라
중에 0이 아닌 값이 존재한다.
38) 기저
의 부분집합 S가 아래 두 조건을 만족하면 S를
의 기저라 한다.
(ⅰ) S가 일차독립이다.
(ⅱ) span(S) =
의 기저는 무수히 많으며, 각 기저에 속하는 벡터의 개수는 항상 같다.
39) 차원
집합 S가
의 한 기저일 때, S에 속하는 벡터의 개수를
의 차원이라 하며 dim
이라 한다.
40) nullity
m
n 행렬 A에 대하여 Ax=0의 해공간을 nullity(A)라고 한다.
41) 행공간
행벡터들에 의해서 생겨난
의 부분집합을 말한다.
42) 열공간
열벡터들에 의해서 생겨난
의 부분집합을 말한다.
43) rank
행공간과 열공간의 차원을 행렬의 계수(rank)라고 한다.
임의의 행렬 A =
의 행계수와 열계수는 같으며 이 계수를 행렬 A의 계수(rank)라고 하며 아래와 같이 표현한다.
rank(A) = r(A) = c(A)
44) 최소제곱해
다수의 2차원 데이터가 주어져있다고 할때 이 데이터들을 가장 잘 보여주는 y=a+bx을 찾는 방식이다.
행렬
라 할때 ||Ax-b||를 최소화하는 근사해를 찾는 문제를 최소제곱문제라고 하며, 이 때의 해를 최소제곱해라고 한다.
이때 x가 최소제곱문제의 해가 될 필요충분조건은 정규방정식을 만족하는 것이며, 정규방정식은
를 말한다.
또한 최소제곱해는
를 통해 계산해 낼 수 있다.
45) 정규직교기저
의 벡터
에 대하여 S={
}라 정의하자.
이때 S의 서로 다른 임의 두 벡터가 모두 직교하면 S를 직교집합이라 하며, 직교집합 S에 속하는 모든 벡터의 크기가 1인 경우에 정규직교집합이라 한다.
의 기저 S가 정규직교집합일 경우에 정규직교기저라 한다.
46) Gram-Schmidt 정규직교화 과정
의 기저 S로부터 직교집합 T={
}을 4단계에 걸쳐서 구해준 후, T의 각각의 크기를 1로하는 과정을 거쳐
의 정규직교기저를 계산해내는 방법이다.
47) QR분해
행렬 A가 k개의 일차독립인 열을 가질 때 여기에 Gram-Schmidt 정규직교화 과정을 통해 얻은 정규직교벡터들을 열로하는 행렬 Q와
상삼각행렬 R을 이용하여 A=QR로 분해가 되는 것을 말한다.
이러한 요소를 이용하여 최소제곱문제, 고유값, 고유벡터를 구하는 문제를 해결하는데 사용되기도 한다.
최소제곱문제와 고윳값, 고유벡터를 구하는 문제를 해결하는데 많이 사용된다.
행렬 A가 rank k인
행렬이라면,
로 분해가능하다. 여기서 Q는 A의 열공간 Col(A)의 정규직교기저로 만들어진
행렬이고, R은 가역인 크기
의 상삼각행렬이다.
Gran-Schmidt 정구직교화 과정을 통하여 행렬 A의 열공간 Col(A)의 정규직교기저를 얻을 수 있다.
을 Col(A)의 정규직교기저라고 하면
이다. 이때 상삼각행렬 R을 다음과 같이
라 정의하면
으로
이다.
48) 행렬변환
A가 m*n행렬일 때,
인
을 행렬변환이라고 한다.
49) 선형변환
이 임의의 두 벡터
과 임의의 스칼라 k에 대하여 아래 2가지 조건을 만족시키는 T에 대하여
에서
으로의 선형변환이라고 말한다.
(ⅰ) T(u+v) = T(u) + T(v)
(ⅱ) T(ku) = kT(u)
50) 표준행렬
모든 선형변환
은 행렬변환 T(x) = Ax로 나타낼 수 있고, 이때의 행렬 A를 표준행렬이라고 부르며 [T]와 같이 표기하기도 한다.
이때의 A = [T(e1):T(e2):....:T(en)]이다.
51) 핵
이 선형변환일 때, T에 의한 상이 0이 되는
안의 벡터 전체의 집합을 T의 핵이라 하며 kerT로 표기한다.
52) 단사
가 T(u)=T(v)일 때 u=v를 만족하는 경우, 즉 일대일 함수인 경우를 단사라 한다.
단사를 위한 필요충분조건은 ker T = {0}이다.
53) 전사
가 임의의
에 대해 T(v)=w인
이 존재하는경우, 즉 일대일 대응인 경우를 전사라 한다.
54) 전단사
단사이면서 전사인 경우를 지칭하는 용어이다.
55) 동형사상
선형변환 T가 전단사이면서 n=m인 경우에는 n=m이 성립되고 T를
에서
으로의 동형사상이라고 한다.
56) 고윳값
n차의 정사각행렬 A가 있을때 0이 아닌 벡터
이 임의의 스칼라 k에 대하여 Ax=kx가 성립할때 스칼라 k를 A의 고윳값이라 한다.
57) 고유벡터
n차의 정사각행렬 A가 있을때 0이 아닌 벡터
이 임의의 스칼라 k에 대하여 Ax=kx가 성립할때 x를 k에 대응하는 A의 고유벡터라 한다.
58) 닮은 행렬
정사각행렬 A와 B사이에서 B=
를 만족하는 가역행렬 P가 존재하는 경우에 B는 A와 닮은 행렬이라고 한다.
59) 대각화가능한 행렬
A와 적당한 가역행렬 P가 존재할 때
가 대각선행렬이면 A를 대각화가능한 행렬이라고 하고 P를 A를 대각화하는 행렬이라고 한다.
대각화가능하기 위한 필요충분조건은 n차 정사각행렬 A가 n개의 일차독립인 고유벡터를 갖는 것이다.
행렬의 대각화
n차의 정사각행렬 A가 대각화가능할 필요충분조건으로는 A가 n개의 일차독립인 고유벡터를 갖는 것이 있다. 이때 A는 대각선행렬과 닮은 행렬이다.
60) 직교행렬
정사각행렬 A가
가 성립할 때 A를 직교행렬이라고 한다. 이때 다음 4가지를 만족한다.
(ⅰ) A의 행벡터들은 서로 직교이며, 정규벡터이다.
(ⅱ) A의 열벡터들은 서로 직교이며, 정규벡터이다.
(ⅲ) A는 가역행렬이다.
(ⅳ)
를 만족한다.
61) 직교대각화
정사각행렬 A에 대하여 대각화하는 직교행렬 P가 존재할 때, A는 직교대각화가능하다고 하며 P는 A를 직교대각화하는 행렬이라고 한다.
n차 정사각행렬 A가 대칭행렬인 것이 A가 직교대각화가능할 필요충분조건이다.
62) 고윳값 분해
정사각행렬 A가 대각화가능하며 실수 대칭행렬일 때 대각선행렬이자 A의 고윳값들을 주대각선 성분으로 가지는 행렬 D와, 고윳값에 대응하는 n개의 정규직교 고유 벡터를 열벡터로 가지는 P에 대해서
가 성립한다.
이때의 분해를 고윳값과 고유벡터만을 이용한다는 의미에서 A의 고유값 분해라고하며 spectral decomposition이라고 부르기도 한다.
63) SVD
고유값 분해에서 존재했던 대각화가능한 정사각행렬이라는 제한을 해결할수 있는 방법이다.
를 특이값분해라고 부른다.
이때 U는
를 직교대각화하는 행렬이며 V는
를 직교대각화하는 행렬이다.
A의 특이값들을 단조감소 순서로 배열한 대각선행렬이다.
U의 열들은 A의 left singular vector V의 열들은 A의 right singular vector라고 한다.
SVD(특이값분해, singular value decomposition)

5. 고윳값 분해(eigen-decomposition)
대각화가능한 정사각행렬 A는 대각선행렬 D과 가역행렬 P가 존재하고
가 성립한다.
만약 A가 대칭행렬이라면 대각선행렬 D와 직교행렬 P가 존재하는데 이때는
가 성립하고
이다.
64) 일반화된 역행렬
행렬 A가
인 가역행렬인 경우에 특이값 분해에 의해
로 표현할 수 있다.
이때의 A의 역행렬은
로 표현할 수 있다.
65) 이차형식
각 항이 2차인 다항식을 말하며 다양한 분야에서 사용된다.
66) 주축정리
행렬을 이용하여 2차 형식을 기술할 때, 적절한 변수 변환을 통해서 혼합항을 가지지 않는 형태로 표현할 수 있음을 보장하는 정리이다,
67) 정부호
행렬
이 대칭행렬일때
를 만족하는 q(x)에 대하여, A의 고윳값들이 모두 양이거나 음인경우를 정부호라 말하며, 모두 양인 경우에는 양의 정부호, 모두 음인 경우에는 음의 정부호라고 한다.
68) 부정부호
행렬
이 대칭행렬일때
를 만족하는 q(x)에 대하여, A의 고윳값들이 양과 음이 모두 존재하는 경우를 말한다.
7. 정규방정식
8. Gram-Schmidt 정규직교화 기저의 존재성
9. 이차형식
Part 2 (다변수 미적분과 최적화)
1) 함수
함수란 정의역안에 있는 원소 x가 공역에 존재하는 한 원소에 대응되는 규칙을 말한다.
2) 극한
과 같이 표현하면 이 식은 x가 a로 다가갈 때 f(x)가 L로 다가간다는 의미이다. 극한에는 좌극한과 우극한이 존재하며 좌극한은
, 우극한은
로 표시한다.
3) 수렴
임의의 양수(positive) ε에 대하여, 만일 0 < δ이면 |f (x)-b |< ε 되게 하는 적당한 양수(positive) δ가 존재하면, x가 a에 접근할 때 f (x)가 b에 수렴한다고 한다.
4) 발산
수렴하지 않는 경우에 발산한다고 이야기한다.
5) 미분계수
함수 f(x)가 a를 포함하는 어떠한 구간에서 정의되어 있고,
의 값이 존재한다면 f(x)는 x=a에서 미분가능하다고 말하며 이때의 극한값을 f(x)의 a에서의 미분계수라 부른다. 이때의 표기를 f’(a)로 표기한다.
6) 도함수
각점 x에 그 점에서의 미분계수를 대응시킴으로써 정해지는 함수를 f(x)의 도함수라고 한다.
도함수의 기호는
가 있다.
미분을 한 횟수에 따라서 1계 도함수, 2계 도함수, n계 도함수가 정의될 수 있다.
7) 미분
함수 f(x)의도함수를 구하는 것을 f(x)를 미분한다고 표현한다. y=f(x)의 도함수는
식을 통해서 구할 수 있다.
2. 함수의 미분가능성
8) 최대값 최솟값의 정리
f(x)가 폐구간 [a,b]에서 연속이면 이 구간에서 f(x)가 최댓값 및 최솟값을 취하는 점이 존재한다.
9) 뉴턴 방법
반복법으로, 초기 근사해로부터 특정 단계를 반복하여 근사해를 도출해내는 과정이다.
y=f(x)에 대하여
단계를 반복해 주게 된다.
뉴턴법을 시행할 경우에는 초기값을 정해주는 것이 매우 중요하며 초기값을 제대로 설정해주지 못했을 경우에는 원하는 결과가 도출되지 않을 수 있다. 또한 해가 존재하지 않거나 연속이 아닌 경우에는 뉴턴법을 통해 해를 도출해내는 것이 불가능하다.
x= a1을 방정식 f(x) =0의 근 r에 대한 첫 번째 근사값이라 하자. 그럼 y - f(a1)= f'(a1)(x-a1) 은 점 P에서의 곡선 y=f(x)에 대한 접선의 방정식이다. 그래프를 보고 a1을 r에 적당히 가까운 값으로 선택하면, 이 접선은 보통 x축과 점 Q에서 만나는데, 그 점의 x좌표 a2는 a1보다 r에 더 가까운 근사값이 된다.
6. 방향도함수의 정의
6. 그래디언트의 정의
7. 극대, 극소값의 정의
8. Fermat의 임계점 정리와 임계점의 정의
9. 경사-기울기 하강법의 idea
10) 적분
어떤 구간에서 정의된 함수 f(x)에 대하여 구간의 모든 x에 관해 F’(X) = f(x)를 만족하는 함수 F(x)가 존재할 때 F(x)를 구하는 과정을 f(x)를 적분한다라고 표현한다.
11) 부정적분
어떤 구간에서 정의된 함수 f(x)에 대하여 구간의 모든 x에 관해 F’(X) = f(x)를 만족하는 함수 F(x)가 존재할 때 F(x)를 부정적분이라고 한다. f(x)의 부정적분을
와 같이 나타낸다.
12) 적분변수
f(x)의 부정적분을 나타낼때
에서 dx를 적분변수라고 한다.
13) 적분상수
F(x)가 f(x)의 한 부정적분일 때,
= F(x) + C(C는 임의의 상수)이며 이때의 C를 적분상수라고 표현한다.
14) 정적분
f(x)가 특정한 구간 [a,b]에서 적분가능하다고 할 때, f(x)의 a로부터의 b까지의 정적분을
로 정의한다.
이때 S는 x축과 y=a, y=b, y=f(x) 둘러쌓인 넓이와 같다.
15) 적분에 관한 평균값의 정리
f(x)가 [a,b]에서 연속이면
인
가 a와 b사이에 적어도 하나 존재한다는 정리이다.
16) 미적분학의 기본정리
f(x)가 [a,b]에서 연속이고 F’(x) = f(x)라 하면
가 성립한다.
17) 편도함수
z = f(x,y)가 있을 때 f의 x에 관한 편도함수는 아래와 같이 정의된다.
마찬가지로, f의 y에 관한 편도함수는 아래와 같이 정의된다.
18) 연쇄법칙
연쇄법칙이란 합성함수의 도함수에 대한 공식으로
와 같은 미분 공식을 연쇄법칙이라고 한다.
z=f(x,y), y=g(x)일 때의 연쇄법칙은
가 된다.
19) 방향도함수
단위벡터 u = (
)라 할때, 점 (x,y)에서 u방향으로의 f의 방향도함수는 아래와 같이 정의된다.
20) 그래디언트
f(x,y)의 그래디언트느 f의 편도함수를 성분으로 갖는 벡터이며 아래와 같이 정의된다.
21) 헤시안
f(x,y)의 헤시안은 f의 2계 편도함수를 성분으로 갖는 행렬로 아래와 같이 정의된다.
22) Taylor 정리
(n+1)번 미분가능한 함수의 n-차 테일러 다항식과 원래 함수의 오차는 (n+1)계 도함수로 표현 가능하다.
을 만족하는 c∃[0, 1] 다변수함수 f가 연속인 편도함수를 가지면, 적당한 t∈(0, 1)에 대해
가 성립한다.
23) 극대
(a,b) 근방의 모든 (x,y)에 대해 f(a,b)
f(x,y)가 성립할 때, f(x,y)는 f(a,b)에서 극대가 된다고 하며, f(a,b)를 극댓값이라 한다.
24) 극소
(a,b) 근방의 모든 (x,y)에 대해 f(a,b)
f(x,y)가 성립할 때, f(x,y)는 f(a,b)에서 극소가 된다고 하며, f(a,b)를 극솟값이라 한다.
25) Fermat의 임계점 정리
f가 (a,b)에서 극대 또는 극소가 되고, f의 편도함수가 존재한다면
이 성립된다.
26) 임계점
을 만족하는 점 (a,b)를 f의 임계점이라 한다.
27) 안장점
임계점이지만 극대나 극소가 되지 않는 점을 안장점이라 부른다.
28) 극소 극대 판정법
29) 경사하강법
어떤 모델의 비용을 최소화 시키는 알고리즘으로 머신런닝이나 딥러닝 모델에서 사용되는 가중치의 최적해를 구할 때 널리 쓰이는 알고리즘이다. 기본 개념은 함수의 기울기를 낮은 쪽으로 계속 이동시키며 극값에 이를 때까지 반복하는 것이다.
30) 이중적분
직사각형 영역 R=[a,b]
[c,d] = {(x,y)
|
}에서 f(x,y)의 이중적분은 아래와 같이 정의된다.
31) Fubini의 정리
f(x,y)가 직사각형 영역 R=[a,b]
[c,d] = {(x,y)
|
}에서 연속이면 아래가 성립한다.
연속 2변수함수의 2중적분을 할 경우, 적분순서를 바꾸어도 이중적분값은 같다.
Part 3 (확률통계와 빅데이터)
1) 표본평균
개의 표본자료를
,
,
,
이라 할 때 아래와 같이 계산된다.
으로 계산된다.
2) 중위수
n개의 표본자료를 크기순으로 나열한 것을
,
,
,
이라 할 때,
(i) 관측값의 개수(
)가 홀수면, 중위수는
번째 관측값이다.
(ii) 관측값의 개수(
)가 짝수면, 중위수는
번째 관측값과
번째 관측값의 평균이다.
값들을 중위수라고 한다.
3) 표본분산
개의 표본자료를
,
,
,
이라 하고, 이들의 표본평균을
라고 하면
로 계산된다.
4) 표본표준편차:
5) 순열
서로 다른 물건들 중 몇 개를 골라 순서를 주어 나열한 경우의 수
6) 조합
서로 다른 물건들 중 몇 개를 골라 순서 없이 나열한 경우의 수
7) 이항정리





, 
일반화 하면,
위의
은 x,y에 각각 1을 대입한 것
8) 이항계수
9) Pascal의 공식
를 만족하는 정수
과
는 다음 식을 만족한다.




10) 중복집합의 순열
(multi-set)
의 permutation (모든
개를 순서대로 늘어놓는) 경우의 수이며,
11) 수학적 확률

12) 기하학적 확률
인 영역
에 속하는 확률은
13) 통계적 확률과 대수의 법칙(Law of large number)
시행 횟수를
, 특정 사건
가 일어날 횟수를
라 하면,
이 한없이 커질 때 통계적 확률 P(A) 는 일정한 값 a, 즉 (수학적 확률) a 에 가까워진다.
14) 조건부 확률
어떤 사건
가 일어났다는 조건하에서 사건
가 일어날 확률을 사건
에 대한 사건
의 조건부 확률(conditional probability)이라 하고
로 표시한다.
(단,
)
15) 조건부 확률의 곱셈정리
조건부 확률의 정의로부터 다음의 곱셈정리(관계식)를 얻을 수 있다.
16) 베이즈 정리
베이즈 정리는 불확실성 하에서 의사결정 문제를 수학적으로 다룰 때 중요하게 이용된다. 특히, 정보와 같이 눈에 보이지 않는 무형자산이 지닌 가치를 계산할 때 유용하게 사용
또한, 임의의
에 대한 조건부확률 
에
와 위의 전확률(total probability) 공식을 대입하면 베이즈 정리(Bayes’ theorem)라고 한다.
4. 기댓값, 분산, 표준편차
5. 공분산, 상관계수
17) 확률변수
일정한 확률을 갖고 발생하는 사건(event)에 수치가 부여되는 함수
X가 가질 수 있는 범위를 셀 수 있는지 여부에 따라 이산확률변수와 연속확률변수로 구분된다.
18) 확률분포(probability distribution):
변수
가 취할 수 있는 모든 값
이 취하는 확률이 각각 
로 주어질 때,
를 이산확률변수라 하고
를
의 이산확률함수(probability function) 또는 확률질량함수(probability mass function, pmf)라 함.
19) 확률질량함수의 성질
(1)
(2)
(3)
가 이산형 분포를 가지면 실수의 부분집합
의 확률은
이산확률변수
의 기댓값과 분산, 표준편차는 다음과 같이 계산한다.
기댓값 :
분산 :
표준편차 :
20) 확률밀도함수(PDF)
연속확률변수란 어떤 범위에 속하는 모든 실수값을 취할 수 있는 확률변수로, 그 분포는 확률밀도함수(probability density function, pdf)를 이용하여 다음과 같이 나타낸다. 즉, 연속확률변수
의 확률밀도함수가
일 때,
가
에 있을 확률은
확률밀도함수는 확률변수의 분포를 나타내는 함수, 다음 조건을 만족함.
(1)
(2)
(3)
연속확률변수
의 기댓값과 분산, 표준편차:
기댓값 :
분산 :
표준편차 : 
기댓값, 분산의 성질:
(1)
,
,
(2)
,
,
(3) 확률변수
에 대하여 새로운 확률변수
를
로 정의하면 평균과 분산이 항상
과
이다. 따라서 이 확률변수
를 확률변수
의 표준화 확률변수라 한다.
21) 베르누이 분포
1회 시행의 결과가 성공과 실패로만 나오는 실험을 베르누이 실험이라고 하며 성공할 확률이 p인 베르누이 시행에서 아래를 따르는 확률변수 X의 확률분포를 X~B(1,p)라고 하며 베르누이 분포를 따른다고 말한다.
,
이때의 E(x)=p, V(X)=p(1-p)이다.
22) 이항분포
n번 베르누이 시행의 성공 확률분포이다. n=1일 경우 베르누이 분포와 같다.
한번의 시행에서 사건 A가 일어날 확률이 p, 독립적으로 반복된 시행횟수가 n일 때, 사건 A가 일어나는 횟수를 x라 하면 X의 확률분포는 아래와 같다.
(단,
)
이때의 확률변수 X가 이항분포 B(n,p)를 따른다고 하며, X~B(n,p)로 나타낸다.
E(X)=np, V(X)=np(1-p)=npq로 계산된다.
이때, 이항분포의 형태는 p,q에 의해서 결정되며 p<q이면 왼쪽으로 p>q이면 오른쪽으로 치우쳐진 형태로 그려지며, p=q인 경우 완전 대칭을 이룬다.
23) 포아송분포
단위 시간 안에 어떤 사건이 일어날 횟수를 확률변수 X라 하고 그 기댓값을
라 할 때, 그 사건이 n회 일어날 확률은
이다. 이때 E(X)=V(X)=
이다.
이항분포
에서 평균
는 일정하고,
을 한없이 크게 할 때(상대적으로
는 한없이 작아짐) 이 확률분포는 포아송 분포가 된다. 즉, 포아송 분포(Poisson distribution)는 이항분포의 극한분포(limiting distribution)이다.
(감마값을 달리 하여 포아송분포를 확률질량함수로 나타낸 것. 출처: 위키백과)
cf) 포아송 분포가 필요한 이유
10초에 0.1%의 확률로 사람 한 명이 넘어진다면, 1시간 동안 수많은 사람등리 지나갈 때 이 중 한 사람이 넘어질 확률은?
1시간은 3600초이므로 1시간 동안 넘어지는 사람 수를 확률변수 X라 할 때
X~B(360,0.001)이다.
분포로 나타내기 위해 360번 중 k번 사건이 일어날 확률을 구하면
이다.
계산하기 결코 쉽지 않다.
이처럼 n이 너무 크고, p가 너무 작은 경우에 확률분포를 근사적으로 계산하기 위해 이항분포의 극한분포인 포아송분포가 필요하다.
24) 연속확률분포
확률밀도함수를 이용해 분포를 표현할 수 있는 경우를 의미합니다. 이때 연속 확률 분포를 가지는 확률변수를 연속 확률 변수라고 합니다. 자주 사용되는 연속확률분포의 종류로는 균등분포, 정규분포, 지수분포 등이 존재합니다.
25) 균등분포
연속확률변수
가
와
사이에서 일정한 값을 취하고
일 때 X가 균등분포를 따른다고 이야기합니다. 또한 이때의 표시는 X~U(a,b)와 같이 표시합니다.
균등분포는 아래와 같은 정의되고 그려집니다.

이때 이를 기반으로 구해지는 X~U(a,b)의 누적 분포함수는 특정 지점까지 0의 값을 가지고 특정 지점부터 y값이 1이되는 지점까지 동일한 기울기를 가지는 특징이 있으며 아래와 같이 그려집니다.

또한, 기댓값과 분산은 아래의 유도과정을 통해 구해진 식으로 간단히 구할 수 있습니다.

,

26) 정규분포
확률변수 X의 확률밀도함수가
일때 X는 정규분포를 따른다고 이야기하며,
처럼 표시합니다.
이러한 확률밀도함수를 그리는 그래프를 정규분포곡선이라 하며 아래와 같이 그려집니다.
이를 기반으로 구해지는 정규분포의 확률분포함수는 아래와 같습니다.

또한 기댓값과 분산은 아래와 같이 구할 수 있습니다.
,
27) 지수분포
서로 독립적인 사건일 때, 다음 시간이 일어날 때까지의 대기 시간은 대개 지수분포를 따릅니다. 이러한 지수분포는 주로 시스템의 고장시간에 대한 모형으로 사용되며, 신뢰성 이론, 기대 시간 등의 분포에서 이용됩니다.
확률변수 X가 지수분포를 따르는 경우의 표시는
이며 아래와 같이 그려집니다.

이때의 확률분포함수는 아래와 같습니다.

또한, 기댓값과 분산은 아래와 같은 공식을 통해 도출해낼 수 있습니다.
,
28) 중심극한정리
중심극한정리는 동일한 확률분포를 가진 독립 확률변수
개가 존재할 때, 평균의 분포는
가 적당히 크다면 정규분포에 가까워진다는 정리로 평균이
이고 분산이
인모집단으로부터 추출한 크기가
인 확률표본의 표본평균
는
이 증가할수록 모집단의분포유형에 상관없이많은 경우는 근사적으로 정규분포
을 따른다는 정리이다.
29) 결합확률함수
두 이산확률변수 X, Y가 있을때, X와 Y의 결합 확률함수는 아래와 같이 정의된다.

30) 결합 확률분포
X, Y의 모든 값에 대하여
값을 나타낸 것을 결합 확률분포라 하며, 이를 표로 나타내면 아래와 같이 나타내어진다.
이때, 결합 확률분포에서 하나의 확률변수에 대해서만 고려한 확률분포를 주변확률분포라고 하며 아래와 같이 정의할 수 있다.
,
이러한 결합 확률분포는 아래의 3가지가 항상 성립한다.
(1) 모든
에 대하여
(2) 모든
에 대하여
의 합은
이다. 즉,
(3) 모든
에 대하여
31) 결합밀도함수
연속확률변수 X, Y의 결합밀도함수
는 아래와 같이 정의된다.
(1) 모든
에 대하여
이다.
(2) 모든
에 대하여
이다.
(3) 모든
에 대하여
이다.
(4)
가
평면상의 임의의 영역
에 들어갈 확률은
로 주어진다.
32) 공분산
확률변수 X, Y의 공분산은 아래와 같이 정의되며 2개의 확률변수 사이의 선형 관계를 나타내는 값이다.
33) 상관계수
확률변수 X, Y의 상관계수는 아래와 같이 정의되며, 단위의 크기에 영향을 받는 공분산을 보완하기 위해 사용된다.
34) 통계적 독립
두 사건 A, B가
을 만족할 때, 통계적 독립이라 하며, A와 B를 독립사건이라 한다.
Part 4 (빅데이터와 인공지능)
1) PCA
주성분분석(PCA)는 가장 널리 사용되는 차원 축소 기법 중 하나이며, 계산과정에서 고윳값 분해 또는 특이값분해(SVD)가 주로 사용된다.
PCA는 기존의 변수들을 일차 결합하여 서로 선형 연관성이 없는 새로운 변수, PC(주성분)를 만들어낸다. 이때, 첫 번째 주성분 PC1이 두 번째 주성분 PC2보다 원 데이터의 분포를 많이 보존한다. 이 경우에, PC1, PC2, PC3의 3개의 주성분이 원 데이터의 성질을 90%가량 보존한다면, 10%의 정보를 잃어버리더라도, 합리적 분석에 큰 무리가 가지 않는다. 때문에, 이 경우에는 시각화와 계산의 용이성을 위해서, PC1, PC2, PC3만을 택해 3차원 데이터로 차원을 축소시킬수 있다.
2) 신경망
신경망은 신경계의 기본 단위인 뉴런을 모델화 한 것이다. 인간의 뇌는 약 1000억 개의 뉴런을 가지고 있으며, 이를 통해 컴퓨터한테는 어려운 이미지 인식과 같은 활동을 원활하게 수행한다. 신경망은 순회하지 않는 그래프로 연결된 뉴런의 모음을 모델화 한 것으로, 입력층, 은닉층, 출력층으로 구성되어 있다. 입력층에서 신호를 받고, 미리 부여된 가중치에 따라 계산한 후 그 총합이 다음 은닉층 혹은 출력층으로 전파되며, 주어진 활성화 함수에 따라서, 다음 층으로 전해질 신호가 계산되게 된다.
[그림 출처]http://neuralnetworksanddeeplearning.com/chap1.html
이러한 신경망에서 영감을 얻어 만들어진 인공신경망 알고리즘의 기초개념인 퍼셉트론은 현재 입력받은 신호 x에 가중치 w를 곱하여 다음 층으로 정보를 전달합니다. 이때 가중치는 뉴런의 돌기가 신호를 전달하는 역할을 수행하게 되며, 가중치가 클수록 해당 신호의 중요도가 높다고 판단되게 됩니다. 이후, 입력 신호와 미리 부여된 가중치와의 계산 후, 그 총합이 임계점을 넘는지에 여부에 따라, 1 또는 0을 출력하며, 이는 뉴런에서 임계값 이상의 자극이 주어져야 감각이 반응하는 것과 유사하다. 이때 출력을 결정하는 함수를 활성화 함수라고 한다.
3) sigmoid 함수
주로 사용되는 활성화 함수로, 미분 가능한 실함수이며, 아래와 같이 정의되어져 있다.
이는, 임계값을 지군으로 활성화 되거나 비활성화 되는 step function 또는 Heaviside function을 근사화 한 것이다.
,
위와 같은 sigmoid함수는 미분시 아래와 같은 성질을 갖는다.

4) 오차 역전파법
이미 입력값과 정답을 알고 있는 데이터셋이 존재할 때, 우리는 데이터셋을 잘 판단하도록 신경망의 가중치를 찾아내는 것을 목표로 한다. 이때, 특정한 공식을 통해서 가중치를 계산하는 것이 아니라, 초기의 임의로 부여한 가중치를 토대로, 주어진 데이터로부터 신경망을 이용하여 얻은 예측값과 미리 알고 있던 정답 사이의 오차를 줄이는 방향으로 가중치를 갱신해 나가며, 계층 간의 각각의 연결이 오차에 영향을 주는 정도에 비례하여 오차를 전달해준다. 이의 대표적인 방법이 오차 역전파법이다.
오차 역전파법에서 가중치를 갱신하는 방법은 경사하강법을 오차함수를 최소화하는 문제에 적용하는 것과 같으며, 이때 사용될 제곱 오차는 아래와 같다.
각 가중치를 갱신하는 공식은 경사하강법으로부터 아래와 같이 구해진다.
또한, 오차가 발생했다는 것은, 입력층에서 은닉층을 거쳐 출력층으로 전파되는 과정에서, 은닉층의 오차가 영향을 주었다고 생각할 수 있으며, 가중치에 비례한 오차를 역으로 전달해주는 과정이 필요하며, 그 오차는 아래와 같이 형태로써 정의될 수 있다.
이후
공식을
에 대해 표현하여, 경사하강법을 통해 가중치를 갱신시켜나가면 된다.
(2) State more than 5 things that you know/can/find ... after you studied the first Part 1, 2,..
1. 코시슈바르츠 부등식과 내적 사이의 관계
코시슈바르츠 부등식인
가 성립함을 벡터 내적의 정의인 |X*Y| = ||X|| ||Y|| COSA (A는 X,Y가 이루는 각의 크기)를 통해서 보일 수 있다.
COSA의 값은 항상 -1과 1사이의 위치하므로 -||x|| ||Y|| <= |X*Y| <= ||X|| ||Y||의 식이 성립하고 이에 따라, |X*Y|^2 <= ||X||^2 ||Y||^2의 관계가 성립합니다.
또한 이 증명과정을 통해서 COSA가 –1이나 1의 값을 가지게 될 경우에는 등호가 성립함을 알 수 있으며 이 경우에 두 벡터 x,y의 사이에는 양의 실수배일 경우에는 0
로 음의 실수배일 경우에는 180
로 성립하게 됨을 알 수 있다.
2. Guass-Jordan 소거법
첨가행렬을 RREF로 변형하는 방법이 Guass-Jordan 소거법이며 RREF로 변형하는 과정에서 기본행 연산이 사용된다,
[1단계] 1행 부터 마지막 행 까지 차례로 내려가면서 해당 행을 n이라 할때 해당 행보다 아래에 있는 행의 n번째 열을 0으로 만들어주도록 기본행 연산을 진행한다.
[2단계] 해당 행의 0이 아닌 첫 성분이 1이 되도록 실수배를 해준다.
[3단계] 마지막행부터 1행 까지 거슬러 올라오면서 해당 행을 n이라 할때 해당 행보다 위에 있는 행의 n번째 열을 0으로 만들어주도록 기본행 연산을 진행한다.
이 과정을 통해서 Guass-Jordan 소거법을 시행할 수 있다.
3. 역행렬을 구하는 2가지 방식 사이의 시간 복잡도의 변화폭
n차의 정사각행렬의 행렬식을 구하고 수반행렬을 구하는 방식으로 구현한 내 python코드에서의 시간복잡도는 O(2^n)가량의 복잡도가 된다.
다음으로 n차의 정사각행렬의 단위행렬을 첨가하여 RREF를 구해주는 방식을 통해서 도출해내는 python코드에서의 시간복잡도는 대략 O(n*n)가량의 복잡도가 된다.
작은 차수의 행렬에서는 두가지의 방식의 차이가 거의 존재하지 않으나 행렬의 차수가 커질수록 후자의 방식이 역행렬을 구하는 속도가 빨라진다. 하지만 python코드에서의 공간복잡도와 같은 요소들도 고려한다면 상황에 맞추어 필요한 역행렬 구하기 방식을 사용하는게 효율적일 것이다.
4. Gram-schmidt 정규직교화 과정
의 기저 S로부터 직교직합 T={
}을 도출해내는 과정은 아래와 같이 이루어진다.
[1단계]
이라 한다.
[2단계]
에의해 생성되는 부분공간을
이라 할때
을 통해 y2를 구해준다.
[3단계]
에 의해 생성되는 부분공간을
이라 할 때,
을 통해 구해준다.
[4단계] n까지 마찬가지의 방법으로
를 구해준다.
이 과정을 통해 얻은 직교집합 T의 각각의 크기를 1로 하기 위해
(k=1,2,...,n)을 연산을 시행해 얻은 {
}의 집합이
의 정규직교기저가 된다.
5. QR분해를 통해 최소제곱문제를 해결하는 방법
Ax=b의 최소제곱해는
의 해이다. 이때
가 가역행렬이라면 x=(
가 해가 된다.
이후 후진대입법을 적용하면 x=
라는 유일해를 구해낼 수 있다.
6. 고유벡터를 Sage의 eigenvectors_right()를 통해 구하고 그 값을 다루는 방법
Sage의 eigenvectors_right()을 통해 고유벡터를 구하게 된다면, 고윳값, 고유벡터, 중복도를 모두 같이 return해주게 됩니다.
이 때의 각 자료는 [0]에 고유값이 [1]에 고유벡터가 [2]에 중복도가 입력되게 됩니다. 따라서 고유벡터만을 이용하고자 한다면 [1]에 접근하여 이를 행렬로 만들고 transpose하여 첨가해주는 방식으로 eigenvectors_right()에서 원하는 값을 도출해 낼 수 있었습니다.
또한 처음 eigenvectors_right()의 값을 return받아주는 장소에서 이를 감안하여 return 받는 변수들을 여러개로 설정하는 방법또한 eigenvectors_right()를 효율적으로 다루는데 도움을 줍니다.
7. 머신런닝에서의 SVD
의 A행렬을
의 U,
의
,
의
로 분해해주는 것을 특이값 분해(SVD)라 부르며 이때의 SVD를 Full SVD라고 부릅니다. 실제로는
에서 특정한 원소들을 제거하여 차원을 줄이고 이에 대응되는 U와 V의 원소도 함께 제거하여 차원을 줄인 형태로 SVD를 적용하며 이런 방식을 Truncated SVD라고 합니다. 이러한 방식을 통해서 큰 데이터를 다루는 머신런닝이나 빅데이터에서 데이터의 크기를 줄여 계산해 나가는 방향으로 SVD가 사용됩니다.
8. 최댓값 최솟값 정리가 쓰이기 위한 조건
최대값 최솟값 정리가 일변수함수에서 사용되기 위해서는 폐구간 [a,b]에서 연속일 필요가 있다.
하지만 이 정리는 일변수함수에서 확장시켜 다변수함수에서 또한 사용될 수 있다. 이 때 다변수 함수에서 최대값 최솟값 정리가 사용되기 위해서는 해당 집합을 나타내는 영역이 경계를 가지고 있어야 되고, 유한해를 가지고 있어야 됩니다. 따라서 다변수함수에서 최댓값 최솟값 정리가 사용되기 위해서는 단순히 폐집합이 아닌 유계집합을 만족해야 위 정리가 사용될 수 있습니다.
9. 일변수 함수와 다변수 함수의 뉴턴 방법의 적용
뉴턴 방법은 일변수 함수에서 진행되는 y=f(x)에 대해
단계를 반복해주는 것을 응용하여 다변수 함수에 대해서도 뉴턴 방법을 적용할 수 있다는 것을 알게 되었습니다.
이때의 뉴턴 방법을 Multivariate Newton’s Method라고 하며 일변수 함수에서의 뉴턴 방법의 장점과 단점을 모두 가지고 있게됩니다. 이때의 공식은
의 방식으로 계산되게 됩니다.
10. 경사하강법을 통해 다변수에서의 극값을 도출해내는 방법
경사하강법은 4단계로 분류되어 반복되며 진행된다.
[1단계] 초기 근사해
과 허용오차
을 준다.
[2단계]
를 계산하고
가 허용오차 이내라면 경사하강법을 멈춘다.
[3단계] line search를 수행하여 적절한 step-size
를 구한다.
[4단계]
을 진행한 후 2단계로 다시 돌아간다.
11. 이항계수의 특징
1.
(
,
),
2.
(
,
,
)
3.
(
,
.
),
(
,
)
12. 확률의 공리와 기본개념
확률의 공리:
다음을 만족하는
를 사건
의확률이라 한다.
① 표본공간
에서 임의의 사건
에 대하여
이 성립한다.
② 표본공간
에 대하여
(표본공간 전체의 확률은 1)이 성립한다.
③ 공사건
에 대하여
이 성립한다.
④
이 서로배반사건(exclusive events, 背反事件)이면 다음이 성립한다.
확률의 기본개념:
어떤 사건
사건
가 일어나지 않을 경우
사건
가 일어날 확률
사건
가 일어나지 않을 확률
13. 정규분포 곡선의 성질
(1) 형태는 종(Bell) 모양이다.
(2)
이고
을 축으로좌우 대칭이다.
(3)
에서최대값
을 갖고 그 점이최빈수(mode, 가장 많이 관측되는 수)이다.
(4)
축을점근선으로 갖는다. 단,
(5)변곡점은
이고
에서 거의
축과 접하게 된다.
(6) 곡선과 수평축(
축) 사이의면적은
이다.
(7)
에서아래로 오목하고
에서 아래로 볼록하다.
(8)
가 일정하고
가 변화할 때
가 크면 오른쪽으로,
가 작으면 왼쪽으로 이동한다.
(9)
가 일정하고
가 변화할 때
가 크면 넓고 완만한 곡선,
가 작으면 좁고 뾰족한 곡선을 이룬다.
14. 표준정규분포
확률변수 X가 정규분포
를 따를 때, 표준화 확률변수는 아래와 같이 정의된다.
이때의 표준화 확률변수는 아래와 같은 확률밀도함수를 가지게 된다.
이때의 Z를 표준정규분포를 따른다고 이야기 하며, Z~N(0,1)로 표시하며 이 경우의 기댓값과 분산은 0과 1의 값을 가지게 된다. 또한, 이때의 확률분포함수는 아래와 같이 정의된다.
이 F(z)를 표준정규분포함수라고 한다.
15. 공분산, 상관계수, 독립 사이의 규칙
X, Y가 서로 독립일 경우에 공분산을 구하는 공식인 E(XY)-
에서 E(XY)=E(X)E(Y)=
이므로, 공분산의 값은 0이 된다.
공분산의 값이 0이므로, 공분산을 분자로 가지는 상관계수의 값 또한 X, Y가 독립일경우 0이 된다.
하지만 이 역은 P(x=-1)=P(x=1)=1/4,P(x=0)=0일 때, Y=x^2와 같은 반례가 존재하므로 성립하지 않는다.
16. 공분산 행렬
행렬의 두 변수 사이의 관계를 나타내기 쉽다는 특징을 이용하여 각 데이터의 분산과 공분산을 이용해 만든 행렬이 공분산 행렬이다. 공분산 행렬은
개의 확률변수
,
,
를 하나의 벡터 X로 나타낸 후, 이 X의 공분산 행렬은 i=j인 경우 즉 주대각선의 경우에는 i번째 확률변수의 분산을, 그 외에 i와 j가 일치하지 않은 경우에는 X의 i번째 확률변수와 j번째 확률변수의 공분산으로 정의된
행렬이다.


이러한 공분산 행렬에서 고유벡터와 고윳값을 찾는 것은 데이터의 주성분을 찾는 것과 동일하다. 공분산 행렬일 경우 고윳값은 각 축에 대한 공분산의 값이 되며, 고윳값의 크기가 큰 순서대로 고유벡터를 정렬하면, 중요한 순서대로 주성분을 구한 것이 된다.
17. PC와 고윳값 분해
표본의 개수를 n, 데이터의 확률변수의 개수를 p라 할때,
의 데이터 행렬 X가 아래와 같이 있다.
이후 열 별로 각 열의 평균을 뺀 센터링된 행렬
를 아래와 같이 구한다.
이때의
공분산 행렬은 아래와 같이 계산된다.
이 공분산 행렬로 부터 얻은 정보를 최대한 보존하며 더 적은 개수의 새로운 변수를 찾는 것이 목표이다.
이제부터 확률변수 {
,
,
}의 일차결합으로 만든 
인 첫 번째 주성분의 분산이 최대가 되도록 하고자 하며,
의 분산은 적재계수
을 하나의 (열) 벡터로 나타낸
을 통하여 Var (
)
나타낼 수 있다.
의 분산을 최대로 만드는 것은 아래의 문제를 푸는 것이 되며, 라그랑주 승수법이 사용된다.
maximizeVar(
)
(
)
subject to
(
)
를 라그랑주 승수라 할 때,
,
이고,

의
의 관한 그래디언트가 0이 되어야 하므로,
이다. 따라서,
는
의 고윳값이고,
은 그에 대응하는 고유벡터가 된다. 이때 가장 큰 고윳값을
, 대응하는 고유벡터를
이라 하면, Var(
)
처럼 계산된다.
이를
를 구하는 과정으로 변환시켜본다면,
maximizeVar(
)
subject to
,
, ...,
를 구하는 것과 같으며, 마찬가지로 라그랑주 승수법을 사용하면,
는
의
번째로 큰 고윳값(
)이고,
가 그에 대응하는 고유벡터가 된다. 따라서 Var(
)
으로 계산할 수 있다.
18. truncated SVD
표본의 개수를 n, 확률변수의 개수를 p라 할때, 센터링 된
의 데이터 행렬을 X에 대해서 공분산 행렬은
가 된다.
X의 SVD가 아래와 같이 주어진다면, 이를 이용하여 PC score을 구할 수 있다.



(1)
라 하면
의 열벡터가 주축(principal axes)이 된다.
(2)
이므로,
의 열벡터들이PC score(주성분점수, principal component score)가 된다.
(3) 특이값
는
의 고윳값
와 관계식
을 만족하며,
는 대응하는 PC의 분산이 된다.
(4) 데이터를 p차원에서 k차원으로 줄이기 위해 U의 처음의 k개의 열벡터와 S의k번째 선행 주 부분행렬을 택하면
는 처음 k개의 주성분을 포함하는
행렬이 된다.


(5) (4)에서 얻은
에
,
, ... ,
에 대응되는 주축으로 이루어진 행렬
을 곱하면,
는 처음 k개의 주성분으로부터 원 데이터를 복원하도록 해주는 rank가 k인
행렬이 되며, X의 SVD에서 크기 순서대로 k개의 특이값과 그에 대응되는 U,V의처음 k개의 열벡터를 택하는 것과 같으며 이를 truncated SVD라고 한다.
4. 선형 회귀 직선에서 최소제곱해는 cost의 값을 최소로 줄이는데 사용됩니다. 우리는 global optinum이 되는 최솟값을 극점에서 구할 수 있게 되는데, 이 지점을 구하기 위해서 경사하강법 또는 Newton’s method를 사용하게 됩니다.
5. 경사하강법과 Newton’s method의 차이점에 대해서 설명할 수 있습니다. 경사하강법을 통해 우리는 함수의 gradient값이 최소가 되는 지점을 찾을 수 있게 됩니다. 알고리즘의 error을 줄이기 위해서 적절한 learning rate를 지정할 필요가 있습니다. Newton’s method를 통해서는 함숫값이 최소가 되는 지점을 탐색할 수 있습니다.
6. 중심극한정리에 대해서 설명할 수 있습니다. 중심극한정리(Central Limit Theorem, CLT)란 동일한 확률분포를 가진 독렵 확률변수 n개의 평균의 분포는 n이 적당히 크다면 정규분포에 가까워진다는 이론입니다. 중심극한정리에서 가장 중요한 점은, 표본평균이 n이 증가할수록 분포 유형에 상관없이 많은 경우 근사적으로 정규분포의 모형을 따른다는 것입니다.
7. 주성분 분석(Principal Component Analysis, PCA)은 고차원 공간의 데이터를 선형 연관성이 없는 저차원 공간으로 변환하는 기법입니다. 이 때 이 데이터는 원본 데이터의 특성을 잘 보존하는 주성분을 택하게 되는데, 그것을 위해 분산값이 큰 데이터를 택하게 됩니다. PCA를 시행하기 위히서 지금까지 배운 개념들 중 SVD, 이차형식, 공분산의 개념 등을 활용하게 됩니다.
8. 뉴런을 모델화한 인공신경망은 수많은 데이터에 기반한 기계학습을 통하여 규칙에 해당하는 행렬을 구하는데 쓰이는 모델입니다. 가중치인 행렬을 구하기 위하여 각각의 연결이 오차에 영향을 주는 정도에 비례해서 오차를 전달해 주는 것을 이용한 오차역전파법을 사용합니다. 오차역전파법의 이용은 경사하강법을 이용하여 오차함수를 최소화하는 문제에 적용한 것과 같습니다.
(3) State your meaningful Comment/Answer/Discussions in Discussion/QnA.
1. 7.6 인공 지능 개론 중 의문 (Q. 정승민 학우님)
2. 7.11 [1주차]1-3강의 질문 (Q. 임혜림 학우님)
3. 7.20 [3주차] 1차요약 (미분파트) & 뉴턴법 숫자변형 실습 (Q. 김석하 학우님)
4. 7.23 [2주차] 동형사상 질문 (Q. 양지슬 학우님)
5. 7.24 [3주차] 최댓값 최솟값의 정리 확장 질문 (Q. 박건우 학우님)
6. 7.25 [3주차] 김보겸 학우님 다변수함수에서의 Newton’s method 질문 – 추가질문 (Q. 양지슬 학우님)
7. 7.25 Final OK by SGLee [3주차, 오타] 코시슈바르트 부등식 관련 오타, -1<= x*y / ||x|| ||y|| <=1이고 x*y = ||x|| ||y|| cos세타이기 때문에 –1<=cos세타<=1이 됩니다. (Q. 김민서 학우님)
8. 8.3 [5주차] 사분위수 관련 질문 (Q.양소혜 학우님)
9. 8.4 [5주차] 확률변수 예제2 질문 (Q. 정승민 학우님)
10. 8.10 [6주차] 질문 – 공분산과 독립사건 (Q. 조주현 학우님)
11. 8.13 [5주차] 조건부 확률 질문 (Q. 위승연 학우님)
12. 8.16 [Week 7] the problem of code-practice (Q. 동나 학우님)
13. 8.17 [7주차] 오차역전파법 정리 및 질문 (Q. 임혜림 학우님)
7.8 류재헌 자기소개/수강동기
7.11 Final OK by SGLee [1주차] 가우스-조르단, QR 분해 예제 및 sage
7.18 [2주차] 정규 분포와 이차형식의 실습
7.18 [1주차] 선형 회귀 직선과 최소제곱해의 연관성
7.20 [2주차] Refinalized SVD 응용에 관한 질문 (박누리 문가은 이상구교수님 김민서 양지원 박건우)
7.20 7월 19일 미팅 후 느낀점 요약
7.21 Finalized by 김미리, 류재헌, 문가은, 이상구 교수님(이차형식 내용 정리 및 실습)
7.23 [3주차] 경사 - 기울기 하강법에 대한 질문 (Q : 문가은, A : 류재헌)
7.24 [Final OK by TA] Re-finalzed by 문가은, 김미리, 류재헌, 이상구 교수님{이차형식 내용 정리 및 실습)
7.25 [Final OK by SGLee] Finalized by 문가은, 류재헌, 김미리([3주차] - 경사-기울기 하강법에 대한 질문)
7.25 [3주차] 경사 하강법 알고리즘의 공식에 대한 질문 (Q : 류재헌 A : 이상구 교수님)
7.25 [3주차] 요약 및 방향도함수 관련 질문 (Q : 안은선 A : 류재헌)
7.25 [Final OK by SGLee] [3주차] Re-finalized by 문가은, 류재헌, 김미리, 경사 하강법에 대한 질문
7.26 [Final OK by TA] [3주차] Finlaized by 김미리, 문가은, 이혜연, 이상구교수님, 류재헌 : 이중적분에 대한 질문과 sage 코드 실습 + 파이썬 코드 추가
7.26 [Final OK by TA] [3주차] Re-finalized by 안은선, 양지슬, 류재헌, 권서영 (질문 : 3주차 요약 및 방향도함수 관련 질문) (Q : 안은선 A : 류재헌)
7.26 [4주차] 경사 기울기 하강법에서 탐색방향 d(k)에 대한 질문 (Q : 이지용 A : 류재헌)
7.26 [2주차] 특잇값 분해 질문 (Q : 양지슬 A : 류재헌)
7.26 [2주차] Gram-Schmidt 질문 (Q : 이상원 A : 류재헌)
7.26 [Final OK by SGLee] Finalized by 양지슬, 이상구교수님, 류재헌, 특이값 분해에대한 질문에 대한 답변
7.27 [Final OK by SGLee] Re-finalized by 류재헌, 양지슬, 조주현, 권서영, 유민솔 [말안장 함수의 안장점을 찾고 극대와 극소 불일치 여부를 실습
7.27 [Final OK by SGLee] Finalized by 이범수, 이지용, 류재헌, 이상구교수님([[4주차] 경사 기울기 하강법에서 탐색방향 d(k)에 대한 질문)
7.27 Final OK by SGLee Finalized by 양지슬, 이상구 교수님, 류재헌, 김태윤 [2주차 특잇값 분해 질문]
7.27 Final OK by SGLee Finalized by 류재헌, 이범수, 유민솔, 이상구 교수님 Newton’s method 에 대한 답변
7.28 Final OK by SGLee Finalized by 류재헌, 유민솔 - 경사하강법에 대한 개요와 요약문의 보충 설명
7.28 4주차 1강 미적분 gradient descent algorithm 요약 및 켤레기울기법 질문(Q : 김민서 A : 류재헌)
7.28 [Final OK by TA][3주차] Finalized by 류재헌 - sage코드를 적용한 가우스 법칙의 풀이
7.28 [Final OK by SGLee] Re-Finalized by 김미리, 문가은, 이혜연, 이상구교수님, 류재헌, 권서영(다중적분)
8.01 8주차 5차시 코사인 유사도 강의에 대해서 질문이 있습니다.(Q : 류재헌 A : 이상구 교수님) (Bonus +1)
8.04 베이즈 정리와 인공지능에서의 활용 - 베이즈 네트워크에 대하여
8.05 [Final OK by SGLee] Re-finalized by 류재헌, 김보민, 이지용, 박정현, seoyoung - 베이즈 네트워크와 Naïve-bayes 모델을 이용한 스팸 메일 분류
8.06 AI에서 확률이 갖는 의미와 기초적인 R코드의 실습
8.07 [Final OK by SGLee] Re-finalized by 류재헌, 양지슬, 안은선, 푸아송 정리와 이항분포의 sage, R 실습
8.11 [Final OK by SGLee][News : 스스로 학습하는 디지털 신인류by 최재붕 교수님]추가 조사와 이에 대한 나의 생각, 토의할 거리
8.11 [Final OK by SGLee] 열린게시판에 올린 이미지 파일이 깨지시는 분들에게 추천드리는 방법
8.11 [Final OK by SGLee] Re-finalized by 류재헌, 유민솔, 이지용, 이상구 교수님, 정현목, 김은진 - 결합분포 질문
8.12 [6주차] 중심극한정리에 관한 질문 (Q : 권서우 A : 류재헌)
8.12 [Final OK by SGLee] Re-finalized by 류재헌, 김은진, 권서우, 유민솔, 이상구 교수님, 이상원, 홍정명 - 중심극한정리의 질문과 실습
8.12 PCA에서 SVD를 이용한 계산 과정에서 질문이 있습니다. (Q : 류재헌 A : 이상구 교수님)
8.12 [Final OK by SGLee]교수님께 6주차 PBL Report에 대하여 질문하여, 아래와 같이 답을 얻었습니다. (Q : 류재헌 A : 이상구 교수님)
8.12 Re-finalized by 류재헌, 박정현, 이상구 교수님, 이지용, 이혜연 - PCA가 데이터 분석에서 갖는 의의
8.13 [Final OK by SGLee] 큰 고유값의 고유벡터를 선택하는 이유, Re-finalized by 권서영, 류재헌, 박정현, 이시원, 이상구 교수님, 이지용, 이혜연
8.18 Finalized by 류재헌, 반도체 8대 공정 개요와 데이터 마이닝을 이용한 불량률 예측 논문 review
8.18 7주차 오차역전파법 정리 및 질문 (Q : 김민서 A : 류재헌)
8.18 교수님께 기말 테스트에 대해서 질문이 있습니다. (Q : 류재헌 A : 이상구 교수님)
8.18 MATH4AI PDF 346쪽(교재 페이지 표기 339쪽)오탈자 제보 (Bonus +1)
8.18 [Final OK by SGLee] Re-finalized by 류재헌, 이지용, 인공신경망 요약과 sage 실습 오류 분석
8.19 Finalized by 류재헌, 이상구 교수님, 기말 테스트에 대한 답변
1. 전치행렬
행렬
에 대하여 A의 전치행렬(transpose)은
아고
이다.
전치행렬의 성질로는 다음 4개가 있다.
임의의 행렬을 생성하고 그것의 전치행렬을 구하는 코드
전치행렬을 직접 증명해서 성질을 확인해볼 수 있었고 이것을 코드로 직접 실습하고 응용해볼 수 있었다.
2. 그래디언트
생소했던 그래디언트라는 개념의 정의를 알고 이를 시각적으로 어떻게 받아드리면 되는지 이해할 수 있었다.
Q1. 인공지능이 입력 값에 대한 두 개의 출력이 존재하는 상황에서 작동할 수 있을까?
인공지능 개론 중 예시로 영어와 프랑스어의 번역을 예시로 들어주셨는데 이 경우 강화학습을 통한 번역은 문장과 문장 사이의 의미가 일대일대응이어야 성립하는 것 아닌가요?
예를 들어 한국어 중에서 "너 참 잘한다."라는 문장은 문맥에 따라서 상대방의 능력을 인정하는 의미와 상대방을 비꼬는 의미 두 가지로 쓰일 수 있습니다.
이 경우 "너 참 잘한다."라는 입력 값에는 두 개의 출력 값이 존재할 수 있는데 이런 상황에서도 인공지능이 유의미하게 작용할 수 있을까요?
A1. 인공지능은 위와 같은 상황에서 문맥을 파악하는 방식으로 작동할 것이라 생각한다.
제 생각에는 문맥에 따라 서로 다르게 해석되는 문장 또한 번역이 가능할 것이라고 생각합니다.
과거의 번역 방식이었던 통계 기반적인 번역 방식이라면 말씀하시는 것처럼 문맥에 의미를 파악하지 못할 것이라 생각합니다.
하지만 인공신경망과 같은 방식을 이용하여 문장의 단위로 분할한 뒤 각 단위에 대해서 가중치를 주어 계산해낸다면 문맥에서 하고자 하는 말이 무엇인지 번역해 낼 수 있을것이라 생각합니다.
Q2. REF 조건을 충족시킨 이유, 자유변수가 다른 이유, 임의의 해의 의미
Q1 같은 성분인 1이 첫번째 항 세번째와 두번째항 두번째에 있는데 이는 ref의 (2)조건을 만족시키지 못하는것 아닌가?
Q2자유변수가 왜 다른가?
Q3임의의 해를 제공한다는게 무슨뜻인가?

A2. REF와 RREF의 조건은 다르다, 자유변수는 같다, 임의의 해는 무수히 많은 해 중 하나이다.
A1 REF의 2번째 조건에서 말하는 바는 각 행에서 처음으로 나타나는 0이 아닌 선분이 1이어야한다는 점입니다. 때문에 첫번째 첫번째 열에서 가장 처음나타나는 0이 아닌 수는 1이고, 2번째, 3번째에서도 마찬가지이므로 REF의 2번째 조건을 만족한다고 할 수 있습니다. 말씀하시는 부분은 RREF일 경우 필요한 4번째 조건인 것 같습니다.
A2 말씀해주신 그림에서의 자유변수는 동일한 듯 싶습니다. 자유변수는 선행선분을 가지지 않는 열에 대응되는 미지수를 말하기 때문에 그대로 x2,x4,x5가 자유변수가 될 것 같습니다.
A3 임의의 해를 제공한다는 것은 무수히 많은 해중에서 가능한 해 하나를 제공한다는 뜻인것 같습니다.
Q3. 뉴턴 방법의 한계
뉴턴 방법으로 때로는 원하는값을 도출 해낼 수 없는 경우가 생기는데, 이러한 경우가 생기는 이유와 해결 방법이 궁금합니다.
A3. 뉴턴 방법은 초기값을 잘못 선택하거나, 함수의 연속성 미분가능성에 따라 한계가 존재한다.
뉴턴 방법은 함수가 연속이고 미분가능해야 한다는 제한사항이 존재하므로, 함수가 연속이지 않거나 미분가능하지 않은 경우에는 원하는 값이 도출 되지 않을 수 있습니다.
또한, 초기값을 잘 못 잡을 경우에도 원하는 값이 도출되지 않을 수 있습니다.
Q4. T is not bijective의 출력
질문 1. 선형변환 T가 단사이고 전사이면 n=m이 된다는 명제가 이해되지 않습니다.
질문 2. 아래 코드를 여러 번 실행해보았으나 "T is not bijective." 문구가 출력되는 경우를 찾지 못했습니다. 어떤 경우에서 해당 문구가 출력될 수 있을까요?
A4. R^n -> R^n 상에서는 T가 단사라는 말과 전사라는 말이 동치입니다.
질문2: A=[[1,0],[0,1],[0,0]]인 경우에 Ta : R^2->R^3인 경우에 T에서 is not bijective가 출력됩니다
R^n->R^n상의 선형연산자인 경우에서는 T가 단사라는 말과 T가 전사라는 말이 동치이므로 ... 전단사가 아닌 선형연산자는 모두 not bijective 입니다.
Q5. 최댓값 최솟값 정리의 확장
Q1. 연속인 다변수함수 f: R^n -> R 에 대하여서도 최댓값 최솟값 정리가 성립하나요?
Q2. 만약 그렇다면, 다변수에 대하여 '폐구간'을 어떻게 정의해야 하나요? 다음과 같은 도넛모양의 구간(경계선 포함)도 '폐구간'이라 말할 수 있나요?
A5. 컴팩트하다는 추가조건이 성립될 시 확장이 가능합니다.
저도 인터넷으로 추가적으로 찾아본 내용으로 답글을 답니다.
잘못된 점은 지적해주세요.
A1, R^n->R일때 X(R^n이고 연속이면 X가 컴팩트할 때 최대최소정리가 성립되는것 같습니다.
Q6. 다변수함수에서의 뉴턴 방법의 구현
김보겸 학우님께서 올려주신 질문, "다변수함수에서도 Newton's method를 활용할 수 있는가'를 보고 Newton's method를 sage 툴에서 직접 실습해보며 추가 질문이 생겨 글을 남겨봅니다. (댓글로 남기기에는 글이 길어 부득이하게 새 글로 남깁니다!)
지난 21일 게재한 3주차 실습, Newton(x)=x-f(x)/diff(f(x),x) 함수를 정의하여 지정된 횟수 동안 초기값 a로부터 a=Newton(a)를 반복, 근삿값을 구하는 코드를 이용하여 다변수함수에서의 Newton's method 코드를 실행해보고자 하였습니다.
교안의 편도함수 - 시각적 이해 파트를 활용하여, ①임의의 y값을 설정한 후 y==y_0(아래 첨부한 코드에서 y==-2)에 대한 평면에서 x의 근삿값 a를 구한다. ② 1에서 구한 a를 이용해 x==a에 대한 평면에서 y의 근삿값 b를 구한다. ③ 1과 2 과정을 순서대로 반복하여 f(x,y)=0의 근 혹은 근삿값 x, y를 구한다.
위와 같은 알고리즘을 생각해보았으나, 코드를 실행해본 결과 과정 1에서의 a값은 반복횟수가 증가함에 따라 0에 수렴함에도 불구하고 과정 2에서의 b값은 반복횟수가 증가해도 0에 수렴하지 않는 양상을 보이는 것을 확인할 수 있었습니다.
제가 생각한 알고리즘에서 오류가 있었다면 어떤 오류가 위와 같은 결과를 초래하였는지, 또한 개선점이 있다면 어떻게 개선하면 좋을지 조언을 구하고자 글을 남깁니다.
코드는 아래와 같습니다. (link: Sage Cell Server (sagemath.org))
var('x,y,z')
f=sin(x-y)+exp(-x*y+2)
f_x=diff(f(x,y), x)
f_y=diff(f(x,y), y)
p=implicit_plot3d(z==0, (x,-3,3), (y,-3,3), (z,-3,3), color='black')
p1=implicit_plot3d(z==f, (x,-3,3), (y,-3,3), (z,-3,3), color='blue')
p2=implicit_plot3d(y==-2, (x,-3,3), (y,-3,3), (z,-3,3), color='yellow')
(p1+p2).show()
a=1.1 #when y=2
i1=0
while i1<200:
i1=i1+1
Newton1(x,y)=x-(f(x,y)/f_x(x,y))
a=Newton1.substitute(x=a, y=2)
if f(a,2)==0:
break
print(a) #a=1.13761611998648
print(f(a,2)) #1.11022302462516e-16
b=2 #when x=1.13761611998648
i2=0
while i2<200:
i2=i2+1
Newton2(x,y)=x-f(x,y)/f_y(x,y)
b=Newton2.substitute(x=1.13761611998648, y=b)
if f(1.13761611998648, b)==0:
break
print(b)
print(f(b,2))
A6. 알고리즘의 일부 코드의 부재와 잘못된 변수의 대입의 문제
우선 첫째로 print(f(b,2))부분에서 출력하는 값은 수행하였던 연산과는 궤가 다른 방향입니다. b는 y의 값을 나타내는데 x에 대입되고 있습니다.
둘째로는 지금은 앞서 계획하신 알고리즘에서 3번 부분이 존재하지 않습니다. 이는 a의 값의 변화에 따른 b의 값의 변화를 불러오지 못한다는 의미가 됩니다. 이 과정에서도 오류가 발생한 것으로 보입니다.
수학적으로 가능한지에 대해서는 증명을 찾지 못하였으나 우선적으로 위 식에 대해서는 코드를 통해 0.01이하의 오차를 가진 해를 찾아낼 수 있었습니다.
3번 부분을 포함하여 약간의 수정을 거친 코드입니다.
var('x,y,z')
f=sin(x-y)+exp(-x*y+2)
f_x=diff(f(x,y), x)
f_y=diff(f(x,y), y)
p=implicit_plot3d(z==0, (x,-3,3), (y,-3,3), (z,-3,3), color='black')
p1=implicit_plot3d(z==f, (x,-3,3), (y,-3,3), (z,-3,3), color='blue')
p2=implicit_plot3d(y==-2, (x,-3,3), (y,-3,3), (z,-3,3), color='yellow')
(p1+p2).show()
a=1.1 #when y=2
b=2
i1=0
while f(a,b)>=0.01:
while i1<200:
i1=i1+1
Newton1(x,y)=x-(f(x,y)/f_x(x,y))
a=Newton1.substitute(x=a, y=b)
if abs(f(a,b))<0.01:
break
print(a) #a=1.13761611998648
print(f(a,b)) #1.11022302462516e-16
i2=0
while i2<200:
i2=i2+1
Newton2(x,y)=x-f(x,y)/f_y(x,y)
b=Newton2.substitute(x=a, y=b)
if abs(f(a, b))<0.01:
break
print(b)
print(f(a,b))
indent가 표시되지 않아서 while이 한번 나올때마다 tab이 한번 들어간다고 생각해주시면 감사하겠습니다. indent가 표시된 버전이 필요하시다면 아래 공개한 워크시트를 참고해주세요.
http://sage.knou.ac.kr/home/pub/553/
한가지 추가적인 문제점을 발견하였습니다.
Newton1과 Newton2를 정의하는 과정에서 x-f(x,y)/f_x(x,y)가 아닌 a-f(x,y)/f_x(x,y)가 x-f(x,y)/f_y(x,y)대신 b-f(x,y)/f_y(x,y)가 사용되어야 합니다.
Newton1과 같은 경우에는 x에 입력되는 값이 a로 동일하여 값이 산출되겠지만 Newton2같은 경우에는 x값에 1.13761199648 또는 a값이 입력되므로 뉴턴법의 식과 괴리가 발생합니다.
Q7. cos세타가 되게 하는 세타 값이 항상 존재하는 이유
코시슈바르트 부둥식을 설명하는 부분에서 -1와 1사이에 있으므로 cos 세타가 되게 하는 세타 값이 항상 존재한다고 말씀하셨습니다. 이 부분에서 어떻게 세타가 항상 존재할 수 있는지 이해가 어려워서 질문 드립니다
A7. 벡터의 내적과 관련이 있으며, 오타의 부분도 존재한다.
파란색 (-1<=||x|| ||y|| / x*y <=1) 부분이 잘못된 것 같습니다.
|x*y|<=||x|| ||y||라면 ||x|| ||y|| / x*y의 범위는 -1과 1사이가 아닌 -1이하이거나 1이상이어야 됩니다.
따라서 -1<= x*y / ||x|| ||y|| <=1이고 x*y = ||x|| ||y|| cos세타이기 때문에 -1<=cos세타<=1이 됩니다.
때문에 cos의 범위가 -1에서 1 사이이므로 항상 두 벡터 사이의 사잇각인 세타가 존재합니다.
4. 이중적분의 변수변환
평소 이중적분의 변수변환을 어려워했었는데 이를 다시 공부하면서 제대로 익힐 수 있었 다. 또한 야코비언을 활용해 코드를 작성하면서 그 과정을 알고 응용할 수 있게 되었다.
5. 경사-기울기 하강법과 뉴턴 방법의 차이점
경사-기울기 하강법과 뉴턴 방법의 차이에 대해 알고 문의게시판에서 활동하면서 이 둘의 차이점을 비교해 볼 수 있었다. 또한 두 방법의 실습코드에 대해서 정확히 알아볼 수 있었 다.
경사-기울기 하강법 코드
뉴턴 방법 코드
Q8. python의 numpy라이브러리의 사분위 함수의 차이
numpy로 사분위수를 구한 결과가 예제문제 답과 다르게 나왔습니다. 왜 그런건지 생각해봐도 답이 잘 떠오르지 않아 질문합니다!
A8. Sage의 type=2와는 다른 방식의 사분위 값 도출 방식을 사용한다.
numpy의 percentile 경우에는 값으로 유추해볼 때, 최솟값을 0%, 최댓값을 100%로 설정하고 그 사이의 값들을 (100/(n-1))%라고 생각하고 그 사이의 값을 구할때는 백분위를 기준으로 계산하는것 같습니다.예를 들어 np.percentile(grade,25)인경우 20%의 76, 40%의 83을 (76*3+83)/4를 통해 답을 구한것 같습니다.numpy 라이브러리와 관련된 정보들을 아래 사이트에서 보다 자세하게 확인하실수 있습니다.
https://numpy.org/doc/stable/reference/generated/numpy.percentile.html
Q9. 열린 구간에서의 적분이 가능한가
Q1) 앞서 배운 미적분에서 적분을 할 때는 닫힌 구간에서 적분할 수 있다고 배웠습니다. 근데 여기는 열린구간인데도 적분을 하는데 오류인가요?
A9. 확률밀도함수에서는 특정 값에서의 확률값이 0이므로, 닫힌 구간처럼 계산할 수 있다.
A1)만약 f(x)가 해당 부분에서 정의되어 있는것이라면 확률밀도함수에서는 특정 지점에서의 확률값은 0이므로 P(a<x<b)=P(a<=x<b)=P(a<x<=b)=P(a<=x<=b)이므로 P(0<x<1)=P(0<=x<=1)로 계산이 가능한 것으로 알고 있습니다.
Q10. ‘공분산과 상관계수가 0이면 두 사건은 독립이다’ 라는 명제가 성립할까?
두 개의 사건이 서로 독립이면 공분산과 상관계수가 0인데 이 역인 '공분산과 상관계수가 0이면 두 개의 사건은 서로 독립이다' 도 성립하는지 궁금합니다.
A10. 성립하지 않는다.
공분산이 0이경우에도 독립이 아닐수 있습니다.P(x=-1)=P(x=1)=1/4,P(x=0)=0일 때, Y=x^2이라면 P(y=0)=P(y=1)=1/2가 되고 Cov(x,y)=0이 됩니다. 다만 이때의 x,y는 독립이 아닙니다.아래는 참고한 사이트 출처입니다.https://datalabbit.tistory.com/15
Q11. 조건부 확률과 곱사건의 차이
간단한 질문인데 직관적인 이해가 필요해서 질문 올립니다.
곱사건은 A와 B가 동시에 발생하는 확률이고, 조건부 확률은 A가 발생했다는 전제 하에 B가 발생하는 확률이라고 한다면 결국 두 경우 모두 A와 B가 둘 다 발생했다는 것인데 어떤 점에서 차이가 생기는 건가요?
계산을 할 때 곱사건은 명확하게 눈으로 보이는데 조건부 확률은 뭔가 예시를 들어도 이해가 부족한 느낌입니다.
A11. 표본공간이 달라집니다.
확률을 구할 때의 표본공간이 달라집니다. 곱사건의 경우에는 표본공간이 그대로 유지된다면 조건부 확률의 경우에는 A로 표본공간이 축소 됩니다.
Q12. sage실습실과 교수님이 제공해주신 실습실의 sage 차이점
Hello!
My name is Dong Na. I have a question about code-practice.
More detailed information as shown below.
Source: http://matrix.skku.ac.kr/Lab-Book/Sage-Lab-Manual-1.htm
Have a good day!
Sincerely,
Dong Na
A12. 두 실습실의 python버전의 차이입니다.
I think that the homepage sage version is not the same "http://sage.knou.ac.kr" sage version. http://sage.knou.ac.kr can compile both 'print' and 'print()'. But, the homepage can't compile 'print'. So, we need to use 'print()'. If you change 'print' to 'print()', these codes are running.
print limit(f(x), x=2, dir='-') ---> print(limit(f(x),x=2,dir='-'))
The result of checking python version of homepage and 'http://sage.knou.ac.kr' website, homepage use 3.9.2 version python and website use 2.7.5 version python. Python 2 can use 'print' and 'print()', but python 3 can't use 'print'. This difference makes these errors
If you want to check python version of homepage and website, you can use 'sys' library. The code is as below.
import sys
print(sys.version)
Q13. 제곱오차에서 y_i와 y_i^의 차이점
제곱 오차에서 y_i에서 빼는 y_i^는 뭐를 뜻하는건가요?
A13. y_i는 의도했던 관측값, y_i^는 계산된 예측값의 차이입니다.
"예를 들어, 각 계층에서 입력신호 x_i(i=1,2,3...,N)를 받아 미리 부여된 가중치와 계산 후 주어진 활성화 함수로부터 출력된 값을 y_i^라 하고, 실제 정답은 y_i라 하자. 그러면 제곱 오차(squared error)는 다음과 같이 주어진다."
위 문장을 보면, y_i^는 입력신호 x_i에 대해서 출력된 값을 의미하는 것 같습니다.
문장 발췌: http://matrix.skku.ac.kr/math4ai/part4/
참고자료:
인공지능을 위한 기초수학 Basic Mathmatics for Artificial Intelligence, 이상구 with 이재화, http://matrix.skku.ac.kr/math4ai/
https://angeloyeo.github.io/2021/04/26/Poisson_distribution.html
9. PCA 과정
1. 데이터를 센터링한다.
2. 센터링된 데이터의 행렬 X의 특이값 분해(SVD)를 구한다.
3. V의 열벡터가 주축(principal axes)이 된다.
4. Z=US의 열벡터들이 원 데이터를 주축에 정사영하여 얻어진 주성분 점수(PC score)가 된 다.
5. 데이터를 p차원에서 k(<<p)차원으로 줄이기 위하여, U의 처음 k개의 열벡터(U_k)와 S의 k번째 선행 주 부분행렬(leading principal submatrix)(S_k)을 U_kS_k는 처음 k개의 PC를 포함하는 n×k 행렬이 된다.
10. 오차역전파법
신경망에서 예측값과 관측값 사이의 오차를 최소화하기 위해 사용하는 대표적인 방법
오차역전파법의 알고리즘
1. 전처리 된 데이터를 학습데이터, 검증 데이터, test data로 나눈다. 이때 training data, 검증 데이터를 80%, test data를 20%로 설정한다.
2. 학습 데이터로부터 input variable, observed value를 입력한다.
3. 인공신경망의 가중치를 임의로 입력한다. 가중치는 활성화 함수인 sigmoid function를 사용하는 것이 대표적이다.
4. 입력 층에서 학습 데이터의 신호를 받으면, 가중치와 계산 후 은닉 층으로 전파되고, 다음 층으로 전파되어 출력층에서 해당하는 결과를 얻는다.
5. 예측 값과 관측 값 사이의 오차를 계산한다.
6. 오차를 최소화하기 위해 gradient descent method를 적용하여 3단계의 가중치를 update 한다.
7. 오차가 minimized 될 때까지 4~6 과정을 반복하여 신경망을 modeling 한다.
8. 남겨둔 20%의 test data를 이용하여 만든 neural network model이 잘 작동하는지 test 한다.
Ch 2장. Participation (참여부분, 정량) 자기 평가와 본인의 Project (Term paper) 제안서 등에 대해 아래를 채우시오. (20점)
1. (20점) 본인이 그간 Q&A, 동료학생, “본"강좌 등에 기여한 내용을 간단히 서술하세요!
(1) QnA 참여 회수 <QnA에서 직접 확인하세요> : 각 주별 (토요일에서 금요일)
총 72 회 (질문: 1 회, 답변/수정/Finalize: 71회)
(1) 1주차 : 총 2 회, 2주차: 총 2 회, 3주차: 총 10 회, 4주차: 총 8 회
(2) 5주차 : 총 5 회, 6주차: 총 8 회, 7주차: 총 6 회,
총 41 회 (질문: 6 회, 답변/수정/Finalize: 35 회)
(2) 다음 밑줄 친 곳에 들어갈 내용을 고르시오.
나는 아래의 내용 중 하늘 색으로 서술된 키워드 [함수, 벡터, 행렬, 텐서, 노름, 내적, 선형연립방정식, 가우스 소거법, RREF, 첨가행렬, 정사영, 최소제곱문제, LU분해, QR 분해, SVD, 도함수, 미분, 극대, 극소, 최대, 최소, 경사하강법, 학습률, 그래디언트, 순열, 조합] 의 개념을 이해하고, 설명할 수 있으며, (간단한 것은 손으로, 복잡한 것은 Sage/R/python 등의 도구를 이용하여) 계산하여 그 의미를 설명할 수 있다.
(위 박스 안의 키워드에서 자신이 충분히 이해하고 있는 것을 표시하시면 됩니다.)
(3) 개인/동료와 같이 “본” 강좌를 학습하면서 배우거나 느낀 점은?
다양한 학과 분들을 게시판을 통해서 혹은 Office Hour시간을 통해서 만나게 되면서 각 학문에서는 어떠한 방식으로 수학을 사용하는지에 대해서 느낄 수 있었으며, 개개인 모두에게 잘하는 것이 있고, 못하는 것 또한 있다는 것을 알았습니다. 또한 이러한 장단점을 가지고 서로에게 코멘트를 달아주고 토론을 해 나가는 과정을 통해서 각자의 약점을 보완해나가며 효율적으로 실력의 향상을 이루어 낼 수 있다고 느꼈습니다. 때문에, 기존의 수능을 공부하기 위해서 타인과의 토론보다는 스스로 문제에 대해서 다시 한번 질문을 던져보고 계속해서 하나의 문제에 대해서 혼자서 고민하던 공부 방식을 고수하는 것이 아닌 타인과의 상호작용을 통한 변화가 필요하다는 것을 느꼈습니다.
또한, 여름방학이라는 각자에게 귀중한 시간을 내어 매일같이 게시판에 요약 글을 작성하시고 다른 학우분들의 질문에 대해서 계속 답변해주시는 모습에서 학우님들과 교수님의 열의를 느낄 수 있었으며, 이에 뒤처지지 않고 남은 4주간의 기간에도 다른 분들과 같은 레이스를 끝까지 이어나갈 수 있었으면 좋겠다고 다시 한번 다짐하게 되었습니다.
고등학교에서 경제학과를 목표로 진학 준비를 할 당시에는 수학에 관한 공부가 미진한 부분이 다수 존재하였고 수업에서 학습하게 되는 기초수학에 대해서도 모르는 부분과 개념이 혼란한 부분들을 다수 발견할 수 있었고, 이러한 요소들을 다른 학우분들의 요약본을 보고 그를 제 방식대로 재배열해보고 오탈자를 찾아 다시 한번 읽어보는 과정들을 통해서 수학 실력 또한 향상되고 있다고 느꼈습니다. 이렇게 다른 학우분들과 같이 학습하는 만큼 개인적으로 공부했었던 알고리즘들이나, 기존의 tensorflow를 이용하여 모델들을 만들어 보았던 경험을 보다 살려 다양한 방식으로 실습하고 다른 학우분들의 질문에 답변을 달아주면서 스스로 발전해 나갈 수 있도록 노력하겠습니다.
7주차에 해당하는 신경망과 sigmoid함수 오차 역전파법에 대해 배우고, 이후 다른 학우분들이 Finalize한 게시글을 읽으면서 추가적인 활성화 함수에 대해서 학습할 수 있었습니다. 신경망에 대한 부분을 학습하고 sigmoid외에 다른 활성화함수 relu와 python의 tensorflow 라이브러리를 이용하여 실제로 모델을 구성해볼 수 있었습니다.
7주라는 기간 동안 처음 배웠던 선형대수학의 벡터와 행렬과 관련된 내용과 그와 연관된 특이값 분해, 다변수함수의 미분 적분과 경사하강법, 확률과 통계에서의 중심극한정리, PCA와 신경망에 대해서 학습하는 기회가 되었습니다. 선형대수학을 처음 접하면서, 고등학교까지 배워왔던 수학과는 차이가 있다는 것을 느끼면서, 관련 개념들이 어렵게 다가왔습니다. 하지만, 새로운 학습법인 각자의 성취와 발전해나가는 정도에 따라 평가하는 방법을 인지하고 학습해나가면서, 성적에 대한 부담감을 덜어낼 수 있었고, 이러한 요소가 선형대수학의 기초에 대해 이해하는데 도움이 되었습니다.
또한, 많은 분들이 질의응답을 진행하시고 질문에 대한 답변이 혹은 질문에서의 문제점에 대해서 꾸준히 코멘트를 주시는 교수님의 모습 덕분에 질의응답을 진행하는 과정에서 잘못 알고 있는 부분들에 대해 발견하고 수정해나가면서 소통에 중요성에 대해서 인지하게 되었던 만큼, 새로운 학습 방식의 장점과 교수님의 수업에 대한 열정을 느낄 수 있었으며, 이러한 방식의 수업은 수학에 대한 다른 이들의 접근에 대한 어려움과 두려움 줄여줄 것이라고 생각했습니다.
더불어, 다른 분들의 글들을 Finalize하고 요약 및 정리하는 활동들을 진행하면서 다른 분들의 학습내용을 이해하는 것에 더해서, 기여 혹은 참고한 자료에 대한 출처를 표시하는 것이 매우 중요하다는 인식을 얻게 되었습니다.
마지막으로, 마지막 주 실습으로 실제 만들어진 fashion_MNIST와 tensorflow를 통해서 모델을 구축해봄으로써, 스스로 인공지능과 머신런닝과 같은 분야에 출발점에 서게 되었다는 느낌을 받게 되었습니다.
(1-4주차) 시대적으로 인공지능을 적극적으로 받아들이고 학습하는 분위기가 되었는데, 정작 인공지능이 어떻게 작동하는지에 대한 식견이 없어서 인공지능에 대해서 공부를 해야겠다고 생각했습니다. 본 강좌를 들으면서, 인공지능의 기초인 선형대수학에 대해 배우고 그것이 어떻게 코딩에 적용되는지를 학습하며, 기저에 깔려있는 원리에 대해서 알아갈 수 있었습니다. 다른 학우들이 본인의 전공에 해당하는 내용과 그에 관련된 파이썬 코드를 올려줘서, 인공지능이 다른 분야에서는 어떤 식으로 활용되는지도 감을 잡을 수 있었습니다. 오혜준 학우님이 올려주신 기계공학에서 사용되는 newton’s method를 읽고, 로봇 팔의 각도를 결정하는 부분에서 인공지능 학습이 어떻게 사용되는지 대략적인 내용을 알 수 있게 된 것이 그 예라 할 수 있겠습니다. 교수님이 본인의 전공과 본 학습을 적극적으로 결합시켜 생각하시길 원해서, 학우들의 다양한 결과물들을 학습할 기회가 있었습니다.
(5-6주차) 5-6주차에는 수학적인 개념을 이해하는 데에 더 집중하게 되었습니다. 주성분 분석을 공부하는 과정에서, 고유값, 고유벡터, svd등의 공식은 이해했지만 이것이 수학적으로, 인공지능적으로 갖는 의미를 제대로 이해하지 못했다고 판단했습니다. 교수님이 math.skku에 부가적으로 올려주신 자료와 학우들의 자료, 또한 추가적인 인터넷 자료들을 여럿 읽고 공부하고 나서야 PCA에 대한 가락이 잡히기 시작했습니다. 이지용, 박정현 학우님이 올려주신 PCA에 대한 요약을 읽으면서 공식이 어떤 순서대로 작동하는 지 파악했고, 권서영 햑우님이 제 글을 읽고 Re-finalize 해주신 글을 다시 보면서 실습에서 수행된 PCA의 기하학적 표현에 대해서 알 수 있게 되었습니다. 다른 학우들과의 지식의 공유가 주는 영향력을 다시금 느낄 수 있었습니다.
(7주차) 인공신경망의 학습 이후, 프로젝트 제안서를 실현시킬수 있는 지 선행 연구를 조사하여 가능성을 조사하기로 하였습니다. 현행 논문들에서는 PCA를 기반으로 해 한 테스트를 통과한 칩이 다른 테스트의 신뢰성 검사를 직접적으로 거치지 않아도 미리 예측하는 방법을 통해서, 테스트의 비용과 시간을 절감하는 방법을 꾀하고 여러 개의 학습 모델을 거쳐서 어떤 학습 모델이 신뢰성있는가를 따졌습니다. 이러한 논문의 방법론이 분명 비용과 시간을 절감하는데는 도움이 되겠지만, 제일 중요한 불량 칩을 조금이라도 더 선별하고자 하는 원래 판별검사의 목적과는 거리가 있는 것 같다는 생각을 하였습니다. 하지만 신뢰성 검사가 판별하고자 하는 변수가 비슷한 항목에 대해서는, 이러한 모델을 적용하는 것이 공정의 효율성을 증가키는데 도움이 될 것입니다.
Ch 3장. Self Evaluation 1. (개인 성찰 노트) (20점)
[성찰노트]
※ 다음 항목들을 고려하여 자신의 학습과정과 내용을 기록하시오.
1. 나는 지금 수행되고 있는 학습의 진행내용을 이해하고 있는가?
선형대수학 파트에서 이해하는데 어려움을 겪은 부분이 많았지만, 다른 학우분들과의 답변을 주고받는 과정을 통하여 보다 쉽게 이해할 수 있었으며, Sage코드를 보면서 어떠한 방식으로 연산이 진행되는지에 대해서 구체적으로 이해할 수 있었습니다. 또한, 미분적분학의 부분에서는 기존의 가지고 있었던 개념에 대해서 살을 붙여나가는 방식을 통해서 이해도를 높여가고 있다고 생각합니다. 다만 미분적분학 파트에 비해서 처음 접하는 개념인 선형대수학의 개념이 상대적으로 빈약하며 Sage혹은 Python코드를 구성하는 데에는 문제가 존재하지 않더라도 계속해서 공부해 이해도를 높일 필요가 있다고 느끼고 있습니다. 더불어, 선형대수학과 미분적분학의 실습 코드에 대해서 이해하는 과정에서는 학습의 진행내용에 대해서 기초수학에 관한 내용보다는 진행내용을 이해하고 있다고 확신할 수 있습니다. 마지막으로 통계학과 관련된 수학 파트는 앞선 2가지 파트에 비해서 상대적으로 저에게는 수월하게 다가왔던 것 같습니다. 고등학교 시간에 문과생이라도 배우게 되는 확률과 통계의 내용이 다수 포함되어 있었던 만큼 기본적인 기초를 가지고서 수업에 임할 수 있었습니다. 수업이 진행되어가면서 기존의 문제를 풀기 위해서 사용하였던 방식들의 명칭이나 정의와 같은 내용을 확인할 수 있었습니다. 특히 포아송 분포에 경우에 고등학교 당시 문제로 제출되는 예시는 모두 이 요건을 만족할테니 계산하라는 설명에 대해 가지고 있던 궁금증을 해결할 수 있는 정의였습니다. 덕분에 통계 부분에 대한 이해도는 상대적으로 높았다고 생각합니다.
7주차에 진행되었던 인공신경망과 활성화함수, 오차 역전파법에 대해서 인공신경망 알고리즘이 만들어지게 된 계기와 구성되어져 있는 모습, 작동하는 방식에 대해서 이해하였습니다. 또한, 활성화함수인 sigmoid가 기울기 소실이라는 문제점을 가지고 있다는 부분에 대해서 이해하게 되었으며, 은닉층과 출력층 사이에서의 오차, 은닉층과 은닉층 혹은 입력층과 은닉층 사이에서의 오차에 대해서 역으로 가중치를 갱신해 나가는 오차 역전파법에 대해서도 이해할 수 있었습니다.
2. 어떤 방법을 통해서 학습하였는가? (학습방법 및 자료)
우선적으로 책을 한번 훑어보면서 해당 주차의 학습할 내용에 대해서 키워드를 중심으로 스스로 생각해보고 교수님이 올려주신 강의를 1주차 단위로 시청하였습니다. 이후 교재를 다시 한번 읽으면서 제시되어 있는 예제를 직접 손으로 풀어보고 Sage코드 혹은 Python 등을 통해서 실습을 진행해나가면서 스스로 개념을 제대로 이해했는지 그리고 알고리즘을 제대로 이해했는지를 확인해 나가게 되었습니다. 만약 Sage코드 혹은 Python코드에서 어려움을 stackoverflow와 https://doc.sagemath.org/html/en/constructions/linear_algebra.html을 통해서 궁금증을 해결해 나가고자 하였습니다. 또한 증명에 대해서 의문이 생기는 경우에는 네이버 블로그 혹은 유튜브를 통해서 해당 증명과 관련된 영상을 시청함으로써 이해도를 높이고자 하였습니다. 이러한 과정을 거치면서 스스로 예제를 풀어보고 실습한 내용을 게시판에 글로써 1차적으로 요약을 진행하였습니다. 해당 주차가 끝나가는 시기에는 이러한 실습과 키워드를 위주로 진행했던 수업의 내용들을 하나의 파일로 만들어 다른 학우분들의 요약 내용글에 덧붙이거나 스스로 글을 작성함으로써 해당 내용에 대해서 다시한번 복습하는 시간을 가지게 되었습니다. 이후에는 해당 내용의 대해서 올라오는 질문글에 대해서 아는 내용이라면 답변을 달아드리고 모르는 내용이라면 구글링을 통해서 내용을 찾아보고 답변을 달아드리는 활동을 진행하면서 학습을 진행해나가고 있습니다.
7주차에 해당하는 내용을 학습할 때에는, 강의를 우선적으로 들은 후 다른 학우분들의 게시글과 질문들을 참고해 나가면서 학습을 진행하였습니다. sigmoid외에 추가적인 활성화 함수에 대해서는 다른 학우분들의 Finalize글들을 참고하여 학습하였습니다. numpy 등의 라이브러리의 모듈에 대한 오류나 궁금증은 해당하는 라이브러리의 모듈들에 대해 설명되어 있는 공식사이트 https://numpy.org/doc/stable/reference/generated/numpy.percentile.html등을 통해서 궁금한 점을 해결하고 학습해 나갈 수 있었습니다. 추가적으로 R언어의 경우에는 R Studio를 다운받아 직접 실행시켜보면서 학습을 진행해 나갔으며, fashion_MNIST를 통해 모델을 실제로 구성해보는 경우에는 anaconda를 통한 가상환경과 pycharm, tensorflow라이브러리, colab에 올라와있는 코드, tensorflow 듀토리얼 등을 통해서 추가적인 구현에 대해 학습을 진행해 나갈 수 있었습니다.
3. 본 강좌의 학습활동을 통하여 무엇을 배웠나?
크게 기초수학, Sage, 소통과 관련된 3가지 영역에서 배움을 얻을 수 있었습니다.
먼저 기초수학과 관련되어서는 선형대수학 파트에서 기존에 배우지 않았던, 벡터와 행렬 그리고 이들을 이용하는 다양한 연산들의 대한 지식을 배울 수 있었다. 미분적분학 파트에서도 고등학교 과정을 벗어난 내용들에 대해서 기초를 다질 수 있었으며, 정리를 찾아보면서 수학의 증명에서 사용되는 수학 기호들에 대해서도 학습할 수 있었다. 통계 파트에서는, 고등학교 당시에 정확한 내용 없이 성립한다고만 서술되어 있던 내용에 대해서 깊게 알아볼 수 있는 시간이 되었습니다.
두번째로 기존에 알지 못했던 편리한 수학 소프트웨어 Sage의 존재와 문법에 대한 이해이다. 간단한 프로그램을 만들거나 연산을 진행하는 경우에 스스로 함수를 구현하여 사용하던 예전과는 달리 많은 부분이 함수로써 구현되어 있는 Sage의 사용법을 학습하게 되었으며 이를 통해서 수학 공식을 식으로 나타내고 컴퓨터가 인식할 수 있게 하는 과정에서의 강점들을 갖출 수 있게 되었다고 생각한다.
마지막으로 다른 사람과의 소통을 통해서 학습을 해나가는 태도이다. 기존에는 발달한 인터넷을 통해서 스스로 공부가 가능하고 이가 모든 상황에서 가장 효율적이라는 착각에 빠져있었다는 것을 깨닫게 되는 계기가 되었다. 본 강좌의 학습활동을 통해서 다른 학우분들의 생각과 학습 과정을 통해서 많은 학습을 진행할 수 있다는 것을 배울 수 있었다.
7주차에 직접 모델을 구성하면서, 데이터를 분할하거나 내용을 축소시키는 등의 활동을 통해서 효율성을 높이는 과정이 매우 중요하다는 것을 배울 수 있었습니다. 또한, 현실에서의 다양한 데이터, 그리고 그 데이터들에 대한 권리 또한 매우 중요하다는 것을 배울 수 있었습니다. 모델을 직접 학습시켜 보면서, 사용하는 데이터의 개수가 늘어날 경우 기하급수적으로 시행속도가 증가하는 것을 체험할 수 있었으며, 모델을 학습시키는데 사용된 fashion_MNIST의 데이터셋 구성개수가 60,000개에 이르는 점에서 이러한 데이터를 구성하는데 들어가는 비용과 중요도가 매우 높다는 것을 인식할 수 있었습니다. 또한, 같은 데이터로 반복된 학습을 진행하는 것으로는 일정량 이상의 정확도가 달성되지 않으므로, 새로운 데이터에 대한 가치나 혹은 새로운 학습 방법의 발견의 가치가 매우 높을 것이라는 점을 배울 수 있었습니다.
또한, 실제로 R을 시행해보면서 R의 통계학적인 장점에 대해서도 학습해 나갈 수 있었으며, 새로운 학습법의 효울성과 수학의 다양한 학문에 접목가능성에 대해서 배울 수 있었습니다.
4. 다른 동료들로부터 무엇을 배웠는가?
첫째로, 당연하다고 생각했던 내용에 대해서도 확인을 하고 넘어가야한다는 생각을 가지게 되었다. 기존에는 어렵거나 의아한 증명에 대해서만 내용을 찾아보고 넘어갔지만, 다른 학우분들이 당연하다고 생각했던 내용에 남겨주신 질문들을 통해서 해당 내용에 대해서 깊게 생각해볼 기회들을 얻을 수 있었고, 이 과정에서 돌다리도 두들기고 넘어가라는 속담이 있듯이 다시 한번 자신의 지식을 확인하고 넘어갈 필요가 있다고 느꼈다.
둘째로, 학우님들의 다양한 사고방식을 엿볼 수 있었다. 똑같은 개념과 예제를 가지고서도 각자 분야가 다르신 학우님들이 각자의 전공에 대입하여 내용을 전개시켜나가는 과정을 통해서 개념의 발산을 느낄 수 있었고, 이 과정에서 다른 학우분들의 사고방식을 엿볼 수 있는 기회가 되었다고 생각한다.
자료에 대한 출처를 남기는 습관을 배울 수 있었습니다. 학우분들이 학습 자료를 추가하시는 과정에서 꼼꼼히 출처를 남기시는 부분에서 출처를 남기는 행위에 대한 중요성을 배울 수 있었습니다. 또한, 많은 학우분께서 중간고사 PBL 보고서에 대해서 발표를 진행하시는 것을 보고 학우분들의 수업에 대한 열정을 느낄 수 있었으며, 상당히 방대한 내용의 PBL보고서를 10분이라는 짧은 시간내에 발표를 하시는 모습을 보면서 발표에서의 시간을 지키는 것에 중요성에 대해서 다시 한번 인식하게 되었습니다.
5. 새롭게 배운 내용을 실제 생활에 어떻게 적용할 것인가?
빅데이터 시대가 다가오면서 생겨나는 데이터의 홍수 속에서 데이터를 효율적으로 처리하는 과정에서 벡터과 행렬, SVD와 같은 방식들을 이용하여 효과적으로 데이터를 다루는 데 사용할 수 있을 것이다. 이러한 데이터를 다루는 내용을 확실히 학습하게 된다면, 장래희망과 연관되어 있는 증권이나 채권, 펀드, 파생상품과 관련된 상품들에 대해서 추가적으로 학습을 진행하고 그들에 관한 모델을 구성해보는 과정을 통해서 실제 생활에 적용해 나갈 수 있을 것이라 생각한다. 또한, 이러한 선형대수학을 기반으로 하여 앞으로 경제학을 보다 깊게 전공해나가면서 현실세계의 복잡한 변수들의 얽힘을 보다 쉽게 표현하고 연산할 수 있을 것라고 생각했다. 예를 들어, 두 화폐 사이의 교환 비율의 변화를 예측하는 식만을 가정하더라도 두 화폐의 이자율, 변동성 지수 등의 다양한 요소를 다루어야 한다. 또한, 이러한 모델을 만드는 과정에서 다루어지는 금융공학에서는 통계와 데이터를 다루는 활동 등이 필수적으로 요구되기 때문에 이번에 배운 내용들을 토대로 향후 TARCH와 같은 금융공학 모델들에 대해서도 공부해 나가는 과정에서도 적용해 나갈 수 있을 것이라 생각한다.
PCA와 같은 내용은 현실에서의 상황에 대입하여 문제를 간략히 정리하고 해결하는데 적용해 나갈 수 있을 것이라고 생각합니다. PCA에서는 차원을 축소하는 역할을 하는 것이 PC였다면, 현실에서는 문제를 일으키는 다양한 요인들이 존재하고, 그 존재들을 PC와 같이 생각할 수 있을것 같습니다. 중요도가 높은 요소에 대해서는 남겨두고, 중요도가 높지 않은 요소에 대해서는 제거 혹은 변형하는 과정을 통해서 문제를 단순화하고 해결하는 데 사용할 수 있을 것입니다.
또한, 여태까지 배운 SVD, PCA, 신경망과 같은 내용들을 이용하여 현재 굉장히 주목받고 있는 주식에 대하여, 주식의 상승 혹은 하락의 가능성, 매수와 매도의 타이밍 제시 그리고 목표 주가를 산정해주는 모델을 구현해보고 싶습니다.
6. QnA 활동에서 자신의 역할과 기여도에 대한 평가(자신의 활동에 점수를 주고 그 이유를 적으세요.) :
- 95/100 점. -> 98/100점
- Q&A에 참여한 빈도나 다른 분들의 질문에 대답한 횟수 Finalize한 횟수, 요약글을 작성한 횟수, 토의를 진행한 횟수 등에서는 만점을 줄 수 있을만큼의 충분한 기여를 하였다고 판단하였지만 문제에 대해서 질문을 남기는 빈도가 부족하다고 생각했기 때문에 5점을 감점하였다.
- Q&A에서의 내 가장 큰 역할은 python코드나 Sage코드에 대해서 토론을 하고 코멘트를 다는 역할이었다고 생각한다. 기존에 수학보다는 코딩에 자신감을 가지고 있던 부분이 은연중에 드러났다고 생각한다. 다만, 수학과 관련된 내용에서도 답변을 드리고자 노력하였고 공식에 대해서 증명하고 요약하는 역할 또한 수행하였다고 생각한다. 마지막으로, 내용들을 요약하거나 다른 학우분들이 요약한 내용들을 보충하고 종합하여 Finalize하는 역할을 수행하였다고 생각한다. 때문에 질문을 제시하는 것을 제외한 부분에서 역할과 기여도가 만점을 줄 수 있다고 판단하였기 때문에 질문과 관련된 5점을 감하여 스스로에게 95점을 주었다.
- 여전히 질문을 진행하는 부분에서는 미진한 모습을 보였지만, 내용을 정리하고 요약하거나 확실한 내용의 답변을 다는 활동들 또한 질문에 못지 않고 중요하다고 인식하였으며, 이러한 차이점은 역할의 분배와 같은 영역이라고 생각하였습니다. 때문에, 질문 미숙에서 준 5점의 감점에 대해서 폭을 좁히게 되었습니다. 또한, 꾸준히 Q&A에 참여하고, 다른 학우분들이 작성하신 실습글이나 질문글 정리글 들을 모아 재정리하여 Finalize하는 과정을 적극적으로 참여하여 진행하였으며, 다른 학우분들이 게시글을 올려놓은 내용에 대해서 문서화하는 등의 활동에도 열심히 참여하였다고 생각합니다. 더불어, 스스로 개념에 대한 요약을 자주 진행하였으며, 개인적으로 실습을 진행함으로써 깨달음 점을 작성하였던 활동들도 긍정적으로 평가하였습니다.
7. 다른 학생에 대한 평가
본 학기보다 짧은 시간 그리고 다른 활동들이 많이 겹쳐있을 수 있는 여름방학이라는 시기에 다들 열성적으로 게시판 활동에 참여해주시고 다른 학우분의 궁금증을 해결해주시고자 하는 열정이 매우 멋있다는 느낌으로 다가왔다. 또한 학우님들마다 각자의 장점을 가지고 계셔서 어떠한 학우님은 수학과 관련된 내용을 어떠한 학우님은 코딩과 관련된 내용을 어떠한 학우님께서는 요약을 잘하시는 부분이 존재하였다고 생각한다. 김보민 학우님과 양지슬 학우님께는 python과 sage코드에 관한 토의를 진행해나가주시는 부분이 인상적이었으며, 김수호 학우님께서는 수학에 관한 질문에 관해서 열성적으로 답변을 달아주시는 모습이 개인적으로 인상깊었습니다. 또한 김수호 학우님께서 진행해주신 Sage코드 모음과 같은 활동 또한 실습을 진행하는 과정에서 매우 큰 도움이 되었다고 생각합니다. 권서영 학우님께서는 다양한 게시글에 답변을 남겨주시고 학습을 진행하시면서 학습 내용에 대해서 이해를 도우시고자 하는 모습을 확인 할 수 있었다고 생각합니다. 더불어, Office Hour에 참여하셔서 각자 궁금하신 점을 확인하시고 강의 커리큘럼을 따라가고자 하며 게시판에 스스로의 학습성과와 질문들을 올리고자 하는 모습이 매우 인상깊게 느껴졌습니다.
많은 학우분들께서 당연하게 생각하고 넘어가실 수 있는 부분에 대해서도 의문점을 가지시고 질문을 해주시면서 개념에 대해서 보다 확실하게 이해하고 넘어가고자 하는 점을 느낄 수 있었습니다. 또한, 많은 학우분들께서 Sage와 R과 같은 언어를 사용해보시지 않으셨을텐데도, 이러한 언어에 대해 빠른 시일내에 적응하시고 적극적으로 실습을 진행해나가고자 하는 모습에서 학업에 대한 매우 큰 의지와 열의를 느낄 수 있었습니다. 또한, 각자 코딩과 같은 경우에는 사이트 혹은 블로그, 알고리즘과 같은 경우에는 논문과 같은 다양한 장소에서 자료 조사를 진행해주시는 것을 보면서 추가적인 자료 조사를 진행할 때, 사이트나 기준이 되는 검색어들에 대해서 도움을 받을 수 있었습니다.
또한, 다른 학우분들에 질문글에 대해서 자신이 아는 내용에 대해서 성실히 답변해주시고, 같이 코드에서의 문제점을 찾아나가면서 하나하나 Sage코드의 문제점을 예상하고 정리하면서, 다른 학우분들과의 토론에 대해서 꾸준하게 참여하고 계신다는 인상을 받았으며, 서로에 대해서 존중해주고 계신다는 느낌을 받았습니다.
Self Evaluation 2. (개인 성찰 노트 2)
[의견]
▶ 자체평가에 따른 잘한 점
출석과 게시판 참여에 대해서 매주 지속적으로 참여하였다. 더불어 python, sage와 관련된 코드에 대한 질의응답 과정에서 적극적으로 참여하여 도움이 될 수 있는 정보와 코드들을 제공하였다고 생각한다. 이외에도 요약을 진행하면서 기초수학과 관련된 키워드 위주의 요약과 실습과 관련된 내용을 공유하면서 도움이 되는 정보를 제공하였다고 생각한다. 또한 다른 학우분들의 요약을 종합하여 하나의 파일로 엮어내어 Finalize를 하면서 학우님들의 요약과 의견 등이 수렴해나가는 과정에서 기여를 하였다는 점에서 잘하였다고 생각한다. 마지막으로, 다른 학우분들의 이야기를 존중하고, 의견에 대해서 존중하며 검토한 부분 또한 스스로 잘한점이라고 생각한다.
마지막 주차에 들어서서 이미 제공되어 있는 데이터 셋을 이용하여 스스로 모델을 만들어 본점에 대해서 스스로에게 자신감을 안겨주고, 7주차 동안 배운 내용에 대해서 정리해보는 시간을 가지게 해주었다는 점에서 매우 잘한 활동이었다고 생각합니다. 또한 다른 학우분들이 올려주신 신경망의 가중치를 갱신하는 Sage코드에 문제점에 대해서 다방면으로 수정을 시도해보고 그를 문서화하여 기록함으로써 다른 학우분들에게 새로운 가능성에 대해서 제시하고 기존에 제시해주셨던 가능성에 대해서 증명해나가는 과정을 거치며 같이 하나의 코드를 구성해나갔던 활동 또한 많은 배움을 주었기 때문에, 잘한 활동이었다고 생각한다.
▶ 자체평가에 따른 아쉬운 점
게시판에 질문을 남기는 내용에 관해서 충실히 기여하지 못했다는 아쉬운 점이 존재한다. 다음으로 1주차 실습을 진행하는 과정에서 numpy라는 라이브러리의 존재를 알았음에도 굳이 이를 함수로써 적용한 모습만을 보여줌으로써 다른 학우분들의 이해에 어려움을 더했을 것이라는 생각에 numpy의 사용모습도 같이 실습 요약하지 못했다는 아쉬운 점이 존재한다. 또한 기존에 공부했었던 tensorflow를 사용한 경사하강법 등을 소개하지 못했다는 부분에서 아쉬움을 가지고 있다. 마지막으로, 스스로 수학에 관한 내용 이해가 부족하여 질문자분들에게 한 번에 명쾌하게 설명하지 못하는 역량 또한 아쉬운 요소로 남아있다.
잘한점에서 연결되는 내용으로써, Sage코드를 고쳐나가면서 스스로 정답이 될 수 있는 코드를 제시하지 못하고 가능성만을 남겨두었던 점이 아쉬웠던것 같습니다. 또한, tensorflow를 통해서 학습을 진행해나가면서, 모델을 구성하기는 했지만 스스로 데이터를 찾아 데이터를 구성한 것이 아니라는 점에서 아쉬움이 존재합니다.
Self Evaluation 3. (개인 성찰 노트 3)
자신의 학습에 도움이 된 우수한/성실한 동 료 평 가
Ch 4장. PBL Participation/Activity Part (30점)
(4장. 학습활동 참여 부분 )
중간고사 이전까지 QnA를 통하여 논의에 참여했던 내용에 자신도 참여했던 것 모두와 기타 자신이 제공한 유의미한 정보 또는 그것에 자신이 참여한 부분을 모두 아래에 정리하시면 됩니다. (20점)
(Office Hour 관련 요약 3개, 시간 합의 1개, Week 1 관련 내용 Finalize 11개, Week 2 관련 내용 Finalize 6개, Week 3 관련 내용 Finalize 5개, Week 4 관련 내용 Finalize 2개, Week 5 관련 내용 Finalize 8개, Week 6 관련 내용 Finalize 3개)
(Week 7 관련 내용 3개)
Final OK 게시글별 주제 요약
1. Office Hour 시간 합의
2. 20210719 Office Hour 질의응답 정리 1
3. 20210719 Office Hour 질의응답 정리 2
4. 20210802 Office Hour 질의응답 정리
5. 코시-슈바르츠 부등식의 증명
6. 가우스 조던 소거법 실습
7. 행렬의 합과 곱, 스칼라 배 실습 및 문제 생성 코드
8. 역행렬 구하기 실습
9. 최소제곱해, 정규직교화, QR분해 python 실습
10. is_invertible()와 RFD 명령어에 대한 질의응답
11. Sage의 augment 명령어의 결과 저장방법에 대한 질의응답
12. REF을 구하는 명령어의 유무에 대한 질의응답
13. REF와 RREF의 차이, 자유변수와 임의의 해가 뜻하는 바에 대한 질의응답
14. 코시슈바르츠 부등식의 오타 관련
15. 1주차 요약 및 정리
16. eigenvectors_right 명령어의 return 값을 분리하는 방법에 대한 질의응답
17. 특이값 분해(SVD) 실습
18. 동형사상, 선형변환, 선형연산자에 대한 질의응답
19. 핵과 치역, 전단사의 관계 및 고유값과 고유벡터에 대한 질의응답
20. SVD의 실제 데이터의 적용 및 Sage 실습 정리
21. 2주차 요약 및 정리
22. 미분파트 정리 및 뉴턴 방법의 제약에 대한 질의응답
23. 다변수함수의 뉴턴 방법의 Sage코드 구성에 대한 질의응답
24. 최댓값 최솟값 정리의 확장에 대한 질의응답
25. 말안장 함수, 임계점, 이계도함수 판정법에 대한 정리
26. 3주차 요약 및 정리
27. 경사하강법과 뉴턴법의 차이 및 내용 정리
28. 경사하강법 구현 코드의 수정
29. 막대 도표와 히스토그램의 사용 예시와 사분위와 평균에 대한 질의응답
30. 5주차 1강에 대한 정리 및 표본평균=모평균의 증명 정리
31. 베르누이 분포, 이항 분포, 포아송 분포에 대한 정리
32. 베이즈 추정과 나이브 베이즈, 라플라스 스무딩에 대한 정리
33. 표본 분산을 n이 아닌 n-1로 나누는 이유와 베이즈 정리의 적용에 대한 정리
34. 확률밀도함수의 적분에 대한 질의응답
35. 조건부확률과 곱사건의 차이점에 대한 질의응답
36. 5주차 요약 및 정리
37. Sage, R, Python, C 언어 사이의 차이점에 대한 정리
38. 공분산과 상관계수와 독립 사이의 명제에 대한 질의응답
39. PCA의 개념, 사용 사례, 구현 코드의 정리
40. Tensorflow의 fashion_MNIST 데이터셋을 이용한 실습
41. 제곱오차에서 y_i와 y_i^의 차이에 대한 질의응답
42. 신경망에 대한 요약과 경사하강법을 구현하는 과정에서의 시행착오 정리
1. Office Hour 시간 합의
Finalized by SGLee 다음 주 월요일 12시에서 1시반 WebEx로 첫번째 면대면 Office Hour 진행하겠습니다. 주소는 그전에 공지 하고 공지 메세지로 전달 되도록 할께요^^
작성자:이상구(LEE SANGGU)작성일:7월 14일 오후 12:56
조회수:56
Finalized by SGLee 다음 주 월요일 12시에서 1시반 WebEx로 첫번째면대면 Office Hour진행하겠습니다. 주소는 그전에 공지 하고 공지 메세지로 전달 되도록 할께요^^
다음 주 월요일이나 화요일 정도에 한 90분 정도 Zoom 이나 WebEx 면대면 Office Hour 가지고 얼굴보면서 문의계시판 내용 복습과 요약 설명들 해 줄까 합니다.
WebEx 와 Zoom 중 선호하는 tool 도 알려주세요. 성대는 디폴트가WebEx 입니다.
그간의 성적도 공개하고 , 여러분들이 어떤 질문이라도 하시면 내가 답 해 줄께요^^
시간은
다음 주 월요일 또는 화요일
오전 10시, 오전 11시, 오후 2시, 오후 3시 중에 하나로
정하려고 하는데 ... 꼭 안되는 시간을 알려주세요^^
From your Prof.
11개의 댓글
이시원(2021####15)7월 14일 오후 2:42
저는 오전 10시~12시에 진행되는 글로벌 분쟁의 이해라는 비교과 프로그램을 수강하고있어, 오전 10시와 오전 11시에는 시간이 되지 않을것 같습니다...
정진웅(2021####60)7월 14일 오후 2:49
저는 3시 시간대는 불가능할 것 같습니다
이상구(LEE SANGGU)7월 14일 오후 3:09
그럼 1회 OH(면대면 미팅/질문/답변)을 일단 시범적으로 다음 주1. 월요일 12시에서 1시반 또는2. 월요일 1시에서 3시중 하나로 하면 괜찮을까요?
이시원(2021####15)7월 14일 오후 3:14
전 좋은 것 같습니다!!
이혜연(2020####81)7월 14일 오후 3:43
저는 2시부터는 참여가 힘들 것 같습니다. 혹시 참여하지 못할 경우를 대비해서 녹화본을 올려주실 수 있나요?
이상구(LEE SANGGU)7월 14일 오후 6:35
그럼 그럼 1회 OH(면대면 미팅/질문/답변)을 일단 시범적으로 다음 주1. 월요일 12시에서 1시반으로 하면 될까요?
박정현(2018####21)7월 14일 오후 7:29
저는 좋은 것 같습니다
김수호(2019####59)7월 14일 오후 8:23
저도 1번에 찬성입니다!
이지용(2021####83)7월 14일 오후 9:50
저 월요일 1시-4시에 네트워킹 개론 (비교과 프로그램) 수업이 있습니다. 저 1시 까지만 듣다가 1시부터 30분동안 휴대폰으로 교수님 수업 듣고 컴퓨터로는 비교과 프로그램 들어도 되겠습니까?
민소은(2021####60)7월 15일 오전 6:24
제 노트북에서 Zoom이 잘 작동이 되지 않아서 WebEx로 진행해주신다면 좋을 것 같습니다
이상구(LEE SANGGU)7월 15일 오후 4:26
다음 주 월요일 12시에서 1시반 WebEx로 진행하겠습니다. 해주신다면 좋을 것 같습니다 주소는 그전에 공지 하고 공지 메세지로 전달 되도록 할께요^^Good job^^
2. 20210719 Office Hour 질의응답 정리 1
[Final OK by TA] Finalized by 문가은,이시원, 김보민, 임혜림, 장지원 (Office Hour(7/19) Q&A 정리 및 보충)
작성자:임동선(2017####79)작성일:7월 24일 오후 4:55
조회수:14
7월 19일 12시부터약 1시간반동안교수님과학우분들과의 Office Hour 시간이있었습니다. 그시간동안나온 Q&A를김보민학우,이시원학우, 임혜림 학우의게시글에보충하여정리해보았습니다. 중복되는질문은한답안에정리해적었습니다.
Q1:교수님이댓글에달아주시는A, B와같은등급이중요한가요?
A1: 아닙니다. 조금 더 개선할 여지가 있을때 좀 더 다듬으라고 교수님이의견을주시는것이지 ... 성적으로직결되는요소는아닙니다. 댓글에적어놓으신 A와 B와같은내용으로별도로채점을진행하고계시진않습니다.
Q2: 교수님께서댓글을달지않은경우에는과제를하지않은것으로처리되나요?
A2: 그렇지는않습니다. 흥미로운내용이아니거나, 느낀점이포함되지않은경우 ... 다른 학생의 답글이 달린 후 ... 보고 나중에댓글을달려고남겨놓은것입니다.나중 제출시 까지 답글이 전혀 없으면 ... 뭐가 문제인디 다시 생각해 보고 윤문하여 새글로 다시 올려 놓으시면 됩니다. 그럼 교수님이 평가 전에 꼭 Finalize 해 주실 것입니다. ^^
Q3: Finalize하는방법이잘이해가되지않습니다.
A3: 하나의 이슈 는 서너명이 토론을 거치면 ... 기존의올라와있는질문들이나요약본들을보다보기좋게정리하거나,부족한내용을추가하여기여한사람들의이름을모두적어다시게시판에업로드하는방식으로진행됩니다.
Q4: Final-ok와같은문구가무엇이다른것인가요?
A4:교수님이Finalize된게시글들을읽어보시고완성되었다는생각을가지셨을경우에달아주십니다.
Q5:중간고사/기말고사등평가에대해서설명해주실수있나요?
A5:중간 기말의경우에는기존의활동에참여하지않은분들에게는시험을통해만회할기회가주어지고,
기존의참여를하셨던분들은PBL보고서를작성하여제출하거나발표하는방법이될것같습니다. 여기서 PBL보고서의형식은공지사항에나와있습니다. PBL 보고서에문의게시판의Finalize된게시글을바탕으로깨달은내용을적게될것이고
그깨달음의양과질이많을수록좋은점수를받게될것입니다. 하지만 꾸준히 참여하지 않은 학생들을 대상으로 시험을 치룰 것입니다. (난이도 높음) 기말고사 또한 PBL보고서로 대체되지만 중간고사 떄의 내용을 합해서 제출해야 할 것입니다.
Q6:문의게시판에글을매주꾸준히올리면좋은평가를받을수있다고하셨는데,혹시그기준에대해서글개수등에대한명확한기준이있을까요???
A6:양또한중요하지만질문 글에서서로주고받는질문이나논의들이질또한중요합니다. 즉, 글개수가아니라정리한내용의유익함, 오류유무등에대해서 기본적으로는 Finalized OK by SGLee 에 본인 이름이 들어있는 개수가 아마 평가에 정량적으로 반영될 주요 요소 입니다.
Q7: Sage코드를이해하고코드를짜는것도이강의의중요한목표인가요?아니면그저답을구하는도구로만여겨도되는것인가요?
A7: 맞습니다. 손으로 해도되고, 어떤 언어를 사용해도 됩니다.
그러나 인공지능에 사용되는 수학문제는 보통 손으로 다루기에는 사이즈가 크니까 어떤 도구를 사용하는 경험을 충분히 여기서 가지시기를 권합니다.
저희가해결하고자하는 각자의 전공에서의 또는 일반 사회적문제들은행렬이크고복잡한경우가많기때문에,코드를통해서접근하는과정이필요합니다.다양한 분야의 학생들이 모여있기 때문에 코드의 문법을 알거나 코드 자체를 모두 이해하는 것보단 수업에서 배운 수학 개념들을
본인이 직접 적용할 수 있고, 확신을 가지는 것이 매우 중요함.
Q8: 텐서플로우나파이토치같은딥러닝프레임워크를보면음파이토치에서는텐서를계산하는문법이따로있고,
대부분넘파이로계산을하니까지금sage가좀어색한데실습에사용되는명령어같은것을하나하나전부외울필요는없는건가요?
A8: 꼭어느언어로문제를해결해야되는지는 전혀 정해져있지않습니다.
다만코드를작성하는것이어색한분들이많기에 파이썬을 더 쉽게 업그레이한 Sage를이용하고있을뿐이며,
본인이더편한 다른 언어가있다면사용해도괜찮습니다.본강의는인문대학생등다양한분야의학생들이수강하고있습니다. 보다문법보다는학습중인내용에대해명확히이해하고있는지가중요. 수학적인부분에대해복잡한계산의단순화를위해프로그램을사용하고있을뿐명령어에대한암기등은불필요합니다.
Q9: 저도선형대수학관련과목을처음들어서제역량이부족한탓에수업에따라가기어려운상황입니다.
교수님말씀처럼다른분이질문하고답변한것에제나름대로정리하거나이해한후올려보라고하셨는데네명의이름이다채워져있더라도후에참여해도되는것인지질문하고싶습니다!
A9: 다른 학생이 요약하거나 물어보고 답을 얻은 내용을 보시고 .. 쉽게는 Finalized 된 것을 읽고 이해되면 이쁘게 마무리하시고 자신의 이름을 더해서re-Finalize 하시면 됩니다... 그것을 자신의 언어로 풀어 쓰면서 자신이 이해하시면 됩니다. re-Finalize 한 인원은 무관합니다. 모두에게 credit 주어집니다.re-Finalize10명이되든인원수에대한제한은존재하지않습니다.
Q10:요약에서행해야하는활동:
A10:교재를스크랩해오기보다는자신이이해한내용을정리하고예제를풀어보았다면예제를어떠한과정을통해서풀었는지그리고코드를사용하였다면코드를작성하기도하고,배운점을작성하는방식을통해서요약을진행하면됩니다.
Q11:강의나퀴즈를제때행하지못하였는데,이에대해만회할기회를주실수있을까요?
A11: 2틀의만회할시간을드리겠습니다.
Q12: 절대평가/ 상대평가여부에대해궁금합니다.
A12: 작년도전학기의경우절대평가로진행되어서이번에도그럴것이라말씀드렸습니다. 하지만다시한번확인해보고학생들의말씀대로상대평가가맞다면상대평가로평가를진행할것입니다. 하지만성적에너무연연하기보다는이번도전학기를통해얻어가는것에더초점을맞췄으면좋겠습니다.
Q13:기본 개념이 부족하면 LA big picture 강의를 들어보라고 하셨는데 교재에 있는 링크들이 이 강의 인가요?
A13: 2주차 강의에 대해 보충 설명한 동영상을 따로 업로드 하셨다.
Q14. Sage코드를 이해하고 코드를 짜는 것도 이 강의의 중요한 목표인가요? 아니면 그저 답을 구하는 도구로만 여겨도 되는 것인가요?
A14. 데이터가 너무 많을 경우 손으로 계산하는데 한계가 있다. 실생활에서도 코드를 통해 계산을 한다.
Q14:저도 선형대수학 관련 과목을 처음 들어서 제 역량이 부족한 탓에 수업에 따라가기 어려운 상황입니다. 교수님 말씀처럼 다른 분이 질문하고 답변한 것에 제 나름대로 정리하거나 이해한 후 올려보라고 하셨는데 네 명의 이름이 다 채워져있더라도 후에 참여해도 되는 것인지 질문하고 싶습니다 !
A14:선형대수학을처음배우거나전공이아닌경우완벽하게이해하지않아도괜찮다. 어차피평생을공부해도인공지능을이해하기어렵다. 자신의역량대로열심히참여하고질문하면좋은점수를받을수있다. 또는Finalize를보충을해서올려도되고다른사람이올린글에질문을해서글을올리거나다른사람이올린글에보충을해서Finalize를하는것도가능하다.
3. 20210719 Office Hour 질의응답 정리 2
[Final OK by TA] Finalized by 김수호, 오혜준, 김민서, 양지슬, 김태경, 이상원, 박건영, 유민솔, 정진웅, 이시원, 이혜연, 박수연, 김보민[교수님 QnA 요약]
작성자:임동선(2017####79)작성일:7월 24일 오후 5:02
조회수:22
공통되는 부분은 제거하였습니다
오혜준 학우님
l본인이 이해하는 것이 몇 개가 되는지 파악하는 것이 중요하고 모은 것이 이 과목에서 배운 것이 됩니다.이를 친구들과 함께 문의게시판을 통해 공유하면서 하면 더 많이 얻어갈 수 있을 것 같습니다.
l실습의 경우 전공의 큰 차원의 데이터를 다루어야 하기 때문에2*2보다는 더 크게,복소수라면 복소수,등 자기의 전공에 눈높이를 맞추어 실습을 하는 것이 중요하다고 하셨습니다.나중에는 입력을 바로 하지 않고100*100의 데이터파일을 바로svd등의 데이터 처리를 하지만 지금은 데이터 입력을 직접 해보면서 자신감을 갖는 것이 중요합니다.
l중간고사 기말고사의 경우finalize및 문의게시판 기여를 하지 않은 학우분들의 경우시험을 보게되고 일정 기준을 넘긴 학우분들의 경우takehome exam및pbl보고서를 제출하게 됩니다.
l좋은 질의 문의게시판 기여와 꾸준한 참여가 단순 개수의 참여보다 중요합니다.
**요약하는 법-> 강의내용을 다시요약할 필요는 없다. 무슨 개념을 배웠다는 정도만 있으면 됨. 새로 배운것은 예시로 "이개념은 어떤것이다"라고 간단하게 설명할 수 있는 말을 쓰면됨. 문제를 풀어볼땐 코딩으로 풀어보았다.
김민서 학우님
lFinallize설명다양한전공의학생들이모인만큼일괄적인기준의평가방식보다는개개인의발전을관찰할수있는평가방식이필요함.미리기초수학을듣고온학생들도있고이번학기에처음듣는학생들도있는만큼각자가깨우친것을문의게시판에기록하고답변하면서얻어간것을모아보고서형식으로제출하는것이중간고사가될것임.
l이해가잘안가더라도파이널라이즈참여를안하는것대신에그질문에대해다시자기방식으로적어본다던지,그것을다시질문하는등의방식을통해그룹토의에참여하는것이바람직함세부적으로는이해하지못하더라도큰틀에서이해할수있다면인공지능을위한기초수학은충분히준비할수있음
l도전학기는절대평가로다시체크해볼예정
양지슬 학우님
l요약, 질문, 실습 등을 따로따로 행하여 각각 업로드 하는 방식이 아님.
l해당 주차를 공부하며 생긴 질문에 공부한 내용과 실습한 코드를 동봉하여 업로드 하는 방식이 best.
l해당 과목의 Goal은 서로 질문하고 대답하며 토론하여 실력을 쌓아가는 것.
김태경 학우님께서 요약을 잘 해주셨는데, 먼저 올리신 분들과 조금씩 중복이 되어서 이름만 올렸습니다!
이상원 학우님
l2020310050 김보민 님이 모두 님께:
문의게시판에 글을 매주 꾸준히 올리면 좋은 평가를 받을 수 있다고 하셨는데, 혹시 그 기준에 대해서 글 개수 등에 대한 명확한 기준이 있을까요???
절대적 수치는 없으나 양과 질로 판단합니다.
l2021311243 김시원 님이 모두 님께:
제가 지금 사무실이라 마이크로 말씀 못드려서 죄송합니다ㅠㅠ 저희가 수강신청을 할 때
인공지능을 위한 기초수학 과목같은 경우에는 상대평가로 안내받았는데 혹시 저희 수업이 절대평가가 맞는지 확인해주실 수 있나요??
이번 학기에 변경점이 있어 상대평가인지 절대평가인지 교수님께서 추후 확인하신다합니다.
l임혜림 님이 모두 님께:
기본 개념이 부족하면 LA big picture 강의를 들어보라고 하셨는데 교재에 있는 링크들이 이 강의 인가요?
big picture 선형대수학이 알아야 할 개념이
많아 하다보면 지루해질 수 있어서
처음에 큰 그림으로 하여금 이해를 돕기
위해 설명 하신거였습니다.
l정진웅 님이 모두 님께:
Sage코드를 이해하고 코드를 짜는 것도 이 강의의 중요한 목표인가요? 아니면 그저 답을 구하는 도구로만 여겨도 되는것인가요?
언어(코드)보단 알고리즘 이해가 중요합니다.
l2020310050 김보민 님이 모두 님께:
저도 정진웅 님과 비슷한 질문인데 텐서플로우나 파이토치같은 딥러닝 프레임워크를 보면 음 파이토치에서는 텐서를 계산하는 문법이 따로 있고, 대부분 넘파이로 계산을 하니까 지금 sage가 좀 어색한데 실습에 사용되는 명령어 같은 것을 하나하나 전부 외울 필요는 없는 건가요?
여러 전공 학생들이 있기때문에 python으로
가르치는것이지 다른 사용하는 소프트웨어가
있으면 사용해도 됩니다.
lfinalized 자신이 중요하다 생각하는것, 추가로 참여하고 싶으면
4명 이상 참여해도 됩니다.
문의 게시판에 참여가 부족한 학생은 추가 시험을 볼 수도 있습니다.
l예전 보고서에 프로젝트도 있었는데
8주동안 프로젝트는 불가능할거 같아
것보다 본인 활동을 열심히 하시는게 좋습니다.
박건영 학우님
l강의나 퀴즈를 듣지 않은 사람들을 위해서 2일의 시간을 더 줘서 그 안에 해주시면 됩니다!
유민솔 학우님
lbig picture를 활용하는 방법
선형대수학의 내용이 너무 방대하기 때문에 먼저 정리를 한 것이다. 모든 걸 이해하려고 하지 말고 거기서 이해가 안가는 부분을 본 강의에서 질문하는 방식으로 채워 나갈 것.
l행렬에 대한 지식과 우리가 아는 함수에 대한 지식을 일대일 대응시키며 공부하는게 중요하다.
lQR분해가 중요한 이유 : 핸드폰이 도입된 상황에서 컴퓨터가 왜 중요한지 확신을 못 가지는 시기에 QR분해가 선형 알고리즘을 쉽게 풀 수 있음을 보여줌. 즉 컴퓨터에 생명을 불어넣어주고 투자를 이끌어 냄. 지금은 SVD가 훨씬 중요하므로 SVD위주로 공부할 것.
l정사영이 중요한 이유 : n-1차원 공간으로의 정사영은 차원이 커지면 기존의 공식이나 손풀이로 풀 수 없기 때문에 코드를 통해 구할 수 있어야 함.
정진웅 학우님
l크기가 큰 행렬을 손으로 풀기는 사실상 불가능하기 때문에
먼저 크기가 작은 행렬들로 문제를 푸는 원리를 이해한 후 코드를 활용하여 문제를 푸는 것이 바람직함
장지원 학우님
lSage코드를 이해하고 코드를 짜는 것도 이 강의의 중요한 목표인가요?
인문대, 스포츠과학 등 다양한 분야의 학생들이 모여있기 때문에 코드의 문법을 알거나 코드 자체를 모두 이해하는 것보단 수업에서 배운 수학 개념들을
본인이 직접 적용할 수 있고, 확신을 가지는 것이 매우 중요함.
이시원 학우님
lFinal-ok와 같은 문구가 무엇이 다른 것인가요?
교수님이Finalize된 게시글들을 읽어보시고 완성되었다는 생각을 가지셨을 경우에 달아주십니다.
l저도 선형대수학 관련 과목을 처음 들어서 제 역량이 부족한 탓에 수업에 따라가기 어려운 상황입니다.교수님 말씀처럼 다른 분이 질문하고 답변한 것에 제 나름대로 정리하거나 이해한 후 올려보라고 하셨는데 네 명의 이름이 다 채워져있더라도 후에 참여해도 되는 것인지 질문하고 싶습니다!
4명이 되든10명이 되든 인원수에 대한 제한은 존재하지 않습니다.
이혜연 학우님도 요약을 잘 해주셨는데, 겹치는 내용은 제거했습니다.
박수연 학우님
l교수님께서 언급하신 학습 목표
-선형대수학 : 해가 무수히 많거나 해가 없는 경우에도 최적해를 구할 수 있어야 한다.
-미적분 : 함수가 극대극소를가지고 있다면 코드를 통해 구할 수 있어야 한다. (대부분의 경우 손계산으로 구할 수 없기 때문에 코드를 통해 구한다.)
김보민 학우님의 상세한 요약도 겹치는 부분들을 제거했습니다.
김수호 학우님 (저도 정리한 요약중 중복되는 내용을 제거했습니다)
lFinal OK된 finalized document들도 한번 더 정리해서 올릴 수 있습니다!
4. 20210802 Office Hour 질의응답 정리
[Final OK by TA] Re-Finalized [8/2 OH] 면담 정리 by 김은진, 임혜림, 박정현, 김수호, 유태영, 정진웅, 양지슬, 이지용, 이시원 (20210802 OH)
작성자:이시원(2021####15)작성일:8월 2일 오후 2:12
조회수:60
[Final OK by TA] Re-Finalized [8/2 OH] 면담 정리 by 김은진, 임혜림, 박정현, 김수호, 유태영, 정진웅, 양지슬, 이지용, 이시원 (20210802 OH)
Make - UP부분
1. 교수님께서 6주차까지 총 2주 동안 (Midterm Exam을)make up 할 기회를 주셨습니다.
2. 4주차 퀴즈에서 아쉬웠던 학생들을 위하여, 앞으로 6주차에 올라올 퀴즈(날자만 처음부터 6주차로 하고, 내용은 중간고사 퀴즈와 비슷한 내용)를 기준으로(4주차 참여 점수 대신, 중간 Midterm ) 참여점수 60점을 부여하시겠다고 하셨습니다.
3. 그러므로 4주차 까지의 점수를 만회하고 싶은 학우분들은 앞으로 2주동안 공지에 올라온 다른 학우분의 보고서 (1-4주차)를 읽고 이해 안되는 부분을 질문하시고 [참여 활동 양 makeup] 밀린 것을 채우면서 5-7주차 공부를 하시면서 추가하시고, (답변이나 Finalize 또는 독창적인) 다른 학습 활동들도 충분하게 활발히 하여 [참여활동 질] ...모두 6주차 퀴즈에서 60점 만점을 받으실 수 있으시기를 바랍니다.
발표 부문
1.교수님께서 A를 받은 학생들 중에서 (동료 평가를 위하여) 발표를 시키실 예정입니다. 우수한 학생은 발표 점수를 줍니다.
2. 발표를 하는 학생은 OH시간처럼 학생들이 참석해있는 곳에서 발표를 하거나 교수님께 영상을 제출하여 다른 학생들이 시청하고 평가할 수 있도록 할 예정입니다.
게시판 변경 관련
앞으로는 문의게시판이 아닌 열린게시판을 사용할 예정입니다.
기말 PBL작성 관련
중간 PBL 작성한 내용에 이어서 작성하게 됩니다.
8/2 면담 질문
작성자 :임혜림(2021####86)작성일 : 8월 2일 오후 2:45조회수 : 11
6주차에 내는 보고서는 중간고사때 낸 보고서에 1~6주차 내용을 모두 보충해서 내는건가요?
이전다음
2개의 댓글
김은진(2020####41)8월 2일 오후 3:14
1. 6주차에는 현재 ‘중간고사 online 시험’으로 올라와 있는 것과 같은 퀴즈를 제공하려고 하신다고 하신 듯합니다. (일단 오늘 시험에 그렇게 하겠다고 하시고, 2주 후에 실제 두번째 시험을 치루면 ... 그것을 중간고사 점수로 대치해 주신다는 의미로 이해했습니다.)
2. 그것은 말씀하신 것과 같이 1-6주차 활동을 기반으로 하는 것이구요.
3. 다시 보고서를 제출하는 것은 Final PBL 기말 보고서 입니다. (6주 말이나 7주 말에 제출)
이때 중간 pbl 제출했던 것에 5-6-7 주차 내용 추가하고 ... 윤문하고 Format 다듬어서 업그레이드 된 Final PBL 을 제출하시면 ... 그 향상이 크신 분은 (Midterm PBL 보다 개선된) Final PBL 을 근거로 (Midterm PBL + Final PBL 평가를 한번에 하신다는 의미로 들었습니다.
이상구(LEE SANGGU)8월 2일 오후 3:44
맞습니다^^ 6주차에 제출한 것에 대하여 평가받고, ... 조언 받으면 ... 그 부분들 ... 조금 수정하여 그 다음 주에 Final PBL 로 제출하시면, 그것이 학기말 TakeHome 시험이 될 것입니다.
앞으로 OH일정
가능하다면 (1주일에 1회가 목표지만) 적어도2주일에 1회는 (월요일 12시 같은 시간에) 진행할 것입니다. (이번 학기에 최소한 두 번 더 진행)
Re-finalized by 박정현, 김수호, 유태영, 정진웅,양지슬,이지용 (2번째 OH)
작성자:박정현(2018####21)작성일:8월 2일 오후 2:03
조회수:11
저의 요약글과 다른 학우분들이 올려주신 요약글 정리해서 올려봅니다! 추가하실 내용이 있으시면 얼마든지 추가해주세요!
##################################################################
Re-finalized by 김수호, 유태영, 정진웅 (2번째 OH)
작성자:정진웅(2021####60)작성일:8월 2일 오후 1:42
조회수:5
다른 학우분들의 게시글에 내용을 추가 보충하여 올립니다.
-앞으로 일주일에 한번 웹미팅을 진행할 예정임
-다른 학우들의 게시글을 참고하여 makeup을 진행하는 노력을 보이면 이전의 부족함을 만회할 수 있음
-앞으로 문의게시판 대신 열린게시판을 통해 QnA를 진행하면 됨
finalized by 김수호, 유태영[2번째 OH]
작성자:김수호(2019####59)작성일:8월 2일 오후 1:29
조회수:2
교수님께서 6주차까지 총 2주 동안 make up 할 기회를 주셨습니다.
앞으로 6주차에 올라올 퀴즈(중간고사 퀴즈와 비슷한 내용)를 기준으로 참여점수를 부여하시겠다고 하셨습니다.
그러므로 4주차까지의 점수를 만회하고 싶은 학우분들은 앞으로 2주동안 공지에 올라온 다른 학우분의 보고서를 읽고 이해 안되는 부분을 질문하시고, 다른 활동들도 충분하게 활발히 하여 6주차 퀴즈에서 만점을 받으실 수 있으시기를 바랍니다.
또한, 이미 참여한 학우들도 6주차에 새로 올라오는 퀴즈에 참여하여, 기본점수 60점을 받고 시작하시기 바랍니다.
그리고 A를 받는 학생중 몇명에게 실제로 발표를 시켜볼 예정이라고 하셨습니다.
##############################################################3
[8/2 OH] 면담 정리
작성자:양지슬(2017####18)작성일:8월 2일 오후 1:31
조회수:15
1. PBL 보고서 작성 등 이해와 정리를 할 때에는 교안을 참고하고 활용하여, 많은 시간을 투자하지 않고 쉽게 이해하고 정리할 수 있도록 할 것.
2. make-up이 늦어지는 학생들은 교안과 강의 이전에 우수한 보고서를 참고하여 이해를 돕고 질문을 열린 게시판에 게시하여 학우들에게 도움을 받을 수 있도록 할 것.
3. 최종 성적은 6주차까지 활동한 내역을 바탕으로 평가.
이전
다음
1개의 댓글
이지용(2021####83)8월 2일 오후 1:57
+4. 이 수업에서는 이론증명을 요구하는 것이 아니라 개념을 이해하고 모르는 것이 있으면 질문하는 것이다. 이 개념이 왜 중요한지에 대해서도 모를 때 질문하는 것이다. 그리고 이해한 이론은 훨씬더 큰 차원의 한수에 적용할 수 있어야 한다.5.sage 코드의 경우 복잡한 코드를 짜야 하나 빠른 이해를 돕고 실습을 원활히 하기 위해서 짜놓은 코드를 이용하는 것이다.6. make up이 부족한 학생은 지난 강의에 매달리지 말고 5주차부터라도 열심히 하자. 그리고 지나간 것이라도 이해할 때까지 계속 질문하자.7. 기말 PBL리포트는 중간 PBL리포트에 이어서 작성한다.8. PBL을 작성할 때 되도록 텍스트를 사용하자.
#############################
[5주차] 2번째 WebEx Meeting 요약 by 김수호, 박정현, 유태영 ...
작성자:박정현(2018####21)작성일:8월 2일 오후 1:24
조회수:19
[5주차] 2번째 WebEx Meeting 요약 by 박정현, 유태영 ...
오늘 12시 진행된 온라인 웹엑스 미팅에서 나왔던 내용을 필기하여 요약해 보았습니다.
8월 2일 실시간 강의 make up 관련 정리
작성자:유태영(2020####63)작성일:8월 2일 오후 1:14
Week1 관련 내용
5. 코시-슈바르츠 부등식의 증명
[Final OK by TA] Finalized-by 이시원, 이지용, 김수호, 이상구 교수님[1주차] 코시 - 슈바르츠 부등식
작성자:임동선(2017####79)작성일:7월 28일 오전 11:07
조회수:3
코시 - 슈바르츠 부등식의 정리가 옳음을 벡터의 내적을 이용하여 보일 수 있을까를 고민하다가 찾은 내용을 요약합니다.
코시 - 슈바르츠 부등식 정리란 R^n의 임의이 두 벡터 X,Y 사이에서 |X*Y|^2 <= ||X||^2 ||Y||^2 가 성립한다는 정리입니다.
이 정리는 벡터 내적의 정의인 |X*Y| = ||X|| ||Y|| COSA (A는 X,Y가 이루는 각의 크기)를 통해서 성립됨을 간단히 보일 수 있었습니다.
COS인의 값은 항상 -1과 1사이의 위치하므로 -||x|| ||Y|| <= |X*Y| <= ||X|| ||Y||의 식이 성립하고 이에 따라, |X*Y|^2 <= ||X||^2 ||Y||^2의 관계가 성립합니다.
또한, 등호가 성립하는 경우 X,Y가 실수배여야 하는 것은 |COSA| = 1 이어야 되므로 A가 0, 180도 둘 중 하나의 크기여야 하므로 두 벡터가 실수배의 관계에 있는 경우에만 등호가 성립합니다.
이상구(LEE SANGGU)7월 8일 오후 10:59
잘 이해하셨습니다^^
이지용(2021####83)7월 8일 오후 11:00
저 기하를 몰라서 그러는데 왜 |XY| = ||X|| ||Y|| cosθ 인가요?
김수호(2019####59)7월 9일 오전 1:05
이지용님 시원님께서 간략히 작성하시느라 <X,Y>혹은 X*Y라는 내적표현대신 |X*Y|라고 쓰신 것 같습니다.좌변에 norm 기호를 붙이게 되면, 우변 전체에도 절대값을 붙여야하거든요
이상구(LEE SANGGU)7월 9일 오전 5:23
이지용씨,수업 시간에 코시 슈바르츠 부등식 으로부터,*** 가 영과 1 사이에 있으니,*** 와 같은 값을 갖는 theta 가 존재한다. 이 theta 를 사잇각 이라 한다.고 설명해 주었답니다.이것은 기하 몰라도 이해 하실거야요.
이상구(LEE SANGGU)7월 9일 오전 5:27
아래가 증명. 코시 - 슈바르츠 부등식 정리란 R^n의 임의이 두 벡터 X, Y 사이에서 |X*Y|^2 <= ||X||^2 ||Y||^2 가 성립한다는 정리입니다.이 정리는 벡터 내적의 정의인 |X*Y| = ||X|| ||Y|| COSA를 만족하는 A 가 존재한다. )를 통해서 성립됨을 간단히 보일 수 있었습니다.COS 인의 값은 항상 -1과 1사이의 위치하므로 -||x|| ||Y|| <=X*Y <= ||X|| ||Y||의 식이 성립하고 이에 따라, |X*Y|^2 <= ||X||^2 ||Y||^2의 관계가 성립합니다.따라서 우변의 값을 양변에 나누면-1 <= *** <= 1에서 *** = COS A 인 A 가 존재한다.이것 이 이시원씨의 증명입니다.
comment: 코시 슈바르츠 부등식이 어떤 과정을 거쳐서 증명이 되는지를 알 수 있었승며, 벡터 내적의 정의가 무엇을 의미하는지도 알 수 있었습니다. 이러한 과정을 통해서 향후 정리와 증명들을 접하였을 때, 자신감을 가지고 이해하고자 노력할 수 있게 되었습니다.
6. 가우스 조던 소거법 실습
[Final OK by TA] Finalized-by 이시원 [1주차] 가우스 조던 소거법 실습
작성자:임동선(2017####79)작성일:7월 28일 오전 11:09
조회수:4
2x+3y+z=7, x+y-z=0, 3x-2y+z=3의 3식이 연립된 방정식을 가우스 조던 소거법을 이용하여 손으로 해결해보고, sage에서 코드를 통해 실행시켜보았습니다.
이후 rref를 구하는 코드를 파이썬으로 간략하게나마 구성해보았습니다.
위 코드를 통해서 모든 행렬에서 rref를 구할 수는 없지만 n차 방정식에 대해서 n개의 식이 주어지고 해가 존재하는 경우에는 rref를 구할 수 있습니다.
이상구(LEE SANGGU)7월 12일 오전 7:36
ㅇㅋ
comment: RREF를 직접 손으로 구해보고 코딩을 통해서 구현해보는 과정에서 RREF를 구하는 계산의 순서를 확실하게 알 수 있었습니다. 또한, 언어에 기본적으로 내장되어 있는 함수들을 사용하지 않은 것과 사용하는 경우의 코드의 편의성의 차이도도 인지할 수 있었습니다. 하지만, 이러한 함수들을 직접 구현해 봄으로써, 손으로는 작은 크기만을 계산할 수 있지만, 컴퓨터와 코딩을 이용하게 된다면, 더 큰 행렬에 대해서도 RREF를 구해낼 수 있을 것이라는 자신감을 얻었습니다.
7. 행렬의 합과 곱, 스칼라 배 실습 및 문제 생성 코드
[Final OK by TA] Finalized-by 이시원 [1주차] 행렬의 합, 스칼라배, 곱 예제 풀이 및 문제 생성 코드
작성자:임동선(2017####79)작성일:7월 28일 오전 11:11
조회수:5
교재에 나와있는 행렬의 합, 스칼라배, 행렬의 곱의 예제를 풀고 행렬의 곱에 대해서 sage에서 실행해본 후 python으로 구현해보았습니다.


또한, python으로 두 행렬을 랜덤하게 만들는 코드를 구성해보았고 만들어진 문제를 통해 생성된 행렬이 위 python코드에서 돌아가는 것을 확인하면서 어떤 큰 행렬이라도 시간과 컴퓨터만 있다면 구해 낼 수 있다는 것을 확인하였습니다.
import random as rd
k = rd.randint(3,100)
n = rd.randint(3,100)
m = rd.randint(3,100)
for i in range(0,n,1):
temp = list()
for j in range(0,k,1):
x = rd.randint(-10000,10000)
temp.append(x)
matrix_first.append(temp)
for i in range(0,k,1):
temp = list()
for j in range(0,m,1):
x = rd.randint(-10000,10000)
temp.append(x)
matrix_second.append(temp)
이상구(LEE SANGGU)7월 12일 오전 7:31
ㅇㅋ
comment: python을 통해 랜덤하게 산출해 낸 행렬에서도 컴퓨터로 작성한 코드가 정상적으로 해답을 찾아내는 것을 보고 제가 손으로 풀어본 답과 이후에 그 과정을 토대로 작성한 코드가 올바른 답을 도출하고 있다는 것에 확신을 가질 수 있었습니다. 이를 통해 앞으로 python코드를 통해서 진행하는 기본적인 행렬연산에 대해서 신뢰와 확신을 가질 수 있었습니다.
8. 역행렬 구하기 실습
[Final OK by TA] Finalized-by 이시원 [1주차] 역행렬 구하기 실습
작성자:임동선(2017####79)작성일:7월 28일 오전 11:17
조회수:9
X=[[1,2,-4],[2,1,3],[0,5,7]]에 대해서 2가지 방식으로 손으로 문제를 해결해보고 방식을 바탕으로 python으로 코딩하여 역행렬이 존재한다면 몇 차원의 행렬이라도 계산해낼 수 있는 코드를 구성해보았습니다.
1)determinant와 여인수행렬을 구하여 값을 도출해보았고, 2)guass_jordan방식을 통한 역행렬 도출방식을 통해 도출해보았습니다.

위 파이썬 코드가 gauss-jordan을 이용한 풀이이며 아래 코드가 determinant를 구하는 풀이입니다.
이러한 방식이 아니더라도 python의 numpy를 통해서 det()와 같은 명령어를 통해서 간단하게 값을 도출해낼수도 있습니다.
이상구(LEE SANGGU)7월 11일 오전 3:17
Good job.
comment: 역행렬을 구하는 방법이 2가지가 존재한다는 것을 알 수 있었습니다. 하지만, 이 2가지의 방법이 가지고 있는 시간복잡도가 매우 차이가 난다는 것을 알 수 있었고, 컴퓨터를 이용하여 계산을 진행하더라도 가능한 한 시간복잡도를 줄이고 데이터 처리 시간을 줄여주는 것이 좋다고 생각하게 해주었습니다. 이를 통해 구해지는 값들이 분수를 구현하지 않고 구현된 코드에서는 값의 미세한 오차가 발생할 수 있다는 점 또한 확인하게 되면서, 내장된 라이브러리 함수를 사용하고자 하는 이유에 대해서도 알 수 있었습니다. 앞으로는 numpy함수의 내장된 함수나 Sage코드를 통해서 그리고 작은 차원의 행렬이라면 손으로도 역행렬을 구하는 과정을 수행할 수 있을 것이라는 확신을 가질 수 있었습니다.
9. 최소제곱해, 정규직교화, QR분해 python 실습
[Final OK by TA] Finalized-by 이시원 [1주차] 최소제곱해, 정규직교화, QR분해 python을 통한 실습
작성자:임동선(2017####79)작성일:7월 28일 오전 11:19
조회수:3
앞서서 구현해놓았던 행렬 관련 함수들을 이용해서 최소제곱해, 정규직교화, QR분해를 구하는 함수를 python으로 만들고 예시 문제를 해결했습니다.
def reverse(metrix):
temp = []
for i in range(len(metrix[0])):
temp_list = list()
for j in range(len(metrix)):
temp_list.append(metrix[j][i])
temp.append(temp_list)
return temp
def determinant(matrix, total=0):
indices = list(range(len(matrix)))
if len(matrix)==2 and len(matrix[0])==2:
val = matrix[0][0]*matrix[1][1]-matrix[0][1]*matrix[1][0]
return val
for i in indices:
temp = matrix[1:]
lenght = len(temp)
for j in range(lenght):
temp[j] = temp[j][0:i] + temp[j][i+1:]
sign = (-1)**(i%2)
alpha = determinant(temp)
total += sign*matrix[0][i]*alpha
return total
def minor(matrix):
matrix = reverse(matrix)
Answer = list()
for i in range(len(matrix)):
Answer_list = list()
for j in range(len(matrix[0])):
temp = list()
for k in range(len(matrix)):
temp_list = list()
for l in range(len(matrix[0])):
if i!=k and j!=l:
temp_list.append(matrix[k][l])
if k!=i:
temp.append(temp_list)
print(temp)
x = determinant(temp)
Answer_list.append(x)
Answer.append(Answer_list)
return Answer
def reverse_gauss(matrix):
row = len(matrix)
col = len(matrix[0])
reverse = list()
reverse_mod = list()
for i in range(row):
temp = list()
for j in range(col):
if i==j:
temp.append(1)
else:
temp.append(0)
reverse.append(temp)
reverse_mod.append(temp)
for i in range(row):
for j in range(i+1,row,1):
if matrix[i][i]!=0:
alpha = matrix[j][i]/matrix[i][i]
for k in range(0,col,1):
matrix[j][k] = matrix[j][k] - matrix[i][k]*alpha
reverse[j][k] = reverse[j][k] - reverse[i][k]*alpha
alpha = matrix[row-1][row-1]
for i in range(col):
matrix[row-1][i] = matrix[row-1][i]/alpha
reverse[row-1][i] = reverse[row-1][i]/alpha
for i in range(row-1,-1,-1):
for j in range(i-1,-1,-1):
if matrix[i][i]!=0:
alpha = matrix[j][i]/matrix[i][i]
for k in range(col):
matrix[j][k] = matrix[j][k] - matrix[i][k]*alpha
reverse[j][k] = reverse[j][k] - reverse[i][k]*alpha
alpha = matrix[i-1][i-1]
for j in range(col):
matrix[i-1][j] = matrix[i-1][j]/alpha
reverse[i-1][j] = reverse[i-1][j]/alpha
for i in range(row):
alpha = matrix[i][i]
for j in range(col):
matrix[i][j] = matrix[i][j]/alpha
reverse[i][j] = reverse[i][j]/alpha
return reverse
def product(matrix_first,matrix_second,type=False):
row_first = len(matrix_first)
row_second = len(matrix_second)
col_first = len(matrix_first[0])
col_second = len(matrix_second[0])
if col_first != row_second:
print("Wrong!!!")
return 0
Answer = list()
for i in range(0,row_first,1):
temp = list()
for j in range(0,col_second,1):
x = 0
for k in range(0,col_first,1):
x += matrix_first[i][k]*matrix_second[k][j]
temp.append(x)
Answer.append(temp)
return Answer
def rref(matrix):
row = len(matrix)
col = len(matrix[0])
for i in range(row):
for j in range(i+1,len(matrix),1):
alpha = matrix[j][i]/matrix[i][i]
for k in range(i,col,1):
matrix[j][k] = matrix[j][k] - matrix[i][k]*alpha
alpha = matrix[row-1][row-1]
for i in range(col):
matrix[row-1][i] = matrix[row-1][i]/alpha
for i in range(row-1,-1,-1):
for j in range(i-1,-1,-1):
alpha = matrix[j][i]/matrix[i][i]
for k in range(col):
matrix[j][k] = matrix[j][k] - matrix[i][k]*alpha
alpha = matrix[i-1][i-1]
for j in range(col):
matrix[i-1][j] = matrix[i-1][j]/alpha
for i in range(row):
alpha = matrix[i][i]
for j in range(col):
matrix[i][j] = matrix[i][j]/alpha
return matrix
def least_square_solution(matrix_A,matrix_B):
matrix_AT = reverse(matrix_A)
print(matrix_AT)
first = product(matrix_AT,matrix_A)
print(first)
first = reverse_gauss(first)
print(first)
second = product(first,matrix_AT)
print(second)
answer = product(second,matrix_B)
return answer
def projection(matrix_A,matrix_B):
norm = 0
for i in range(len(matrix_B)):
norm += (matrix_B[i]*matrix_B[i])
#norm = norm**0.5
x = 0
for i in range(len(matrix_A)):
x +=matrix_A[i]*matrix_B[i]
return x/norm
def orthonormal(matrix):
matrix_AT = matrix[:]
matrix = reverse(matrix)
matrix_Y = list()
x = list()
for i in range(len(matrix)):
matrix_Y.append(matrix[i])
x.append(matrix[i])
for j in range(i-1,-1,-1):
alpha = projection(matrix[i],matrix_Y[j])
for k in range(len(matrix_Y[j])):
matrix_Y[i][k] -= matrix_Y[j][k]*alpha
for i in range(len(matrix)):
norm = 0
for j in range(len(matrix_Y[i])):
norm += matrix_Y[i][j]*matrix_Y[i][j]
norm = norm**0.5
for j in range(len(matrix_Y[i])):
matrix_Y[i][j] /= norm
#Answer = product(matrix_Y,matrix_AT)
return matrix_Y
def QR(matrix):
first = orthonormal(matrix)
Answer = product(first,matrix)
return Answer
matrix_A = [[1,0,0],[1,1,0],[1,1,1]]
'''while True:
x,y=map(int,input().split())#단 -1 -1을 입력했을시에 입력이 끝나게 설정해둠
if x==-1 and y==-1:
break
matrix_A.append([1,x])
matrix_B.append([y])
'''
#Answer = least_square_solution(matrix_A,matrix_B)
Answer = QR(matrix_A)
print(Answer)
이상구(LEE SANGGU)7월 12일 오전 7:25
Good
comment: 앞서서 구현해 놓았던 함수들을 이용하여 문제를 해결해 나가면서, 수학에서도 기초를 다지고 연산의 능력이 뒷바침되게 된다면 보다 복잡한 상황과 문제에 대해서도 해결해 나갈 수 있을 것이라는 자신감을 가져다 주었으며, 이러한 기존의 행렬에 대한 이해들이 QR분해와 최소제곱해를 구현해 내는데 도움이 되었다고 확신합니다.
10. is_invertible()와 RFD 명령어에 대한 질의응답
Final OK by SGLee [1주차] 행렬식과 수반행렬을 이용하여 역행렬 구하기 실습 및 질문 과 답 , A=matrix(RDF, [[-1, -2, 3], [2, 1, -4], [-3, 3, -2]]) A.is_invertible()
작성자:김미리(2020####35)작성일:7월 11일 오후 5:49
조회수:38
Final OK by SGLee [1주차] 행렬식과 수반행렬을 이용하여 역행렬 구하기 실습 및 질문 과 답 ,
A=matrix(RDF, [[-1, -2, 3], [2, 1, -4], [-3, 3, -2]])
A.is_invertible()
행렬식과 수반행렬을 이용하여 행렬 A의 역행렬을 구해보았습니다.
우선 행렬식을 구하고, 수반행렬을 구했습니다.
이때 수반행렬은 A.adjoint()로 구할 수 있었습니다.수반행렬은 정사각행렬 A=[
]의 성분
에 대한 여인자를
라 할 때, 행렬 [
]의 전치행렬(transpose)을 뜻합니다.
이후 A가 가역일 때 역행렬을 구하는 공식에 따라 계산해주면 최종적인 역행렬을 구할 수 있었습니다.
이때 생긴 의문은, 행렬 A의 가역여부를 확인했을 때 False가 나온다는 점이었습니다.
비가역행렬임에도 위 공식을 통해 역행렬을 구할 수 있는 것인지궁금합니다!
4개의 댓글
이시원(2021####15)7월 11일 오후 6:51
det=-15가 나오고 있고 역함수가 구해지는 상황으로 봐서 is_invertible()에서 잘못 판단하는 상황이 있는것 같습니다...
김수호(2019####59)7월 11일 오후 8:06
A가 비가역이라면, 비가역행렬=행렬식:0 이기 때문에, 1/det(A)를 정의할 수가 없어 위의 식을 사용할 수 없습니다.현재 행렬A의 행렬식이 0이 아닌 -15기 때문에 무조건 가역행렬인데 false가 나오는 이유가 궁금하네요
이상구(LEE SANGGU)7월 12일 오전 7:23
지금은 자연수 상에서 연산 하니까 ... 분수 를 가진 역행렬은 없다고 답을 주는 것이고 ..실수상의 연산 하라고 해주셔야 합니다.A=matrix(QQ, [[0, 0, -2], [1, 2, 1], [1, 0, 3]])A.eigenvalues() # 고유값 구하기또는A=matrix(RDF, [[0, 0, -2], [1, 2, 1], [1, 0, 3]])A.eigenvalues() # 고유값 구하기
이상구(LEE SANGGU)7월 12일 오전 7:24
RDF 검색해서 명령어 한 줄 제일 앞에 추가 하시면 됩니다예.A=matrix(RDF, [[-1, -2, 3], [2, 1, -4], [-3, 3, -2]])A.is_invertible()그럼 답은 True 로 나옵니다.
comment: 코드가 제대로 시행되지 않거나 값의 오류가 있는 경우에는 코드에서 지정해둔 자료형의 오류가 있을 수 있으며, Sage에서는 double, int, string과 같은 자료형 외에도 QQ, RDF 등의 다양한 명령어를 통해서 자료형을 지정해 줄 수 있다는 사실을 알 수 있었습니다.
11. Sage의 augment 명령어의 결과 저장방법에 대한 질의응답
Final OK by SGLee [1주차] 1주차에 쓰인 코드 정리하던 중 질문 과 답
작성자:이상원(2016####99)작성일:7월 11일 오후 6:05
조회수:51
교수님께서 3차 행렬로 개념이해 한뒤 7차 행렬로 적용 시켜보라고 하셔서 처음부터 하나씩 적용시켜보던 중 rref를 구하는 과정에서
질문이 있어 드립니다.
언뜻 보기에 절대 rref가 절대 Identity 행렬로 나올 수가 없는데 저렇게 나옵니다. 행렬의 변수들을 random하게 입력했음에도 불구하고 저렇게 나오길래 우연인 줄 알았습니다만 어느 수준 이상으로는 변수를 바꿔도 계속 I가 나옵니다. 파이썬 에러의 표현인지 제 코드에 뭔가 문제가 있는지 궁금합니다,
A = matrix([[1, 2, 3, 4, 5, 6, 7], [2, 3, 4, 9, 6, 7, 8], [3, -14, 15, 6, 7, 1, 9], [4, 42, 6, 7, 8, 9, 10], [12, 6, 15, 8, 9, 10, 11], [6, 7, 8, 3, 10, 11,12], [7, 8, 9, 16, 11, 12, 16]]) # 7x7 행렬 입력
b = vector([9, 1, 0, 3, 6, 10, 14]) # 상수항 벡터 입력
print "A="
print A
print ""
print "A aug="
print(A.augment(b)) # 첨가행렬
print ""
print("RREF(A) =")
print(A.rref())
이시원(2021####15)7월 11일 오후 6:19
A.rref()부분이 A.augment(b).rref()로 바뀌어야 될 것 같습니다.A,augment(b)라는 명령어가 첨가행렬을 구해주기는 하지만 A의 값 자체를 변화시키지는 않는듯합니다.하여 위에처럼 A,augment(b).rref()를 사용하셔도 좋고 A = A.augment(b)를 하신 이후 A.rref()를 사용하셔도 좋을 것 같습니다.
김수호(2019####59)7월 11일 오후 8:02
시원님 말씀처럼 A의 첨가행렬의 RREF를 구하는게 목적이시라면 A.augment(b).rref()를 사용하시면 됩니다.그리고 행렬공간의 원소는 무한이기 때문에 행렬의 rref가 계속 I가 나오는 것은 이상한 일이 아닙니다.의도적으로 일차독립이 아닌 벡터들을 넣었을때도 rref가 I가 나오나요???그게 아니라면 우연의 일치라고 보시면 될 것 같아요.
박건우(2020####41)7월 11일 오후 10:17
Sage 실습 경험상 Random Matrix를 생성했을 때, 가역행렬이 생성되는 경우가 비가역행렬이 생성되는 경우보다 압도적으로 많았습니다.이것은 행렬의 Determinant 값이 정확하게 0이 되는 경우보다 0이 아닌 값을 가질 확률이 더 크다는 느낌으로 이해해보면 좋을 것 같습니다.위의 김수호 학우님이 말씀하신 것처럼 비가역이 자명한 행렬, 예를 들면[1, 1, 1][1, 2, 3][0, 0, 0]과 같이 한 행 (또는 열)이 통채로 영벡터인 행렬을 사용하여 확인해보심이 어떨까 합니다.
이상구(LEE SANGGU)7월 12일 오전 7:22
시원님 말씀처럼 A의 첨가행렬의 RREF를 구하는게 목적이시라면A.rref() 명령어를 사용하시면 안됩니다.A.augment(b).rref()를 사용하시면 됩니다.()그리고 플로팅에러 문제 피하고 자연수의 분수가 자연수 안에는 존재하지 않는 것을 피하시려면, 그래서 실수상에서의 연산을 하시려면 ... 교재 뒤 부분 명령어 RDF 검색해 보고 RFD 로 실수 상에서 연산을 하도록 한 줄 명령어를 보태주세요.)
comment: 컴퓨터는 명령하지 않은 일을 하지 못하며 우리가 컴퓨터에게 지시하고 있다고 생각하는 것과 컴퓨터에서 이해한 명령은 다를 수 있다는 것을 알 수 있었습니다. 또한 가역행렬 여부를 판단하는 과정에서 determinant의 중요성에 대해서도 인식할 수 있었습니다.
12. REF을 구하는 명령어의 유무에 대한 질의응답
Final OK by SGLee [1주차 요약: ~가우스-조던 소거법] 김수민+김은진+권서영, 작은 질문 한개
작성자:권서영(2020####27)작성일:7월 12일 오전 2:11
조회수:85


rref()코드는 있는데 ref()코드는 없나요? 그 이유는 단순하게 ref 이 잘 사용되지 않기 때문이나요?
이시원(2021####15)7월 12일 오전 2:29
비슷하게 echelon_form() 함수를 통해서 구할 수 있는 것 같습니다.다만,Note This row reduction does not use division if the matrix is not over a field (e.g., if the matrix is over the integers). If you want to calculate the echelon form using division, then use rref(), which assumes that the matrix entries are in a field (specifically, the field of fractions of the base ring of the matrix). 이러한 문구가 있는것으로 보아 예외가 있어보이며, rref()를 사용하라는 것으로 보아 완전히 ref()를 나타내는 함수는 없는것 같습니다.
이상구(LEE SANGGU)7월 12일 오전 5:50
더구나 주어진 행렬의 rref 는 유일하지만,ref 는 무수히 많기 때문에 ...ref 코드를 별도로 만들 이유가 적습니다.
정현목(2016####80)7월 12일 오전 9:24
선형연립방정식에서 보면 rref는 그 식의 해를 찾는 것이기 때문에 유일하지만,ref의 경우에는 미지수의 계수에 따라 값이 달라지기 때문에 유일하지 않습니다.예시로 문제에서 풀이에 따라 ref가 달라지는 것을 볼 수 있습니다.유일한 ref가 없기 때문에 ref() 코드는 따로 없는 것 같습니다.
이상구(LEE SANGGU)7월 12일 오후 10:03
아래 한글로 Finalize 한 본인 파일을 업로드 하세요^^그래야 다른 학생이 여기에 미비한 부분을 추가하고 Re-Finalize by *** 하면서 본인 이름을 또 추가할 수 있으니까요^^그럼 그에 기여한 모든 4명이 같은 가점을 받을것입니다.
comment: 저는 REF의 명령어가 존재하는가의 여부에만 집중하여 질문글을 해석하였고, 그에 대해서만 답변을 드렸습니다. 하지만 다른 학우분들께서는 왜 REF명령어가 존재하지 않을 것 같은지, 혹은 필요로 하지 않는지에 대해서 설명해주시는 것을 보고서 다른 분들과의 토론을 통해서 혼자서는 바라보지 못했던 관점에서 문제를 바라볼 수 있다는 것을 깨닫게 되었습니다.
13. REF와 RREF의 차이, 자유변수와 임의의 해가 뜻하는 바에 대한 질의응답
FINAL OK by SGLee [1주차] Finalized by 임혜림, 이시원, 김보민 (질문자 : 임혜림 / 이전 글 작성 : 7/11)
작성자:김보민(2020####50)작성일:7월 12일 오후 10:59
조회수:37
임혜림 학우님의 아래 3가지 질문에 대하여 교수님과 이시원 학우님, 그리고 제가 차례로 답변해보았습니다!
Q1 같은 성분인 1이 첫번째 항 세번째와 두번째항 두번째에 있는데 이는 ref의 (2)조건을 만족시키지 못하는것 아닌가?
Q2자유변수가 왜 다른가?
Q3임의의 해를 제공한다는게 무슨뜻인가?
이상구(LEE SANGGU)7월 11일 오후 3:58
A1 leading nonzero 성분인 1이 첫번째 행은 세번째가 아니라 a_11 즉 첫번째에, 두번째행을 두번째에 있으므로 ref의 (2)조건을 만족하는것 입니나다.
A2 자유변수가 여러개 있으면, 그분하여 다른게 부르는 것이 현명합니다.
A3 무수히 많은 해가 있을 경우, 해를 구해달라고 간단한 코드로 명령하면 그 중에 자유변수를 모두 영으로 놓은 해를 프린트 해 제공한다는 의미입니다
이시원(2021####15)7월 11일 오후 4:03
A1. REF의 2번째 조건에서 말하는 바는 각 행에서 처음으로 나타나는 0이 아닌 선분이 1이어야한다는 점입니다. 때문에 첫번째 첫번째 열에서 가장 처음나타나는 0이 아닌 수는 1이고, 2번째, 3번째에서도 마찬가지이므로 REF의 2번째 조건을 만족한다고 할 수 있습니다. 말씀하시는 부분은 RREF일 경우 필요한 4번째 조건인 것 같습니다.
A2. 말씀해주신 그림에서의 자유변수는 동일한 듯 싶습니다. 자유변수는 선행선분을 가지지 않는 열에 대응되는 미지수를 말하기 때문에 그대로 x2,x4,x5가 자유변수가 될 것 같습니다.
A3. 임의의 해를 제공한다는 것은 무수히 많은 해중에서 가능한 해 하나를 제공한다는 뜻인것 같습니다.
김보민(2020####50)7월 11일 오후 4:27
해가 존재하는 경우는, 오직 하나의 값을 해로 갖는 basic valiable, 무수히 많은 해를 가지는 free valiable로 나뉩니다!
행렬에서 (x1,x2,x3,x4)를 구해야 할 경우에 그 식의 해가 모두 basic variable을 가지는 경우와 모두 free variable을 가지는 경우도 당연히 가능하지만, x1과 x2이 basic valiable, 나머지 x3,x4는 free valiable을 가지는 경우 등 한 식 내에서 각각의 벡터마다 다른 종류의 해를 가지는 경우도 존재합니다!
해 중 자유변수가 존재할 경우, basic variable은 결과값이 하나로 특정되는 경우니 그대로 출력을 하고, free variable은 무수히 많은 수가 가능하지만, 프로그램 내에서 기본적으로 free variable의 값을 0으로 출력하도록 프로그래밍 되어있어 임의의 해를 출력하는 것은 맞지만, 자유변수에는 고정적으로 0이 출력됩니다.
free, basic variable관련하여 제가 아는 것을 정리해보는 식으로 덧붙여서 설명해 보았는데, 혹시 틀린 부분이 있으면 편하게 말씀해주세요!!
이상구(LEE SANGGU)7월 12일 오전 7:25
Good
comment: 자유변수의 개념에 대해서 생각해보는 시간이 되었습니다. 또한 다른 학운분의 답글을 보면서 basic variable과 free variable에 대해서 프로그램이 다루는 방식의 차이를 알 수 있었습니다.
14. 코시슈바르츠 부등식의 오타 관련
Final OK by SGLee [3주차, 오타] 코시슈바르트 부등식 관련 오타, -1<= x*y / ||x|| ||y|| <=1이고 x*y = ||x|| ||y|| cos세타이기 때문에 -1<=cos세타<=1이 됩니다.
작성자:김민서(2021####02)작성일:7월 25일 오후 5:50
조회수:45
Final OK by SGLee [3주차, 오타] 코시슈바르트 부등식 관련 오타, -1<= x*y / ||x|| ||y|| <=1이고 x*y = ||x|| ||y|| cos세타이기 때문에 -1<=cos세타<=1이 됩니다.
이 코시슈바르트 부둥식을 설명하는 부분에서-1와1사이에 있으므로cos세타가 되게 하는 세타 값이 항상 존재한다고 말씀하셨습니다.이 부분에서 어떻게 세타가 항상 존재할 수 있는지 이해가 어려워서 질문 드립니다.
<---파란색 (-1<=||x|| ||y|| / x*y <=1) 부분은 오타입니다. (It will be Fixed soon by Prof. )
-1<= x*y / ||x|| ||y|| <=1이고 x*y = ||x|| ||y|| cos세타이기 때문에 -1<=cos세타<=1이 됩니다.
따라서 cos의 범위가 -1에서 1 사이이므로 항상 두 벡터 사이의 사잇각인 세타가 존재합니다.
2개의 댓글
이시원(2021####15)7월 25일 오후 6:16
파란색 (-1<=||x|| ||y|| / x*y <=1) 부분이 잘못된 것 같습니다.|x*y|<=||x|| ||y||라면 ||x|| ||y|| / x*y의 범위는 -1과 1사이가 아닌 -1이하이거나 1이상이어야 됩니다.따라서 -1<= x*y / ||x|| ||y|| <=1이고 x*y = ||x|| ||y|| cos세타이기 때문에 -1<=cos세타<=1이 됩니다.때문에 cos의 범위가 -1에서 1 사이이므로 항상 두 벡터 사이의 사잇각인 세타가 존재합니다.
이상구(LEE SANGGU)7월 25일 오후 6:23
잘 찿았어요. 나도 발견한 오타 입니다. 곧 고쳐 놓을께요.잘 했어요보너스 1점 입니다.
comment: 이전에 스스로 증명하였던 기억을 토대로 자신감을 가지고 문제를 확인할 수 있었으며, 스스로 올바르게 학습을 진행하고 있다는 자신감을 가질 수 있게 되었습니다.
15. 1주차 요약 및 정리
[Final OK by TA] Re-finalized by 남다현 and 배홍권 and 권서형 and 이시원 [1주차 요약]
작성자:임동선(2017####79)작성일:7월 25일 오후 1:58
조회수:6
Re-Finalized by 이시원 [1주차-2주차-요약-edit2]
작성자:이시원(2021####15)작성일:7월 13일 오전 6:19
조회수:30
요약되어 있지 않은 부호화함수와 같은 내용을 포함한 용어에 대한 간단한 정리를 추가로 작성하였습니다.
기존에 작성되어 있던 python의 numpy 클래스와 관련된 질문글에 답글이 존재하지 않는 점을 확인하여 답변을 달았습니다.
코시-슈바르츠 부등식에 대한 증명과 그에 대한 논의과정을 담았습니다.
1주차에 실행하였던 행렬에 관한 연산들에 대해서 python의 numpy클래스를 사용하지 않고 직접적으로 연산방식을 통해 구현한 코드를 참고용으로 추가하였습니다.
이상구(LEE SANGGU)7월 13일 오후 7:13
정말 수고 많았습니다. 다른 학생이 첨부 파일보고 수정 보완하여 참여한 학생 이름 모두 넣어 Finalize 시키세요^^
해당 글의 파일을 Re-finalized하여 올립니다.
[PartⅠ 행렬과 데이터 분석]
0. Big Picture(기초 선형대수학 개념의 구성) - 기초 용어 목록
벡터(vector) / 노름(norm, length, magnitude) / 내적(Euclidean inner product, dot product) / 벡터공간(vector space) / 부분공간(subspace) / 일차결합(linear combination) / 일차결합들의 전체집합(Span) / 일차독립(linearly independent) / 일차종속(linearly dependent) / 기저(basis) / 차원(dimension) / 행공간(row space) / 열공간(column space) / 계수(rank) / 초평면(hyperplane) / 정사영, 직교사영(orthogonal projection) / 직교 성분(orthogonal component) / 고윳값(eigenvalue) / 고유벡터(eigenvector) / 대각화 가능한(diagonalizable) / 대각화 하는(diagonalizing) / SVD(특잇값분해, singular value decomposition), 일반화된 역행렬, 최소 제곱해, 선형회귀 / 차원축소(dimension reduction) / 변수추출(feature extraction) / 주축정리(principal axis theorem) / 고윳값 분해(eigen decomposition) / 주성분 분석(Principal Component Analysis, PCA) / 서포트 벡터 머신(Support Vector Machine, SVM)
1. 벡터
1.1. 벡터
스칼라(scalar): 주어진 크기만으로 완전히 표시되는 양; 길이, 넓이, 질량, 온도
벡터: 주어진 크기에 더해 방향까지 지정해야 완전히 표시되는 양; (가)속도, 위치이동, 힘
영벡터, 원점: 시작점과 끝점이 같아 크기가 0인 벡터 – 임의의 방향 설정
n차원 벡터(n-dimensional vector): n개의 실수 순서조

벡터의 표현:
벡터의 상등: 두 벡터 x, y에 대하여
이면 x = y
벡터 합과 스칼라배: 두 벡터 x, y와 스칼라 k에 대하여 x+y는 (1)로, kx는 (2)로 정의

(1)
(2)
n-공간(n차원 공간)
: 모든 n차원 벡터 전체의 집합
1.2. 내적
노름: 벡터 x에 대하여
을 x의 노름으로 정의
거리:
는 원점에서 점
에 이르는 거리
는 두 점
와
사이의 거리
내적: 벡터 x, y에 대하여 실수
을 x와 y의 내적으로 정의, 표현:
코시-슈바르츠 부등식: 임의의 벡터 x, y에 대하여 부등식
성립
위 부등식에서 등호는 x, y 중 하나가 다른 것의 실수배일 때만 성립
1.3. 정사영
x 위로의 y의 정사영(projection of y onto x): 그림의 벡터 x, y에 대하여 벡터
는 x 위로의 y의 정사영, 표현:
, 벡터
는 x에 직교인 y의 벡터성분, y=p+w
정사영:
의 벡터 x(
0), y에 대하여
,
성립
점과 평면 사이의 (최단) 거리: n 위로의 v의 정사영(projection of v onto n)의 노름
점
와 평면
사이의 거리
*자료 출처: 이상구 교수님(with 이재화 님)의 『인공지능을 위한 기초수학』
1-4. 선형연립방정식
일반적으로 미지수 에 관한 유한개의 선형방정식들의 모임
만약 상수항 b1, b2, …, bn이 모두 0일 경우, 동차선형연립방정식 (homogeneous system of linear equation)이라 한다.
해집합: 미지수가 2개인 선형연립방정식
일반적으로 선형연립방정식에 대해 다음 중 하나가 성립한다.
1. 유일한 해를 갖는다 2. 해를 갖지 않는다 3. 무수히 많은 해를 갖는다
첨가행렬: n개의 미지수를 갖는 m개의 일차방정식으로 이루어진 선형연립방정식
1-5. GAUSS 소거법과 Gauss-Jordan 소거법
선형연립방정식의 풀이를 소거법이라 한다. 이 소거법에는 크게 3가지 규칙이 있다.
1. 두식을 교환한다 2. 한 식에 0아닌 실수를 곱한다 3. 한 식에 0 아닌 실수배를 하여 다른 식에 더한다
이를 기본행 연산(ERO, Elementary Row Operation)이라 한다.
행사다리꼴(row echelon form, REF):
(1) 성분이 모두 0인 행은 행렬의 맨 아래 위치
(2) 각 행에서 처음으로 나타나는 0이 아닌 성분은 1. 이 1은 그 행의 선행성분(leading entry)
(3) i행과 (i+1)행 모두에 선행성분이 존재하면 (i+1)행의 선행성분은 i행의 선행성분보다 오른쪽에 위치한다.
기약 행사다리꼴 (reduced row echelon form, RREF):
위 성질을 다 만족한다
(4) 선행성분을 포함하는 열의 선행성분 외 성분은 모두 0
정리1: 행동치인 선형연립방정식은 해집합이 같다
Gauss 소거법: 선형연립방정식의 첨가행렬을 REF로 변형하여 푸는 방법
Gauss-Jordan 소거법: 선형연립방정식의 첨가행렬을 RREF로 변형하여 푸는 방법
[1주차 요약: ~가우스-조던 소거법] 김수민+김은진+권서영, 작은 질문 한개
작성자 : 권서영(2020####27)작성일 : 7월 12일 오전 2:11조회수 : 35
[1주차] 강의 내용 요약_김수민+김은진+권서영.pdf
더구나 주어진 행렬의 rref 는 유일하지만,
ref 는 무수히 많기 때문에 ...
ref 코드를 별도로 만들 이유가 적습니다.
rref()코드는 있는데 ref()코드는 없나요? 그 이유는 단순하게 ref 이 잘 사용되지 않기 때문이나요?
[1주차] 가역행렬 실습
작성자 : 박수연(2021####28)작성일 : 7월 11일 오후 11:51조회수 : 18
교안에 있었던 가역행렬의 3가지 정리에 대해 직접 확인해 보고자 코드를 참고해 5차 행렬으로 실습해 보았습니다.
[1주차] det(A), 역행렬 실습
작성자 : 김성준(2017####61)작성일 : 7월 11일 오후 11:52조회수 : 23
코드실습을 해본 결과, 문득 3X3 이나 4X4의 det값과 역행렬을 구하는 것을 코딩이 아닌 손으로 해본다면 얼마나 비효율적일지가 궁금해 직접 특정 행렬을 설정해 구해봤습니다.
아래의 실습을 통해 컴퓨터를 이용한 코딩이 얼마나 효율적이고 대단한 일인지 새삼 느끼게 되었습니다.
감사합니다.
SmartSelect_20210711-234936_Samsung Notes.jpg
[1주차] 질문: 벡터공간의 기저
작성자 : 권서영(2020####27)작성일 : 7월 10일 오후 3:58
조회수 : 35
원이 무엇을 뜻하나요? |S|는 무엇을 뜻하나요? m과 n은 차원을 뜻하는 건가요?
5개의 댓글
홍정명(2021####17)7월 10일 오후 7:33
저는 원을 원소로 이해했습니다. 그리고 위의 집합들은 벡터들의 집합이므로 원소들은 곧 벡터들입니다. 따라서 위 내용은 V의 기저의 원소 수보다 많은 원소들을 갖는 V의 부분집합은 일차독립일 수 없고(기저는 일차독립인 부분집합들 중 원소의 개수가 가장 많고), V의 기저의 원소 수보다 적은 원소들을 갖는 V의 부분집합은 V를 생성할 수 없다(기저는 V를 생성할 수 있는 부분집합들 중 원소의 개수가 가장 적다)는 의미입니다.그래서 저는 |S| 는 S의 원소 개수 정도로 생각했습니다.
김수호(2019####59)7월 10일 오후 8:30
홍정명님 설명이 정확해보여요 저도 원소(벡터)로 보입니다.
권서영(2020####27)7월 10일 오후 11:30
감사합니다! 덕분에 이해가 됐습니다 :)
이상구(LEE SANGGU)7월 11일 오전 00:11
Good job. 원 원소 element벡터공간의 부분집합의 element 즉 벡터 맞습니다.설명 잘 하셨습니다.
이상구(LEE SANGGU)7월 12일 오전 7:30
Very good.누가 이 질문과 답을 정리하여 Finalized by . . . 하고 제목을 주어 제일 위에 새로 계시해 보세요.그럼 채점하고 이 토론에 기여하여 결론을 얻은 이 세명 모두에게 가산점 줄 생각 입니다.
[1주차 질문] 정사영과 성질
작성자 : 권서영(2020####27)작성일 : 7월 10일 오후 5:08
조회수 : 53
정사영을 공부하면서 제가 이해하는 방식이 잘못된 것 같아 질문 드립니다. 보통 삼각형의 세 변, 특히 직각삼각형의 비는 1:1:root(2)이고 a + b > c가 통용된다고 이해하고 있습니다. 근데 정사영이 결국 2차원에서는 삼각형이 그려지는데 W2 = U - W1이 성립되는 이유가 궁금합니다. 그러면 삼각형이 성립되지 않지 않나요? 제가 벡터의 성질을 제대로 이해하지 못한 건가요?
4개의 댓글
장지원(2020####71)7월 10일 오후 5:43
말씀하시는 a,b,c는 스칼라(크기만 있는)이고, W2, U, W1은 벡터(크기와 방향이 모두 있는)입니다.이해가 조금 힘드시면 U=W1+W2 라고 생각하고 벡터로 삼각형을 바라보세요!우리가 길을 걸을 때, 대각선으로 가는 것은 오른쪽으로 한 번, 위로 한 번 가는 것과 같은 것이죠? 이것을 '거리'의 관점으로 바라보면 당연히 대각선으로 가는게 짧겠죠! 하지만 '처음과 끝'의 관점으로 바라보면 출발지와 도착지가 같으니 벡터로 같다고 표현할 수 있는거에요~혹시 설명 중에 이해가 되지 않는 부분이 있다면 알려주세요 :)
홍정명(2021####17)7월 10일 오후 7:06
화살표로 흔히 나타내는 물리적 벡터의 덧셈은 한 벡터의 시작점을 다른 벡터의 끝점으로 옮겨서, 그 벡터의 시작점에서 나머지 벡터의 끝점으로 가는 화살표로 나타내고, 이것이 물리적 벡터의 덧셈의 정의에도 부합합니다. 뺄셈에서는 빼기 기호가 붙은 벡터의 방향을 반대로 바꿔(시작점과 끝점을 바꿔) 벡터의 덧셈을 하면 됩니다.(5, 4, -1) 처럼 성분의 나열로 나타낼 때는 벡터의 덧셈은 각 성분들의 합으로 만든 벡터입니다.벡터의 덧셈은 스칼라배와 함께 벡터를 이루는 가장 핵심적인 연산 두 가지 중 하나이므로, 정의를 잘 익히면 이후의 학습에 도움이 되리라 생각됩니다.위의 W2 = U - W1 처럼 벡터의 덧셈, 뺄셈 은 우리가 수를 연산할 때 쓰던 기호를 그대로 써서 나타냅니다. 질문의 내용은 벡터의 덧셈을 벡터의 노름의 덧셈으로 혼동한 것으로 보여집니다. 벡터의 노름은 물리적 벡터에서는 화살표의 길이로 이해하면 쉬운데, 이러한 길이들을 더할 때는 ||W1||+||W2||>||U|| 처럼 벡터의 노름 기호를 써서 표현해야 합니다.
권서영(2020####27)7월 10일 오후 11:27
우와 감사합니다!
이상구(LEE SANGGU)7월 12일 오전 7:30
Very good.누가 이 질문과 답을 정리하여 Finalized by . . . 하고 제목을 주어 제일 위에 새로 계시해 보세요.그럼 채점하고 이 토론에 기여하여 결론을 얻은 이 세명 모두에게 가산점 줄 생각 입니다.
dimension의 정의
작성자 : 김석하(2017####02)작성일 : 7월 9일 오후 11:04
조회수 : 39
선형대수학에서 나오는 dimension이란 무엇을 의미하나요? 우리가 실제로 살아가고 있는 3차원 공간에서 말하는 공간을 의미하는건가요, 아니면
그저 임의의 (basis 라고 부르는 벡터공간의 부분집합인 ) basis set에 있는 elements들의 갯수만 얘기하는건가요?
4개의 댓글
김수호(2019####59)7월 9일 오후 11:11
우리가 사는 공간도 벡터공간의 예중 하나이고, 연속함수들의 집힙도 벡터공간의 예입니디.우리가 사는 공간 우리가 운영하는 회사, 우리가 사용하는 연속함수들 이런 것들을 이해하기 의하여, 벡터공간에 대한 기저 basis 를 정의한것 입니다.각 벡터공간에는 다양한 기저가 존재하는데, 일단 각각의 기저는 일차독립이고 그 벡터 공간을 생성하는 벡터집합 입니다. 이 부분집합을 그 벡터공간의 기저라 하는데, 그 공간을 이루는 기저의 갯수를 그 벡터공간의 차원 이라고 합니다!!우리가 실제로 살아가고 있는 공간도 3차원 공간들 중에 하나입니다이 차원 이라는 개념을 이용하여, 무한개의 벡터들로 이루어진 여러 벡터공간들 사이의 크기 를 비교하고,서로 같은지 다른지 등 분류가 가능 합니다.
오혜준(2016####81)7월 10일 오후 2:51
윗분 말처럼 두가지 모두 벡터공간의 차원이라고 생각합니다.기저는 한 공간을 구성 할 수 있는 벡터 집합이고 기저 벡터의 갯수를 차원(dimension)이라고 부르는데요, 쉽게 말해서 3차원 공간을 구성하는 데는 3개의 기저벡터가 필요하다는 뜻이고 10차원 공간을 구성하는 데는 10개의 벡터를 갖는 벡터들의 집합인 a basis 기저 벡터가 필요한 것입니다.
권서영(2020####27)7월 10일 오후 5:18
https://www.youtube.com/watch?v=k7RM-ot2NWY&t=280s저도 기저와 차원 개념 이해가 힘들었는데 위 영상을 보고 도움이 많이 됐습니다! 수호님과 혜준님 답변과 더불어 같이 시청하면 시너지가 날 것 같습니다. :)
이상구(LEE SANGGU)7월 12일 오전 7:32
Very good.누가 이 질문과 답을 정리하여 Finalized by . . . 하고 제목을 주어 제일 위에 새로 계시해 보세요.그럼 채점하고 이 토론에 기여하여 결론을 얻은 이 세명 모두에게 가산점 줄 생각 입니다.
vector space의 정의
작성자 : 김석하(2017####02)작성일 : 7월 9일 오후 11:01
조회수 : 35
강의에서 vector space는 vector addition 과 scalar multiplication이 정의되고 2개의 기본성질과 8개의 연산성질을 만족해야한다고 하셨는데, 왜 이렇게 설정이 되는지 궁금합니다
4개의 댓글
김수호(2019####59)7월 9일 오후 11:07
저는 벡터공간이 되기 위한 조건이 그 10가지인데, 10가지를 만족하면 성립하는 수학적 성질들이 많아서 그렇게 정의하기로 했다 라고 배웠습니다
이상구(LEE SANGGU)7월 9일 오후 11:31
맞습니다. 수학적 구조의 일반론 과 벡터공간 배우려면 그것만으로도 7주걸리므로,여러분은 이번 학기에는 더 중요한 부분공간인, 해공간 , 고유공간 등에만 집중 하시면 됩니다.
권서영(2020####27)7월 10일 오후 5:03
저도 공부하면서 특히 행렬공간과 벡터공간이 같이 분류되는지 궁금해서 검색하고 질문해봤는데, 같은 조건을 만족하기 때문이라고 인터넷에서 답을 찾았습니다. 행렬이 벡터와 다르기에 생겼던 질문이었는데 막상 그 조건들에 대해서 깊게 생각하지 않았던 것 같네요. 이 글과 수호님의 답을 읽고 그 조건들에 대해 더 알 수 있었습니다!
이상구(LEE SANGGU)7월 12일 오전 7:33
Very good.누가 이 질문과 답을 정리하여 Finalized by . . . 하고 제목을 주어 제일 위에 새로 계시해 보세요.그럼 채점하고 이 토론에 기여하여 결론을 얻은 이 세명 모두에게 가산점 줄 생각 입니다.
[1주차]1-3강의 질문
작성자 : 임혜림(2021####86)작성일 : 7월 11일 오후 3:45
조회수 : 48
필기하면서 의문점이 든 부분을 적어보았습니다 사진을 참고해주세요!
Q1 같은 성분인 1이 첫번째 항 세번째와 두번째항 두번째에 있는데 이는 ref의 (2)조건을 만족시키지 못하는것 아닌가?
Q2자유변수가 왜 다른가?
Q3임의의 해를 제공한다는게 무슨뜻인가?
4개의 댓글
이상구(LEE SANGGU)7월 11일 오후 3:58
A1 leading nonzero 성분인 1이 첫번째 행은 세번째가 아니라 a_11 즉 첫번째에, 두번째행을 두번째에 있으므로 ref의 (2)조건을 만족하는것 입니나다.A2 자유변수가 여러개 있으면, 그분하여 다른게 부르는 것이 현명합니다.QA3 무수히 많은 해가 있을 경우, 해를 구해달라고 간단한 코드로 명령하면 그 중에 자유변수를 모두 영으로 놓은 해를 프린트 해 제공한다는 의미입니다
이시원(2021####15)7월 11일 오후 4:03
A1. REF의 2번째 조건에서 말하는 바는 각 행에서 처음으로 나타나는 0이 아닌 선분이 1이어야한다는 점입니다. 때문에 첫번째 첫번째 열에서 가장 처음나타나는 0이 아닌 수는 1이고, 2번째, 3번째에서도 마찬가지이므로 REF의 2번째 조건을 만족한다고 할 수 있습니다. 말씀하시는 부분은 RREF일 경우 필요한 4번째 조건인 것 같습니다.A2. 말씀해주신 그림에서의 자유변수는 동일한 듯 싶습니다. 자유변수는 선행선분을 가지지 않는 열에 대응되는 미지수를 말하기 때문에 그대로 x2,x4,x5가 자유변수가 될 것 같습니다.A3. 임의의 해를 제공한다는 것은 무수히 많은 해중에서 가능한 해 하나를 제공한다는 뜻인것 같습니다.
김보민(2020####50)7월 11일 오후 4:27
해가 존재하는 경우는, 오직 하나의 값을 해로 갖는 basic valiable, 무수히 많은 해를 가지는 free valiable로 나뉩니다!행렬에서 (x1,x2,x3,x4)를 구해야 할 경우에 그 식의 해가 모두 basic variable을 가지는 경우와 모두 free variable을 가지는 경우도 당연히 가능하지만, x1과 x2이 basic valiable, 나머지 x3,x4는 free valiable을 가지는 경우 등 한 식 내에서 각각의 벡터마다 다른 종류의 해를 가지는 경우도 존재합니다!해 중 자유변수가 존재할 경우, basic variable은 결과값이 하나로 특정되는 경우니 그대로 출력을 하고, free variable은 무수히 많은 수가 가능하지만, 프로그램 내에서 기본적으로 free variable의 값을 0으로 출력하도록 프로그래밍 되어있어 임의의 해를 출력하는 것은 맞지만, 자유변수에는 고정적으로 0이 출력됩니다.free, basic variable관련하여 제가 아는 것을 정리해보는 식으로 덧붙여서 설명해 보았는데, 혹시 틀린 부분이 있으면 편하게 말씀해주세요!!
이상구(LEE SANGGU)7월 12일 오전 7:25
Good
[1주차] Sage 실습 (Gauss-Jordan 소거법, RREF로 역행렬 구하기, 역행렬과 연립방정식, 수반행렬, 최소제곱문제와 정규방정식, QR분해)
작성자 : 홍정명(2021####17)작성일 : 7월 12일 오전 00:42조회수 : 28
1. Gauss-Jordan 소거법
Gauss-Jordan 소거법: 선형연립방정식의 첨가행렬을 RREF로 변형하여 푸는 방법
Gauss-Jordan 소거법으로 변수가 8개인 선형연립방정식 풀기, 검산
Gauss-Jordan 소거법으로 변수가 8개인 부정 선형연립방정식의 한 해 구하기, 검산
변수가 8개이고 식이 6개이므로 2개의 자유변수가 생기게 된다.
.solve_right() 명령어는 모든 자유변수에 0을 대입한 해를 산출한다.
2. 역행렬 구하는 방법 1 - 단위행렬 첨가와 RREF를 이용
n차 정사각행렬 A에 단위행렬 I_n 을 첨가하여 만든 n×2n 행렬 [A : I_n]의 RREF를 [C : D]라고 할 때 C = I_n 이면 D = A^(-1) 이고 C != I_n 이면 A는 비가역이다.
단위행렬을 첨가와 RREF를 이용해 8차 정사각행렬의 역행렬 구하기
3. 역행렬을 이용해 선형연립방정식의 해 구하기
n차 정사각행렬 A가 가역이고 b가 n차원 실수 벡터공간의 벡터일 때, 연립방정식 Ax=b 는 유일한 해 x=(A^(-1))b 를 갖는다.
역행렬을 이용해 변수가 8개인 선형연립방정식의 해 구하기, 검산
4. 수반행렬을 이용해 역행렬 구하기
n차의 정사각행렬 A = [a_ij]의 성분 a_ij에 대한 여인자를 A_ij 라 할 때, 행렬 [A_ij] 를 A의 수반행렬(adjugate, adjunct 또는 classical adjoint matrix)이라 하고, adjA로 나타낸다.
n차의 정사각행렬 A가 가역일 때, A의 역행렬은 A^(-1) = (1/|A|)adjA 이다.
수반행렬을 이용해 8차 정사각행렬의 역행렬 구하기(첫 번째 사진은 권장 명령어 사용, 두 번째 사진은 교재에 나와 있는 명령어 사용(권장 명령어가 아닐 때는 사진에서 볼 수 있듯이 안내문이 같이 출력된다.))
5. 최소제곱문제 (정규방정식을 이용한 풀이)
최소제곱문제 min||Ax-b|| 의 최소제곱해는 (((A^(T))A)^(-1))(A^T)b 이다. (선형연립방정식 (A^T)Ax = (A^T)b 를 정규방정식이라 한다.)
10개의 주어진 점에 대한 최소제곱직선 구하기
6. QR분해를 이용한 최소제곱문제 풀이
행렬 A는 A = QR 로 분해가능하다. 여기서 Q는 A의 열공간의 정규직교기저로 만들어진 행렬이고 R은 가역인 상삼각행렬이다.
Gram-Schmidt 정규직교화 과정을 통해 행렬의 열공간의 정규직교기저를 구할 수 있다.
Ax-b 의 최소제곱해는 x = (R^(-1))(Q^(-1))b 이다.
QR분해를 이용해 변수가 7개인 선형연립방정식의 최소제곱해 구하기
2개의 댓글
권서영(2020####27)7월 12일 오전 2:27
실습 정리 방법에 대해 배우고 갑니다! 특히 .adjugate()와 .adjoint()실습 관련 코멘트가 인상 깊었습니다. 일목요연하게 정리하는 방법 참고하고 배우겠습니다. 대단하세요!
이상구(LEE SANGGU)7월 12일 오전 5:53
홍정명씨, very good. 우리 학습 목표에 만점으로 도달 했습니다.
A입니다.
[1주차] 내용정리 및 용어정리 (docx)
작성자 : 배홍권(2018####94)작성일 : 7월 11일 오후 11:52
조회수 : 18
제가 강의를 듣고 이해한 내용들을 정리해보았습니다
[ 1주차 ] by 배홍권
1. vector
단순 크기만 주어지는 scalar 와는 다르게 방향까지 주어지는 물리량 vector
n개 실수의 순서조를 n차원의 벡터라 하며, 개별 실수를 성분이라고 하며, 다 같을 경우 벡터의 상등이라고 한다. 스칼라배, 즉 실수배를 할 수 있으며, 같은 행,열의 성분을 더하는 벡터의 합도 성립한다.
2. inner product
x = { a, b, c, ……} 일 때, ||x|| =√ (a2 +b2 +c2 +……) 을 x의 norm, length, magnitude 이라 한다. 따라서 ||x-y||는 두 점의 거리로 정의할 수 있다.
X = [ x1, x2, x3,….xn ] , Y = [ y1, y2, y3, …..yn ] 이라고 할 때 , 내적은
X ∙Y = x1y1 + x2y2 + x3y3 + … + xnyn = < X, Y > = YTX 이라고 표현한다
3. projection
원점 O에서 서로 다른 두 벡터 x, y가 있을 때, x에서 y로 수선의 발 ,S 를 내릴 때, 벡터 OS를 y 위로의 x의 정사영 이라고 하며, projyx (= p)라고 나타낸다 p는 y와 평행하므로
p = t y 로 나타낼 수 있으며, t = (y∙x) / ||y||2 로 나타낸다.
점과 평면에 수직인 법선 벡터의 내적을 계산하고, 법선 벡터의 norm을 이용하여 점과 평면 사이의 최단거리를 계산할 수 있습니다.
4. 선형연립방정식
선형 방정식들의 모임을 선형연립방정식이라고 한다. 이때, 상수항이 모두 0을 경우 homogeneous systems of linear equations 즉 동차선형방정식시스템이라고 한다.
선형연립방정식의 미지수에 대입하여 만족하는 수를 해(solution)라고 한다.
해가 존재하지 않을 경우 inconsistent 하다 하며, 해가 존재할 경우 consistent하다고 한다.
Consistent의 경우 한 점에서만 만나는 유일한 해를 갖거나, 겹쳐서 무한히 많은 해를 갖는다.
선형 연립방정식의 미지수가 아닌 계수만을 표현한 행렬을 계수행렬이라 하며, 상수항을 붙여서 만든 행렬을 첨가행렬이라고 한다.
5. Gauss elimination , Gauss-Jordan elimination
기본행 연산 (Elementary Row Operation)
(1) 행렬의 두 행을 서로 바꾼다.
(2) 한 행에 0이 아닌 상수k를 곱한다
(3) 한 행에 k배 하여 다른 행에 더한다
을 통해 한 행에 미지수를 소거할 수 있으며, 이는 해집합을 바꾸지 않는다
m ˟ n 행렬이 다음 세 조건
(1) 성분이 모두 0인 행이 존재하면 그 행은 행렬의 맨 아래에 위치한다
(2) 각 행에서 처음으로 나타나는 0이 아닌 성분(선행 성분, leading entry)은 1이다
(3) 선행성분은 상위 행의 선행성분보다 오른쪽에 존재한다
을 만족하면 행 사다리꼴 REF 라 하며, 추가적으로
(4) 선행성분을 포함하는 열은 그 선행성분을 제외하곤 모두 0이다.
라는 조건을 만족하면 기약 행 사다리꼴 RREF 라고 한다.
Gauss elimination은 REF로 변형하여 푸는 방법이며
Gauss – Jordan elimination은 RREF로 변형하여 푸는 방법이다
6. matrix operation
행렬의 덧셈이 정의되기 위해서는 두 행렬의 크기가 같아야 하고, 벡터의 실수배는 모든 성분에 실수배를 해주는 것 이다.
행렬 A 은 a ˟ b 행렬이고 , 행렬 B는 c ˟ d 행렬 일 때, 두 행렬의 곱이 정의되기 위해서는 b=c이어야 하며, 그 행렬은 a ˟ d의 크기를 갖는다
두 행렬의 곱 A ˟ B 는 A의 행벡터와 B의 열벡터의 내적 값을 해당 위치의 성분으로 갖는다
모든 성분이 0 인 행렬을 영행렬이라 한다.
주대각선성분이 모두 1이고 나머지 성분이 0인 n차의 정사각행렬을 단위행렬, In 이라 한다.
행렬의 행과 열을 바꾸어 얻은 행렬을 전치행렬이라 하며 A의 전치행렬은 AT라고 한다.
7. inverse matrix
n차의 정사각형 행렬 A에 대하여 AB = In= BA 가 만족되는 행렬이 존재하면 A는 가역이라고 하며, B를 A의 역행렬이라고 한다. B가 존재하지 않으면 A는 비가역이다.
역행렬은 주어진 행렬 A에 단위 행렬 IN 을 첨가하여 [ A | IN ] 행렬을 만들고 RREF를 구하여 얻D어지는 [ IN | B ] 행렬이 있다면, B가 A의 역행렬이다.
A가 가역이면 연립방정식 Ax = b 는 유일한 해 x = A-1b 를 갖는다.
8. determinant
행렬 A가 n차의 정사각행렬일 때, A의 행렬식은 det(A) 또는 |A|로 나타낸다.
9. linearly independent, subspace
한 벡터 x 가 다른 벡터들로 표현될 수 있으면 x는 다른 벡터들의 일차결합이라고 한다
c1x1+c2x2+c3x3+ … ckxk = 0 일 때, 모든 계수 c가 0이어야만 하면 일차 독립이라고 하며, 그렇지않을 경우 특정 벡터를 다른 벡터들의 일차결합으로 표현 가능하니 일차종속이라고 한다.
일차독립이기 위해서는 행렬식이 0이 아니어야 한다. 즉 역행렬이 존재해야 한다.
집합 W가 Rn의 부분집합일 때, W가 덧셈에 닫혀 있고, 실수배에 닫혀 있으면 Rn의 부분공간 subspace가 된다. Ax = 0일 때 만족하는 벡터들의 집합 W를 해공간 또는 영공간이라 하며 Null(A)라고 나타낸다.
Rn의 부분집합 S의 성분 벡터가 생성(span)한 부분공간 W라 하면 S는 W를 생성한다고 한다.
10. basis 와 dimension
Rn의 부분집합인 S가 있는데,
(1) S가 일차독립이다.
(2) span (S) = Rn
을 만족하면 S를 기저라고 한다. 이때 벡터의 개수를 차원이라 하며 dim Rn 이라한다.
독립적인 벡터들의 개수를 계수 rank라고 한다.
11. projection, least square solution, QR decomposition
방정식의 개수가 미지수의 개수보다 많은 선형연립방정식이라면, 만족하는 해는 하나도 없는 경우가 대부분이므로, 대신 Ax = b 를 만족하는 근사해를 찾는데 이를 최소제곱문제라고 한다.
이는 b 와 Ax 사이의 거리가 가장 짧게 만드는 x를 찾는 문제이다. 이러한 최소제곱해는
x = (ATA)-1ATb 라고 나타낸다.
다른 임의의 두 벡터가 모두 직교하는 집합을 직교집합이라고 하며, 크기가 1일 경우 정규직교집합이라고 한다. 한 벡터x를 다른 벡터로 정사영 내리면 두 수직인 벡터로 x를 표현하는 방법으로 직교집합을 구할 수 있으며, 크기를 1인 벡터로 바꾸어 주면 정규직교화 된다.
행렬 A를 정규직교화과정을 적용하여 얻은 정규직교벡터들을 열로 하는 행렬 Q를 만들어 A = QR로 분해한다고 한다.
1. 파이썬으로 0이상10이하 정수만을 포함하는 10X10 랜덤 행렬을 생성하는 함수로 numpy를 사용할 때, 오류가 나타나는 원인이 궁금합니다.
입력
결과
Answer: 이시원
ModuleNotFoundError 오류의 경우에는 module설치 경로가 잘못되었거나 설치 되어있지 않은 경우에 발생하는 오류입니다. numpy 라이브러리가 실행 가능한 위치에 다운되었다면 위 코드는 정상적으로 수행됩니다.
[2주차] 선형변환
작성자 : 정현목(2016####80)작성일 : 7월 12일 오전 11:51조회수 : 20
1개의 댓글
이상구(LEE SANGGU)7월 12일 오후 6:10
Kernel 을 배우는 것은 Ax =0 의 해집합, Ax=b 의 해집합을 구하는 일반이론을 찾는 과정 이랍니다. 그 이유를 이해 하는 것이 Goal 입니다.
http://matrix.skku.ac.kr/2018-album/LA-Sec-6-3-lab.html
특수해 라고 들어 보셨지요? 특수해 일반해 해집합 이 모두 여기서 연결되는 개념이고 해법이 된답니다.
이것을 배워야^^ 공학 수학 에서 아래 해법을 이해하게 된답니다.
http://matrix.skku.ac.kr/EM-Sage/E-Math-Chapter-6.html
[2주차]동형사상 여부 판단해보기
작성자 : 이지용(2021####83)작성일 : 7월 12일 오후 9:49조회수 : 4
T=Ax이고
A가 ([1,0,2],[0,1,3][0,0,4])일때 T의 동형사상 여부를 구해보았다.
kerT의 기저가 영백터이어서 단사이고 치역이 기저가 단위행렬(I3)인 3차원전체라 전사이다. 따라서 이경우는 T는 동형사상이다.
A가 ([1,2,3,4],[-1,-2,-3,-4],[5,6,7,8],[9,10,11,12])일 경우도 해보았다.
kerT의 기저가 영백터가 아니기에 단사가 아니다. 그리고 치역의 기저가 단위행렬이 아니기에 전사도 아니다.
또 A가 ([1,2,3,4],[2,4,8,16],[1,5,9,13],[3,9,27,81])일 경우를 해보았다.
kerT의 기저가 영백터이어서 단사이고 치역이 기저가 단위행렬(I4)인 3차원이라 전사이다. 따라서 이경우도 T는 동형사상이다.
이걸 반복하며 저는 T의 kernel의 기저가 영백터가 되어야지 T가 단사가 되는 것과 T의 치역의 기저가 단위행렬이 되어야지 T가 전사가 되어서 T가 동형사상, 즉 isomorphism이 된다는 것을 알게 되었습니다.
5. 선형변환 (Linear Transformation)
5.1 선형변환
정의1. 행렬변환(matrix transformation), 선형변환
(1) 입력과 출력이 모두 벡터인 함수 = 변환. 벡터는 우리가 움직인다고 생각하기에 ‘변환’이라고 부르는 것이다.
(pre-image) A가 m*n행렬이고, TA(x) = Ax
(2)선형변환은 원점이 변하지 않고, 점들 사이의 거리가 여전히 평행하고 일정한 변환을 뜻함

R^n에서 R^n 자신으로의 선형변환을 R^n 위의 선형연산자라 한다.


선형변환 T의 표준행렬(standard matrix)라 함. (=[T])
기본단위벡터 = 표준기저 (e1, e2,…,en)
5.2 핵(kernel)과 치역(range)
정의1. 핵(kernel), 단사, 전단사, 동형사상(isomorphism)
(1) T: Rn -> Rm 이 선형변환. T에 의한 상이 0이 되는 Rn 안의 벡터 전체의 집합을 T의 핵이라 함. (kerT)
(2) 변환 T가 T(u) = T(v) => u=v 만족, 단사(one-to-one injective)
(3) 선형변환 T에 대해 임의의 v의 상 T(v)전체 집합을 T의 치역(range)라 함. ImT.
전사(onto, surjective): b = f(a), if the whole target space of f is the image of f.
(4) 선형변환 T가 전단사이면 n=m이 되고, T를 Rn에서 Rn으로의 동형사상(isomorphism)이라 함. Dimension이 같음.
*The function f is onto if the equation f(x)=b has at least one solution for every right-hand side b. It is one-to-one if the equation f(x)=b has at most one solution for each right-hand side b.
정리. 선형변한이 단사일 필요충분조건
KerT = {0}
Kernel = { u⋳ V | T(u) = 0} , meaning vector u does not move. Pretty much like finding a null space. Except it is a transformation.
*방정식의 우항이 0이면 답이 하나만 나오니까 단사라고 이해함. 단사는 하나만 연결되어 있고, kernel은 0으로 가니, 0벡터 하나만 있어야 함.
실습
h(x, y, z)=[x+2*y, -x-y, z, x+z] # 함수의 정의
T=linear_transformation(QQ^3, QQ^4, h) # 선형변환 정의, 여기서 스칼라는 유리수
A=T.matrix(side='right') # 선형변환의 표준행렬을 구하는 Sage 명령어
print "T(e1) =", T(e1) # 벡터 e1 에 대한 image 구하기
print "A*x0 =", A*x0 # 표준행렬과 벡터의 곱 구하기
TK = T.kernel() # kernel을 구하기
print "T is injective?", T.is_injective() # 단사인지 확인
print TA.image() # 치역 구하기
print "TA is surjective ?", TA.is_surjective() # 전사인지 확인
1주차 용어에 대한 요약정리 by 이시원
스칼라 : 크기만을 가지는 양
벡터 : 크기와 방향을 모두 가지는 양
노름: ||x||와 같이 나타내며 원점에서 점 x에 이르는 거리로 정의된다.
로 계산된다.
내적: XY와 같이 나타내며
로 계산된다.
정사영: 벡터 x=OQ,y=OP가 존재할 때 점 P에서 OQ에 내린 수선의 발 S에 대해 p = PS인 벡터 p를 x위로의 y의 정사영이라 부르고
로 나타낸다.
로 계산된다.
선형연립방정식: 유한개의 선형방정식의 모임을 말한다.
계수행렬: 행렬방정식 AX=B가 존재할 때 A를 계수행렬이라고 부른다.
첨가행렬: 행렬방정식 AX=B가 존재할 때 [A;B]를 첨가행렬이라고 부른다.
기본행 연산: 행렬 X에 대하여
,
,
의 3가지 연산을 말한다.
선행선분: 각 행에서 처음으로 나타나는 0이 아닌 성분이 1인 경우 1을 그 행의 선행성분이라 한다.
행 사다리꼴: 각 행의 선행성분이 존재하고, i+1행의 선행성분은 i행보다 오른쪽에 위치한다.
기약행 사다리꼴: 선행선분을 포함하는 열의 선행선분을 제외한 모든 성분이 0인 행렬이다.
Gauss 소거법: 첨가행렬을 행 사다리꼴로 변형하여 푸는 방법이다.
Gauss-Jordan 소거법: 첨가행렬을 기약행 사다리꼴로 변형하여 푸는 방법이다.
행렬의 곱: XY로 나타내며 X행렬의 열의 개수와 Y행렬의 행의 개수가 같아야하고 곱셈으로 나타나는 행렬의 크기는 X행렬의 행의 크기*Y행렬의 열의 크기로 결정된다.
(i,j)번째 성분의 값은
로 계산된다.
영행렬: 행렬의 모든 성분이 0인 행렬이다. O로 표기한다.
단위행렬: 주대각선성분이 모두 1이고 그 외에 성분은 0인 행렬을 말한다.
으로 표기한다.
전치행렬: 원행렬의 열과 행을 바꾸어 얻어진 행렬을 말한다.
대각합: 주대각선성분의 합이며
로 계산된다.
역행렬: 정사각행렬 A에 대해 AB =
을 만족하는 행렬 B를 역행렬이라 한다.
가역행렬: 역행렬이 존재하는 행렬을 말한다.
비가역행렬: 역행렬이 존재하지 않는 행렬을 말한다.
기본행렬: 단위행렬에 기본행연산을 한번만해 얻은 행렬을 말한다.
대각선행렬: 주대각성분외에 모든 성분이 0인 행렬이며 단위행렬과는 다르게 주대각성분이 1 일 필요는 없다.
스칼라행렬: 단위행렬에 스칼라배를 한 형태의 행렬이다.
대칭행렬: 기존행렬과 전치행렬의 모습이 똑같은 행렬을 말한다.
반대칭행렬: 기존행렬의 –1스칼라배 한 모습이 전치행렬과 동일한 행렬을 말한다.
치환: 자연수집합 S에 대한 S에서 S로의 일대일 대응함수를 말한다. 또한 집합 S의 모든 치환의 집합을
으로 나타낸다.
반전: 치환에서 큰 자연수가 작은 자연수보다 앞에 나오는 경우를 말한다.
짝치환: 반전의 개수가 짝수인 치환이다.
홀치환: 반전의 개수가 홀수인 치환이다.
부호화함수:
의 각 치환을 +1,-1에 대응시키는 함수다.
행렬식: det(A)또는 |A|로 나타내고
로 계산한다.
수반행렬: A=[
]에서
의 여인자를
라하면
]의 전치행렬을 말한다.
일차결합:
인 벡터 x에 대하여
의 형태를 말한다.
일차독립: 일차결합에서
일때
일때를 말한다.
일차종속: 일차결합이지만 일차독립이 아닌 형태를 말한다.
부분공간:
의 부분집합 W가
와
인 W을 말한다.
해공간: W={
}인
의 부분공간 W을 말하며 영공간이라고도 한다.
기저:
인 S가 일차독립이면서 span(S)=
이면 S를
의 기저라 한다.
차원:
의 기저인 집합 S에 속하는 벡터의 개수를
의 차원이라 한다.
nullity(A):Ax=0의 영공간의 차원을 말한다.
열공간: 열벡터들에 의해서 생겨난
의 부분집합을 말한다.
행공간: 행벡터들에 의해서 생겨난
의 부분집합을 말한다.
계수: 열공간이나 행공간의 차원인 열계수와 행계수와 같다.
최소제곱문제: ||Ax-b||을 최소화하는 근사해를 찾는 문제를 말한다.
정규방정식: 최소제곱문제의 해가 될 필요충분조건이며
을 말한다.
직교집합:
의 벡터
에 대해 S={
}라 하자. 이때 S의 서로 다른 두 벡 터가 모두 직교하는 경우의 S를 말한다.
정규직교집합: 직교집합에 속하는 모든 벡터의 크기가 1인 경우를 말한다.
직교기저:
의 기저 S가 직교집합일 경우를 말한다.
정규직교기저:
의 기저 S가 정규직교집합일 경우를 말한다.
QR분해: 최소제곱문제와 고유값문제를 해결하는데 많이 사용되며, A에 정규직교화과정을 적 용하여 얻은 정규직교벡터들을 열로 하는 행렬 Q를 만들었을 때, A=QR로 분해가 가 능하다.
[1주차] 코시 - 슈바르츠 부등식
작성자:이시원(2021####15)작성일:7월 8일 오후 10:26
조회수:34
코시 - 슈바르츠 부등식의 정리가 옳음을 벡터의 내적을 이용하여 보일 수 있을까를 고민하다가 찾은 내용을 요약합니다.
코시 - 슈바르츠 부등식 정리란 R^n의 임의이 두 벡터 X,Y 사이에서 |X*Y|^2 <= ||X||^2 ||Y||^2 가 성립한다는 정리입니다.
이 정리는 벡터 내적의 정의인 |X*Y| = ||X|| ||Y|| COSA (A는 X,Y가 이루는 각의 크기)를 통해서 성립됨을 간단히 보일 수 있었습니다.
COS인의 값은 항상 -1과 1사이의 위치하므로 -||x|| ||Y|| <= |X*Y| <= ||X|| ||Y||의 식이 성립하고 이에 따라, |X*Y|^2 <= ||X||^2 ||Y||^2의 관계가 성립합니다.
또한, 등호가 성립하는 경우 X,Y가 실수배여야 하는 것은 |COSA| = 1 이어야 되므로 A가 0, 180도 둘 중 하나의 크기여야 하므로 두 벡터가 실수배의 관계에 있는 경우에만 등호가 성립합니다.
이상구(LEE SANGGU)7월 8일 오후 10:59
잘 이해하셨습니다^^
이지용(2021####83)7월 8일 오후 11:00
저 기하를 몰라서 그러는데 왜 |XY| = ||X|| ||Y|| cosθ 인가요?
김수호(2019####59)7월 9일 오전 1:05
이지용님 시원님께서 간략히 작성하시느라 <X,Y>혹은 X*Y라는 내적표현대신 |X*Y|라고 쓰신 것 같습니다.좌변에 norm 기호를 붙이게 되면, 우변 전체에도 절대값을 붙여야하거든요
이상구(LEE SANGGU)7월 9일 오전 5:23
이지용씨,수업 시간에 코시 슈바르츠 부등식 으로부터,*** 가 영과 1 사이에 있으니,*** 와 같은 값을 갖는 theta 가 존재한다. 이 theta 를 사잇각 이라 한다.고 설명해 주었답니다.이것은 기하 몰라도 이해 하실거야요.
이상구(LEE SANGGU)7월 9일 오전 5:27
아래가 증명. 코시 - 슈바르츠 부등식 정리란 R^n의 임의이 두 벡터 X, Y 사이에서 |X*Y|^2 <= ||X||^2 ||Y||^2 가 성립한다는 정리입니다.이 정리는 벡터 내적의 정의인 |X*Y| = ||X|| ||Y|| COSA를 만족하는 A 가 존재한다. )를 통해서 성립됨을 간단히 보일 수 있었습니다.COS 인의 값은 항상 -1과 1사이의 위치하므로 -||x|| ||Y|| <=X*Y <= ||X|| ||Y||의 식이 성립하고 이에 따라, |X*Y|^2 <= ||X||^2 ||Y||^2의 관계가 성립합니다.따라서 우변의 값을 양변에 나누면-1 <= *** <= 1에서 *** = COS A 인 A 가 존재한다.이것 이 이시원씨의 증명입니다.
1주차 행렬을 만들고 연산을 진행했던 python 코드 정리
행렬 랜덤 제작:
def make_matrix():
matrix = list()
n = rd.randint(3, 100)
m = rd.randint(3, 100)
for i in range(0, n, 1):
temp = list()
for j in range(0, m, 1):
x = rd.randint(-10000, 10000)
temp.append(x)
matrix.append(temp)
return matrix
정사영 구하기:
def projection(matrix_A,matrix_B):
norm = 0
for i in range(len(matrix_B)):
norm += (matrix_B[i]*matrix_B[i])
x = 0
for i in range(len(matrix_A)):
x +=matrix_A[i]*matrix_B[i]
return x/norm
전치행렬 구하기:
def reverse(metrix):
temp = []
for i in range(len(metrix[0])):
temp_list = list()
for j in range(len(metrix)):
temp_list.append(metrix[j][i])
temp.append(temp_list)
return temp
det 구하기:
def determinant(matrix, total=0):
indices = list(range(len(matrix)))
if len(matrix)==2 and len(matrix[0])==2:
val = matrix[0][0]*matrix[1][1]-matrix[0][1]*matrix[1][0]
return val
for i in indices:
temp = matrix[1:]
lenght = len(temp)
for j in range(lenght):
temp[j] = temp[j][0:i] + temp[j][i+1:]
sign = (-1)**(i%2)
alpha = determinant(temp)
total += sign*matrix[0][i]*alpha
return total
수반행렬 구하기:
def reverse(metrix):
temp = []
for i in range(len(metrix[0])):
temp_list = list()
for j in range(len(metrix)):
temp_list.append(metrix[j][i])
temp.append(temp_list)
return temp
def minor(matrix):
matrix = reverse(matrix)
Answer = list()
for i in range(len(matrix)):
Answer_list = list()
for j in range(len(matrix[0])):
temp = list()
for k in range(len(matrix)):
temp_list = list()
for l in range(len(matrix[0])):
if i!=k and j!=l:
temp_list.append(matrix[k][l])
if k!=i:
temp.append(temp_list)
print(temp)
x = determinant(temp)
Answer_list.append(x)
Answer.append(Answer_list)
return Answer
Guass-Jordan을 통한 역행렬 구하기:
def reverse_gauss(matrix):
row = len(matrix)
col = len(matrix[0])
reverse = list()
reverse_mod = list()
for i in range(row):
temp = list()
for j in range(col):
if i==j:
temp.append(1)
else:
temp.append(0)
reverse.append(temp)
reverse_mod.append(temp)
for i in range(row):
for j in range(i+1,row,1):
if matrix[i][i]!=0:
alpha = matrix[j][i]/matrix[i][i]
for k in range(0,col,1):
matrix[j][k] = matrix[j][k] - matrix[i][k]*alpha
reverse[j][k] = reverse[j][k] - reverse[i][k]*alpha
alpha = matrix[row-1][row-1]
for i in range(col):
matrix[row-1][i] = matrix[row-1][i]/alpha
reverse[row-1][i] = reverse[row-1][i]/alpha
for i in range(row-1,-1,-1):
for j in range(i-1,-1,-1):
if matrix[i][i]!=0:
alpha = matrix[j][i]/matrix[i][i]
for k in range(col):
matrix[j][k] = matrix[j][k] - matrix[i][k]*alpha
reverse[j][k] = reverse[j][k] - reverse[i][k]*alpha
alpha = matrix[i-1][i-1]
for j in range(col):
matrix[i-1][j] = matrix[i-1][j]/alpha
reverse[i-1][j] = reverse[i-1][j]/alpha
for i in range(row):
alpha = matrix[i][i]
for j in range(col):
matrix[i][j] = matrix[i][j]/alpha
reverse[i][j] = reverse[i][j]/alpha
return reverse
행렬의 곱 구하기:
def product(matrix_first,matrix_second):
row_first = len(matrix_first)
row_second = len(matrix_second)
col_first = len(matrix_first[0])
col_second = len(matrix_second[0])
if col_first != row_second:
print("Wrong!!!")
return 0
Answer = list()
for i in range(0,row_first,1):
temp = list()
for j in range(0,col_second,1):
x = 0
for k in range(0,col_first,1):
x += matrix_first[i][k]*matrix_second[k][j]
temp.append(x)
Answer.append(temp)
return Answer
RREF 구하기:
def rref(matrix):
row = len(matrix)
col = len(matrix[0])
for i in range(row):
for j in range(i+1,len(matrix),1):
alpha = matrix[j][i]/matrix[i][i]
for k in range(i,col,1):
matrix[j][k] = matrix[j][k] - matrix[i][k]*alpha
alpha = matrix[row-1][row-1]
for i in range(col):
matrix[row-1][i] = matrix[row-1][i]/alpha
for i in range(row-1,-1,-1):
for j in range(i-1,-1,-1):
alpha = matrix[j][i]/matrix[i][i]
for k in range(col):
matrix[j][k] = matrix[j][k] - matrix[i][k]*alpha
alpha = matrix[i-1][i-1]
for j in range(col):
matrix[i-1][j] = matrix[i-1][j]/alpha
for i in range(row):
alpha = matrix[i][i]
for j in range(col):
matrix[i][j] = matrix[i][j]/alpha
return matrix
정규직교기저 구하기:
def orthonormal(matrix):
matrix_AT = matrix[:]
matrix = reverse(matrix)
matrix_Y = list()
x = list()
for i in range(len(matrix)):
matrix_Y.append(matrix[i])
x.append(matrix[i])
for j in range(i-1,-1,-1):
alpha = projection(matrix[i],matrix_Y[j])
for k in range(len(matrix_Y[j])):
matrix_Y[i][k] -= matrix_Y[j][k]*alpha
for i in range(len(matrix)):
norm = 0
for j in range(len(matrix_Y[i])):
norm += matrix_Y[i][j]*matrix_Y[i][j]
norm = norm**0.5
for j in range(len(matrix_Y[i])):
matrix_Y[i][j] /= norm
return matrix_Y
*코드에 선행되어야 하는 reverse, projection 함수들은 위에 작성되어있는 함수들입니다.
최소제곱해 구하기:
def least_square_solution(matrix_A,matrix_B):
matrix_AT = reverse(matrix_A)
print(matrix_AT)
first = product(matrix_AT,matrix_A)
print(first)
first = reverse_gauss(first)
print(first)
second = product(first,matrix_AT)
print(second)
answer = product(second,matrix_B)
return answer
*코드에 선행되어야 하는 reverse, product, reverse_guass 함수들은 위에 작성되어있는 함수들입니다.
QR분해:
def QR(matrix):
first = orthonormal(matrix)
Answer = product(first,matrix)
return Answer
*코드에 선행되어야 하는 orthonormal, product, projection, reverse 함수들은 위에 작성되어있는 함수들입니다.
comment: 다른 분들이 먼저 작성해 놓으신 게시물을 보면서 어떠한 방식으로 앞으로 정리와 요약을 진행해 나가면 좋을지에 대해서 알 수 있었습니다. 또한, Sage를 통해 진행한 실습에 대해서도 공부해 볼 수 있었으며, 저는 스스로 구현해 보지 않았던 내용에 대해서도 다른 학우분들께서 코드로 구현해 놓은 부분을 통해서 추가적인 학습의 기회를 얻을 수 있었습니다. 이를 통해서 행렬의 연산에 대해 언제나 가능하다는 확신을 가질 수 있었습니다.
Week 2 관련 내용
16. eigenvectors_right 명령어의 return 값을 분리하는 방법에 대한 질의응답
[Final OK by TA] finalized by 김수호, 이시원, 김보민 (질문: python 명령어를 사용해 고유벡터만 return 할 수 있는 방법)
작성자:임동선(2017####79)작성일:7월 24일 오후 4:49
조회수:11
김수호 님이 질문해주셨습니다!!
실습 3, 질문 : 6 x 5 랜덤행렬의 SVD
A의 고유벡터로 이루어진 행렬 G를 구하고 싶었는데, eigenvectors 함수는 고유값, 중복도까지 같이 return하여 벡터만을 뽑아낼 수 없더라구요.
인터넷 서핑을 해보니 eigenmatrix라는 함수도 있었는데, 그건 대각행렬 D까지 return하는 함수라.. 어떻게 해야 고유벡터만 뽑아내서 사용할 수 있는지 궁금합니다.
이시원(2021####15)7월 19일 오후 3:17
eigenvalues가 값을 리턴한 값을 각각 따로 저장하는 방법이 있습니다.X = eigenvectors_right()라 하였을때X[0]은 맨 처음 고윳값과 관련한 정보를 가지고 있습니다.조금 더 분석해보면 X[0][0]은 첫번째 고윳값에 대한 정보, X[0][1]은 고유벡터에 대한 정보, X[0][2]은 중복도에 대한 정보를 담고 있습니다.이를 이용하여 A에 대해서 augment를 이용하여 각각의 고유벡터들을 하나하나 첨가해주어 고유벡터만을 뽑아내는 방법이 있습니다.대략적인 코드는 아래와 같이 될 것으로 예상됩니다.X = A.eigenvectors_right()B = matrix(RDF,vectors(RDF,list(X[0][1][0])))for i in range(0,len(X)):for j in range(0,len(X[i][1])):if i==0 and j==0:continuetemp = matrix(0,vectors(RDF,list(X[i][1][j])))B = B.augment(temp)정도를 이용하여 B에 고유벡터에 대한 정보를 저장할 수 있을 것 같습니다.
이시원(2021####15)7월 19일 오후 3:26
만약 column_matrix에 넣을때의 결과처럼 나오게 하고 싶으시다면X = A.eigenvectors_right()B = matrix(RDF,vector(RDF,list(X[0][1][0]))).transpose()for i in range(0,len(X)):for j in range(0,len(X[i][1])):if i==0 and j==0:continuetemp = matrix(RDF,vector(RDF,list(X[i][1][j])))B = B.augment(temp.transpose())와 같이 작성할 수도 있을 것 같습니다.
김보민(2020####50)7월 19일 오후 3:44
함수 반환 값이 여러개이면x,y,z= function이런 식으로 변수를 여러개 제공해 각각의 변수에 출력값을 받아서 print(y) 를 통해 출력해볼 수 있는데,예를 들어 행렬에 2개의 고유벡터가 존재할 경우 x,y 를 대입해x, y의 인덱스 0,1,2 마다 차례로 각각의 고유값과 그에 해당하는 고유벡터, 중복도가 저장되는 것을 확인할 수 있습니다.저도 이 부분에 대해서 궁금했고 실습을 해보았었는데, 아래에 첨부한 예제 코드를 통해 확인가능할 것 같습니다!A=matrix(QQ, [[0, 0, -2], [1, 2, 1], [1, 0, 3]])A.eigenvectors_right()x,y= A.eigenvectors_right() # 고유벡터 구하기: (고유값, [ 고유벡터 ], 중복도)print xprintprint yprintprint x[0] #첫번째 고유값에 대응하는 고유벡터printprint x[1] #두번째 고유값에 대응하는 고유벡터printprint x[2] # 세번째 고유값에 대응하는 고유벡터
이전
다음
2개의 댓글
이상구(LEE SANGGU)7월 21일 오후 4:08
실제 http://matrix.skku.ac.kr/KOFAC/ 에서 실행 해 보시고 ... 그 결과도 같이 공유해 보세요^^
김보민(2020####50)7월 21일 오후 5:11
추가했습니다!
comment: eigenvectors_right라는 sage함수의 고유벡터를 구해주는 함수의 return값에 대해서 알아보는 시간을 가질 수 있었습니다. 또한, return은 하나로 받고 결과값을 분리해내는 방법, 처음부터 일정한 결과값을 분리해서 받는 방법등 다양한 방법이 존재한다는 것을 알고, Sage를 통해 고윳값과과 고유 벡터를 구하고 이를 응용하는 활동을 할 수 있겠다는 자신감을 가지게 되었습니다.
17. 특이값 분해(SVD) 실습
[Final OK by TA] [2주차] 특이값 분해(singular value decomposition) 실습 by 이시원
작성자:임동선(2017####79)작성일:7월 23일 오후 4:09
조회수:19
임의의 2 x 3 matrix A를 설정한 후 이 행렬의 특이값 분해 과정을 코드와 손풀이로 해 보았습니다.
코드는 다음과 같습니다.
실행 결과는 다음과 같습니다.
풀이식
코드의 실행결과와 손풀이를 비교하여 U, Σ, V 의 결과를 옳게 구했음을 확인할 수 있었습니다. 또한 크기가 매우 큰 행렬의 경우 직접 풀기는 어렵겠지만 Sage 코드를 활용하면 편리하게 특이값 분해가 가능함을 알 수 있었습니다.
이상구(LEE SANGGU)7월 18일 오후 4:57
아래 동료의 코드와 본인 코드 비교하여 더 나은 코드로 업그네이드 히시는 것을 배우세요.
이상구(LEE SANGGU)7월 18일 오후 4:57
2주차] SVD 분해 실습작성자 : 이시원(2021####15)작성일 : 7월 18일 오후 4:27조회수 : 22차 행렬인 [[sqrt(3),2],[0,sqrt(3)]]에 대해서 손으로 U,S,V를 구해보고 랜덤으로 형성한 6차 행렬[ -3.0 3.0 -3.0 -4.0 -6.0 -3.0][ 7.0 5.0 7.0 7.0 -2.0 7.0][ 9.0 6.0 -6.0 -3.0 3.0 -4.0][ 2.0 1.0 8.0 -4.0 0.0 10.0][ -1.0 -8.0 1.0 -10.0 -8.0 -9.0][ 6.0 0.0 1.0 -1.0 -2.0 2.0]에 대해서 SVD를 구하는 코드를 2가지 방식으로 구현해보았습니다.sage: import random as rdsage: n = rd.randint(5,7)sage: print nsage: v = [rd.randint(-10,10) for _ in range(0,n,1)]sage: x = matrix(RDF,vector(QQ,v))sage: A = x.transpose()sage: for i in range(0,n-1,1):... temp = []... for j in range(0,n,1):... x = rd.randint(-10,10)... temp.append(x)... y = vector(RDF,temp)... v = matrix(RDF,vector(RDF,y))... A = A.augment(v.transpose())...sage: print "A ="sage: print A6A =[ -3.0 3.0 -3.0 -4.0 -6.0 -3.0][ 7.0 5.0 7.0 7.0 -2.0 7.0][ 9.0 6.0 -6.0 -3.0 3.0 -4.0][ 2.0 1.0 8.0 -4.0 0.0 10.0][ -1.0 -8.0 1.0 -10.0 -8.0 -9.0][ 6.0 0.0 1.0 -1.0 -2.0 2.0]sage: U,S,V = A.SVD()sage: print Usage: printsage: print Ssage: printsage: print Vsage: printsage: check = U*S*Vsage: printsage: print check[ -0.267815839398 0.00851858874876 0.144891429902 -0.295604014256 -0.896545844878 -0.126619106544][ 0.587717132993 -0.108494849462 0.309842709337 -0.669042635427 0.0501599449368 0.310935470158][-0.0224620430203 0.713248623532 0.597969179271 0.259708021047 -0.0116824092811 0.256163977584][ 0.364320041743 -0.543516253002 0.341182577462 0.603410071467 -0.275395954988 0.124534301994][ -0.661509709119 -0.428057036194 0.458209907312 -0.164487769203 0.287348499186 0.244111394953][ 0.109701943026 -0.0281062057777 0.446178169941 -0.0799501217998 0.187459214927 -0.864041426278][22.6882379152 0.0 0.0 0.0 0.0 0.0][ 0.0 15.4453319487 0.0 0.0 0.0 0.0][ 0.0 0.0 13.0540540385 0.0 0.0 0.0][ 0.0 0.0 0.0 7.83094955548 0.0 0.0][ 0.0 0.0 0.0 0.0 7.23297372477 0.0][ 0.0 0.0 0.0 0.0 0.0 2.15350287071][ 0.298113521993 0.311201158435 0.767360969 -0.0724697599487 0.445491780929 -0.147392392159][ 0.337477226391 0.430130820028 0.172146233221 -0.0963439827038 -0.702769899012 0.410237223758][ 0.326820985517 -0.638950639097 0.136375894548 -0.098569381057 0.191137384386 0.648137575687][ 0.454014297509 0.229807777502 -0.505404821025 -0.634510398891 0.278307361768 -0.0746119027212][ 0.239628500395 0.374630519912 -0.325811586662 0.685310993097 0.35534506636 0.316473840783][ 0.653356481987 -0.341648586122 -0.0365678808537 0.321707078642 -0.25960149972 -0.533081567897][ -3.93190993192 -5.91105081981 -1.08939760429 -2.82171618998 -5.31563145611 0.441310909234][ 2.87723213934 -0.452381675427 13.0005678787 2.58483392977 6.38803198762 0.117480842055][ 7.38051651953 -0.160469931326 1.54938469688 -2.96473297917 -6.08422209085 9.18118904493][ 2.92992976782 -3.63626441514 3.75610990192 -4.50629261644 10.9708668076 -2.90140300698][ -4.49388765063 -11.0333342698 -11.8847146159 3.54581491577 -0.65293385782 3.8503170174][ 1.3239798462 -2.13389908703 2.57220546831 0.0151967784089 3.31775865931 4.6978247752]sage: B = A.transpose()*Asage: eig = B.eigenvalues()sage: sv = [sqrt(i) for i in eig]sage: temp = A.eigenvectors_right()sage: length = 0sage: x1 = list(temp[0][1][0])sage: x1 = vector(x1)sage: v = matrix(x1)sage: X = v.transpose()sage: for i in range(0,len(temp)):... for j in range(0,len(temp[i][1])):... length+=1... if i==0 and j==0:... continue... v = list(temp[i][1][j])... v = vector(v)... v = matrix(v)... X = X.augment(v.transpose())...sage: print "X ="sage: print XX =[ 0.191630288356 0.214691137731 + 0.409636282398*I 0.214691137731 - 0.409636282398*I -0.351954997625 -0.481625486447 0.0655519061513][ 0.777119832396 -0.244777921726 - 0.119606216117*I -0.244777921726 + 0.119606216117*I -0.011716946512 0.509651206394 -0.430339448311][ 0.178669772276 0.424448071527 - 0.0825793729654*I 0.424448071527 + 0.0825793729654*I 0.52414109033 -0.0262971874607 -0.628550765168][ 0.250781143427 -0.128163721913 - 0.43535109597*I -0.128163721913 + 0.43535109597*I -0.331312563265 -0.626622757655 0.0619472304082][ -0.482383565309 0.520561764309 0.520561764309 -0.701011985011 0.187889445908 -0.288640383836][ 0.178478640674 0.159547343307 - 0.150040040552*I 0.159547343307 + 0.150040040552*I -0.00898290225525 0.282209979025 0.572960829288]sage: G = Xsage: print Gsage: printsage: vh = matrix([1/G.row(j).norm()*G.row(j) for j in range(0,length)])sage: U = matrix([A*vh.row(j)/sv[j] for j in range(0,length)]).transpose()sage: print Usage: printsage: S = diagonal_matrix(sv)sage: print Ssage: printsage: print vh[ 0.191630288356 0.214691137731 + 0.409636282398*I 0.214691137731 - 0.409636282398*I -0.351954997625 -0.481625486447 0.0655519061513][ 0.777119832396 -0.244777921726 - 0.119606216117*I -0.244777921726 + 0.119606216117*I -0.011716946512 0.509651206394 -0.430339448311][ 0.178669772276 0.424448071527 - 0.0825793729654*I 0.424448071527 + 0.0825793729654*I 0.52414109033 -0.0262971874607 -0.628550765168][ 0.250781143427 -0.128163721913 - 0.43535109597*I -0.128163721913 + 0.43535109597*I -0.331312563265 -0.626622757655 0.0619472304082][ -0.482383565309 0.520561764309 0.520561764309 -0.701011985011 0.187889445908 -0.288640383836][ 0.178478640674 0.159547343307 - 0.150040040552*I 0.159547343307 + 0.150040040552*I -0.00898290225525 0.282209979025 0.572960829288][ 0.171140106533 + 0.119293261935*I -0.239706740634 - 0.0424602164398*I -0.0435002700392 - 0.036584536573*I 1.94410066647 - 1.22460598068*I 0.468764915235 -0.682409714716 - 0.15705219276*I][ 0.139596816785 - 0.039764420645*I -0.0953289652727 + 0.0141534054799*I 0.418345736345 + 0.0121948455243*I -0.194470218932 + 0.408201993561*I -0.520873041327 1.14222260212 + 0.05235073092*I][ 0.0521014110754 + 0.23858652387*I 0.608206299864 - 0.0849204328796*I 0.182445325083 - 0.073169073146*I 0.526629778234 - 2.44921196136*I -0.0611173743234 0.0328052209071 - 0.31410438552*I][ 0.212531509846 - 0.139175472257*I -0.290229625822 + 0.0495369191798*I -0.310462909787 + 0.0426819593352*I 0.606094912748 + 1.42870697746*I 0.427425560764 1.31861129032 + 0.18322755822*I][ 0.246958205887 - 0.178939892902*I 0.0502526558852 + 0.0636903246597*I -0.186356226992 + 0.0548768048595*I 3.94508982443 + 1.83690897102*I 0.580785358049 -1.50377613912 + 0.23557828914*I][ 0.136424858425 - 0.0198822103225*I 0.150855906521 + 0.00707670273996*I -0.0171436154035 + 0.00609742276217*I 1.44629614295 + 0.20410099678*I -0.308507236482 0.317667350654 + 0.02617536546*I][22.6882379152 0.0 0.0 0.0 0.0 0.0][ 0.0 15.4453319487 0.0 0.0 0.0 0.0][ 0.0 0.0 13.0540540385 0.0 0.0 0.0][ 0.0 0.0 0.0 2.15350287071 0.0 0.0][ 0.0 0.0 0.0 0.0 7.23297372477 0.0][ 0.0 0.0 0.0 0.0 0.0 7.83094955548][ 0.21102366832 0.236418323159 + 0.451092318078*I 0.236418323159 - 0.451092318078*I -0.387573568455 -0.530366977883 0.0721858940987][ 0.710170194244 -0.223690062938 - 0.109302022921*I -0.223690062938 + 0.109302022921*I -0.010707520042 0.465744253529 -0.393265281438][ 0.172215095496 0.40911433557 - 0.0795960862327*I 0.40911433557 + 0.0795960862327*I 0.505205815034 -0.0253471675266 -0.605843555229][ 0.253189573285 -0.129394569377 - 0.439532082482*I -0.129394569377 + 0.439532082482*I -0.33449439368 -0.632640662105 0.0625421537636][ -0.409935191149 0.442379470826 0.442379470826 -0.5957281772 0.159670646892 -0.245289971364][ 0.24382950509 0.217966416653 - 0.204977966514*I 0.217966416653 + 0.204977966514*I -0.0122720377234 0.385542601946 0.782753358685]sage: print U*S*vh[ -3.54062088766 - 0.944424883601*I -1.43458951541 + 2.12099621607*I 4.04906448707 - 0.792270805235*I -5.10681439912 - 0.386021980006*I -7.93686326309 - 0.534573564604*I -2.67247377119 - 0.384999035153*I][ 4.18255465561 + 0.314808294534*I 4.56348730005 - 0.715891184657*I 2.73560263255 + 0.272982714379*I 3.82192058845 + 0.128673993335*I 0.607989140158 + 0.178191188201*I 5.39850196268 + 0.128333011718*I][ 7.86190399976 - 1.8888497672*I -6.61746163592 + 0.0944783165687*I 4.34984636905 + 2.5629725051*I 0.52533708573 - 0.772043960011*I 2.99885151988 - 1.06914712921*I -4.67144332179 - 0.769998070307*I][ -1.28296955706 + 1.10182903087*I 7.13294355447 - 0.477671131313*I 0.735347218242 - 1.07250851466*I -6.2734058413 + 0.450358976673*I -0.893476821182 + 0.623669158705*I 11.9723258273 + 0.449165541012*I][ -1.12771543763 + 1.4166373254*I 2.46080094492 + 0.319403538367*I -5.76468005881 - 2.31249165462*I -8.60872735564 + 0.579032970008*I -11.7926796241 + 0.801860346907*I -8.14371301451 + 0.57749855273*I][ 4.57922241403 + 0.157404147267*I -0.271944761837 - 0.83022971045*I -1.18588709558 + 0.608775475311*I -1.08066666723 + 0.0643369966676*I -1.9183745715 + 0.0890955941007*I 2.13204710436 + 0.0641665058589*I]
SVD구하기.hwp이전다음1개의 댓글이상구(LEE SANGGU)7월 18일 오후 4:41Superb ^^ Looks very good.이런식으로 실습공부하시면서 자신감을 가지고... 이제 동료와 dissscusion 하는 법만 배우면 ... 크게 성공 할 것입니다.
comment: SVD를 Sage코드를 통해서 구현하는 방법을 알 수 있었으며, Sage를 기반으로 SVD를 구하는 코드를 직접 구성해봄으로써, 작은 차원일 경우에는 손으로 높은 차원일 경우에는 다른 언어를 사용해서도 SVD를 구할 수 있을 것이라는 자신감을 얻을 수 있었습니다.
18. 동형사상, 선형변환, 선형연산자에 대한 질의응답
[Final OK by SGLee] Finalized by 오혜준, 양지슬, 유민솔, 이시원 : [2주차] 동형사상 질문
작성자:오혜준(2016####81)작성일:7월 23일 오후 5:05
조회수:27
양지슬 학우분의 질문내용에 달린 답변에 추가적인 답변으로 finalize하였습니다.
단사와 전사에 대해 좀더 쉽게 접근 할 수 있도록 정리하였습니다.
제가 첫번째 질문 쉽게 설명해드리겠습니다.전사의 경우 onto 인데, X(a1,a2,...,an)->Y(b1,b2,...bm)으로 갈때 Y의 원소들이 모두 짝을 갖게 되는 것입니다. 즉 Y의 원소의 경우 한개든 두개든 a를 갖게 되는 것이죠. 이는 정의역갯수>=공역개수가 됩니다.단사의 경우 one to one 인데 각 경우가 한개의 짝만 갖게 되는 것입니다. 그말은 Y의 원소가 모두 짝을 갖게 되는데 한개의 짝만 갖게 되는것입니다. 이는 정의역개수=<공역개수가 되는것입니다.근데 전사이면서 단사인 경우에는 위 수학적 조건 두가지 모두를 만족해야하고 모두 짝을 갖게되는데 한개의 짝만 갖게 되므로 m=n인 경우가 나오게 되는 것입니다.
-------------------
[2주차] 동형사상 질문
작성자:양지슬(2017####18)작성일:7월 23일 오후 3:26
조회수:22
2주차 학습이 학습목표에 미치지 못하는 것 같아 복습하며 요약, 실습 해보았습니다.
복습을 하며 몇가지 질문이 생겨 공유합니다.
· 선형변환
변환 – 입력(원상)과 출력(이미지)이 모두 벡터인 함수.
선형변환 – 변환
가
에 대해
,
두 가지 조건을 만족하면 선형변환이라고 한다.
선형변환
를 m×n행렬 A에 대해
로 나타낼 수 있다.
· 핵과 치역
T의 치역(range) - 변환
에 대해, 임의의
의 상
전체의 집합. ImT
전사(onto, surjective) -
. 임의의
에 대해
인
가 존재.
T의 핵(kernel) - T에 의한 상이
이 되는
안의 벡터 전체의 집합. kerT
단사(one-to-one, injective) - 변환
가
만족.
이 선형변환일 때, T가 단사일 필요충분조건은
동형사상(isomorphism) - 선형변환
가 단사이고 전사(전단사, bijective)이면
n=m이고, 변환 T를
에서
으로의 동형사상이라 한다.
질문 1. 선형변환 T가 단사이고 전사이면 n=m이 된다는 명제가 이해되지 않습니다.
질문 2. 아래 코드를 여러 번 실행해보았으나 "T is not bijective." 문구가 출력되는 경우를 찾지 못했습니다. 어떤 경우에서 해당 문구가 출력될 수 있을까요?
#랜덤 함수 생성
var('x,y,z')
a(x,y,z)=(ZZ.random_element(-10,10))*x+(ZZ.random_element(-10,10))*y+(ZZ.random_element(-10,10))*z
b(x,y,z)=(ZZ.random_element(-10,10))*x+(ZZ.random_element(-10,10))*y+(ZZ.random_element(-10,10))*z
c(x,y,z)=(ZZ.random_element(-10,10))*x+(ZZ.random_element(-10,10))*y+(ZZ.random_element(-10,10))*z
h(x,y,z)=[a(x,y,z), b(x,y,z), c(x,y,z)]
print("h(x,y,z)=", h(x,y,z))
# T의 표준행렬 구하기
T=linear_transformation(QQ^3, QQ^3, h) #선형변환T 정의
e1=vector([1, 0, 0])
e2=vector([0, 1, 0])
e3=vector([0, 0, 1])
print(column_matrix([T(e1), T(e2), T(e3)])) #T의 표준행렬
#동형사상 여부 확인
print(T.kernel()) #kernel 구하기
print()
print("T is injective?", T.is_injective()) #T 단사 여부
print()
print()
print(T.image()) #치역 구하기
print("T is surjective?", T.is_surjective()) #T 전사 여부
print()
print()
if T.is_injective()==true:
if T.is_surjective()==true:
print("T is bijective.")
else:
print("T is not bijective.")
else:
print("T is not bijective.")
유민솔(2021####66)7월 23일 오후 3:33
질문1 : 두 행렬이 전단사, 즉 동형사상이려면 차원이 같아야 하기 때문에 n=m이 성립해야 합니다!
유민솔(2021####66)7월 23일 오후 3:35
더하여 두 행렬이 동형사상이면 벡터에디션, 스텔라멀티플, 길이(norm)이 모두 보존되기 때문에, 이를 산업에 응용하면 하나의 연구로 유관된 모든 산업 문제에 대한 답을 줄 수 있다고 교수님이 언급하셨습니다.
이시원(2021####15)7월 23일 오후 3:54
질문2: A=[[1,0],[0,1],[0,0]]인 경우에 Ta : R^2->R^3인 경우에 T에서 is not bijective가 출력됩니다
양지슬(2017####18)7월 23일 오후 4:01
질문 1. 동형사상에서 차원이 같아야 하는 까닭을 좀 더 구체적으로 설명해주실 수 있으실까요?질문 2. 위의 코드에서는 T:R^3->R^3인 경우에 한정하여 살펴보고 있었습니다! 선형 연산자인 경우에서 bijective하지 않은 경우가 있는지를 질문하고자 했는데 질문이 너무 포괄적이었던 것 같네요.
유민솔(2021####66)7월 23일 오후 4:18
질문1. 단사의 경우, 일대일 대응전사의 경우, T : R^n->R^m일 경우에 R^m안에 있는 임의의 벡터 v에 대해 언제나 pre image가 domain(R^n)안에 있어야 한다인데, 그러면 R^n R^m의 요소가 하나씩 짝지어져야 하기 때문에 차원이 같아야 한다고 이해했습니다. 잘못된 점이 있다면 다른 분이 지적해주세요!
이시원(2021####15)7월 23일 오후 4:27
R^n->R^n상의 선형연산자인 경우에서는 T가 단사라는 말과 T가 전사라는 말이 동치이므로 is not bijective가 나오지 않을것 같습니다.
정현목(2016####80)7월 23일 오후 4:37
질문1. 선형변환 T : Rn -> Rm에서 단사는 이미지가 같으면 프리이미지가 같음을 의미하고 전사는 임의의 벡터에 대해 이미지가 존재하면 프리이미지가 정의역에 존재함을 의미하기 때문에 전사이면서 동시에 단사이려면 정의역과 공역의 차원이 같아져야 합니다. 따라서 n = m이 성립해야 하고 이때 n에서 n으로 가는 변환 T를 동형사상이라고 합니다.
오혜준(2016####81)7월 23일 오후 5:02
제가 첫번째 질문 쉽게 설명해드리겠습니다.전사의 경우 onto 인데, X(a1,a2,...,an)->Y(b1,b2,...bm)으로 갈때 Y의 원소들이 모두 짝을 갖게 되는 것입니다. 즉 Y의 원소의 경우 한개든 두개든 a를 갖게 되는 것이죠. 이는 정의역갯수>=공역개수가 됩니다.단사의 경우 one to one 인데 각 경우가 한개의 짝만 갖게 되는 것입니다. 그말은 Y의 원소가 모두 짝을 갖게 되는데 한개의 짝만 갖게 되는것입니다. 이는 정의역개수=<공역개수가 되는것입니다.근데 전사이면서 단사인 경우에는 위 수학적 조건 두가지 모두를 만족해야하고 모두 짝을 갖게되는데 한개의 짝만 갖게 되므로 m=n인 경우가 나오게 되는 것입니다.
comment: 동형사상이라 부르는 상황이 정확히 어떠한 상황인지에 대해서 알 수 있었으며, R^n->R^n에서 전사와 단사의 관계에 대해서도 학습하게 되었습니다.
19. 핵과 치역, 전단사의 관계 및 고유값과 고유벡터에 대한 질의응답
[2주차 질문] 전단사와 동형사상
작성자 : 권서영(2020####27)작성일 : 7월 14일 오후 1:49
조회수 : 35
동형사상(isomorphism)은 선형변환 T가 전단사이며 n=m, dimension이 같을 때를 의미한다고 배웠습니다. 그리고 kerT={0}가 단사의 필요충분조건이라고도 배웠습니다.
그러면 사실 단사는 전사에 포함되는 것 이 아닌가요?
단사인 T는 무조건 동형사상이며, 단사라는 것은 (전)단사라는 의미를 함축하나요?
*The function f is onto if the equation f(x)=b has at least one solution for every right-hand side b.
It is one-to-one if the equation f(x)=b has at most one solution for each right-hand side b.
찾아보니 이런 정의가 있더라고요.
그래서 단사가 사실은 (전)단사라는 용어를 줄여 쓰는 것이 아닌가 싶었습니다. 또한 단사이면 무조건 동형사상인지도 궁금합니다.
이전
다음
3개의 댓글
이시원(2021####15)7월 14일 오후 3:03
http://matrix.skku.ac.kr/math4ai/part1/에서 선형변형이 단사일 필요충분조건 예제 4번에서 A=[[1, 0], [0, 1], [0, 0]]인 경우 Ta = R^2->R^3일 때에 단사이나 전사가 아닌 것을 보일 수 있으며, 단사와 전단사라는 용어는 다른 용어입니다. 전단사라는 용어는 전사와 단사가 동시에 성립하는 경우를 지칭하는 용어입니다.
이상구(LEE SANGGU)7월 14일 오후 3:18
1. 전사와 단사는 부분집합 관계가 아니라 두개의 다른 정의입니다. 2. 단사인 T 가 동시에 전사가 아니면 절대로 동형사상이 될 수 없습니다. 3. 단사라는 것은 (전)단사라는 의미 가 아니라, 단지 단사(one-to-one, injection) 이라는 의미이며, 전사 (onto, surjection) 는 다른 정의입니다. 4. 전사이면서 단사인 함수를 전단사(bijectioin)함수 라고 합니다.
권서영(2020####27)7월 18일 오전 10:54
감사합니다! 단사함수를 헷갈린 것 같습니다. 단사는 정의역의 갯수가 공역의 갯수보다 작거나 같은 것을 의미한다는 것을 헷갈렸네요! 전단사 함수는 차원이 같을 때 발생하는 정의인 것도 깨달았습니다 :)
[Final OK by TA] Re-finalized by 정수인, 권서영 (질문: 핵과 치역, 전단사의 관계 & 고윳값, 고유벡터 by 정수인)
작성자 : 임동선(2017####79)작성일 : 7월 26일 오전 10:58
조회수 : 5
[2주차] 2가지 질문이 있습니다
작성자 : 정수인(2019####70)작성일 : 7월 18일 오전 11:19
1. 핵과 치역 부분에서 kerT={0}의 개념까지는 충분히 이해됐는데, 코드부분 ker의 span [1, 1/3, 1/3] 에서 전, 단사 유무를 확인하는 개념이 정확히 이해가 안 돼서요. [] 내부의 값들이 0벡터말고 더 있다는 걸 지칭하는 것인가요?
2. 고윳값과 고유벡터 중에서 ‘ A의 서로 다른 고윳값들에 대응하는 고유벡터들은 모두 일차독립이다.’ 증명 위해 내적을 구해보려했는데 고윳값 고유벡터를 어떻게 활용해야할지 감이 잡히지 않아서 어떻게 흐름을 잡아나가면 좋을지 여쭈고 싶습니다.
권서영(2020####27)7월 18일 오전 11:40
1. 궁수들에게 활이 하나씩 있다고 가정합니다. 전사 (surjective/ onto)함수란 "과녁에 화살이 2개, 3개가 꽂히던 상관없으니 빈 과녁이 없게하라"라는 뜻입니다. |x| >= |y| (갯수)가 됩니다. 단사 (injective, one to one)함수는 "빈과녁이 있어도 좋으니 2발 이상 맞는 과녁이 없도록 하라"는 뜻입니다. |x| <= |y|가 됩니다. 그렇게 생각을 했을 때 kernel은 함수값이 0이 되는 벡터스페이스 v의 원소 v들의 집합입니다. ker T는 T(v1) = 0, T(v2) = 0, (Tv3) = 0이라 했을 때 ker T = {v1, v2,v3}가 됩니다. 이때 v1, v2, v3가 1, 1/3, 1/3이 될 수도 있겠죠. ker T = {0}이란 뜻은 함수가 단사라는 뜻입니다. 단사는 "빈과녁이 있어도 좋으니 과녁에 최대 한 개의 화살만 있도록 하라"이기 때문에 함수값이 0이 되는 벡터는 오직 0벡터 하나 뿐입니다. 따라서 전사이면 핵 값이 0벡터보다 다양할 수 있습니다. 출처 및 참고: 네이버 블로그 GD park manager 2. 고윳값과 고유벡터들은 벡터들이 차원에서 선형변환을 할 때 절대 변하지 않는 값들을 얘기합니다. https://www.youtube.com/watch?v=PFDu9oVAE-g 영상 시청 추천드립니다! 저도 이 영상 덕을 많이 봤습니다. ㅎㅎ
이상구(LEE SANGGU)7월 18일 오전 11:51
1번 맞습니다. 커널을 구하라고 명령어를 주었더니 영아닌 벡터를 받았다면. 당연히 그 커널안에 그 영아니 벡터들의 상수배를 포함 무수히 많은 영아니 벡터가 있다는 말이니, 단사가 아니라는 것은 바로 인식 하셨을 것입니다.
답 2 ‘ A의 서로 다른 고윳값들에 대응하는 고유벡터들은 모두 일차독립이다.’
우선 http://matrix.skku.ac.kr/MT-04/chp6/3p.html
보세요. 구체적인 증명 입니다.
이상구(LEE SANGGU)7월 18일 오전 11:56
2번 은 모든 표준 선형대수학 책에 있는 쉬운 증명 중 하나인데 ... 우리 math4ai 는 그런 세세햐 증명을 가르치는 것 보다는 빅데이터를 다루는 능력 ... 이 강좌 의 goal 이고 그 과정에서 관심 가진 위의 추가 설명은 우선 http://matrix.skku.ac.kr/MT-04/chp6/3p.html 나 http://matrix.skku.ac.kr/2020-Mid-PBL-1/ 에서 내가 작년에 설명한 내용 있을 것이니 우선 보고있으세요 추가로 구체적인 증명 나나 조교님이 add 해 줄께요.
이상구(LEE SANGGU)7월 18일 오전 11:58
여기 증명 있습니다.
https://m.blog.naver.com/ldj1725/220262866094 에도 교수님이 제시한 증명을 우리말로 다시 설명한 증명이 있습니다. https://ghebook.blogspot.com/2020/07/eigenvalue-and-eigenvector-of-matrix.html?m=1
전단사와 동형사상에 대하여
권서영
“동형사상은 벡터공간의 대수적 구조를 보존한다. 기하학적 구조는 각도와 거리의 개념에 의존한다. 따라서 궁극적으로 내적에 관해서 그러하다. 만일에 V와 W가 유한차원인 내적공간이면 T: V -> W는 V와 W사이의 동형사상이 존재하며 <u, v>v = <T(U), T(V)>w이면 내적공간의 동형사상이다. 즉 V에 속하는 u와 v의 내적은 W에 속하는 그 상(image)들의 내적과 같다.”
동형사상은 대수적으로 이해해야 한다. 얼마전에 읽은 김민형 교수의 ‘수학이 필요한 순간’에서 배운 오일러수라는 개념이 떠올랐다. 도넛과 비슷한 모형, 토끼와 비슷한 모형을 위상수학(Topology)의 관점에서 이해한 게 인상깊었다. 근데 동형사상을 공부할수록 대수적으로 유지한다는 개념이 오일러수의 개념과 비슷하다는 생각이 들었다. 찾아보니 오일러수가 같은 모형은 위상동형이라고 한다는 것이다. 덕분에 동형사상에 대해 이해가 됐다. 학우분들께도 오일러수가 등장하는 단원만 읽어보기를 권한다.
출처
1. 알기쉬운 선형대수 이장우 역 Howard Anton
comment: 전사가 가르키는 상황은 어떠한 것인지, 단사가 가르키는 상황은 어떠한 것인지에 대한 개념을 학습할 수 있었습니다.
20. SVD의 실제 데이터의 적용 및 Sage 실습 정리
Final OK by SGLee] Re-Finalized by 이시원, 오혜준, 강덕재, 유민솔 : [2주차] SVD 정리와 파이썬을 이용한 SVD 구현과 실제 데이터 분석의 적용+Sage 실습 정리
작성자:이시원(2021####15)작성일:7월 25일 오후 12:19
조회수:16
안녕하세요 저는 SVD의 핵심 내용을 정리하고 파이썬 코드로 SVD를 구현하고 실제 데이터에 적용하는 코드를 정리해보았습니다.
이에 추가적으로 강덕재학우와 유민솔 학우분께서 정리해주신 sage 코드를 추가하여
SVD를 sage와 python 모두 실습할수 있도록 추가하였습니다.
----------------------------
[2주차] SVD 정리와 파이썬을 이용한 SVD 구현과 실제 데이터 분석의 적용
작성자:오혜준(2016####81)작성일:7월 13일 오후 11:31
조회수:21
안녕하세요 이번 SVD 수업을 들으면서 좀 더 깊게 알아보기 위해 조사하던 중 PCA(강의 계획표를 보니 나중에 배우는 거더군요)와의 관계를 알게 되었습니다.
이번 정리에서는 SVD에 대하여 정리를 하고 파이썬으로 SVD를 구현해보았습니다.
마지막으로 svd가 pca와 관련하여 실제 데이터에서는 어떻게 사용될 수 있는지 파이썬 코드로 간단하게 작성해보았습니다.
데이터의 차원 축소에 대하여 단순히 코드를 사용하는 것이 아니라 numpy를 통해 svd부터 구현해보고 수업에서 배운 내용이 사용되는 걸 적용해보며
수학적인 원리를 제대로 이해하게 된 계기가 되었던 것 같습니다. 감사합니다.
이상구(LEE SANGGU)7월 14일 오후 12:49
예습까지 하셨군요^^ 잘했습니다. 맞습니다. 통계까지 배우고 공분산 행렬 배운 후 PCA 는 그 후에 학습 합니다^^
[2주차]SVD실습 by 강덕재 and 유민솔
작성자:유민솔(2021####66)작성일:7월 23일 오후 5:03 조회수:13
강덕재 학우님이 올려주신 SVD관련 내용에 실습(7차 행렬을 SVD분해) 내용을 추가했습니다.
이상구(LEE SANGGU)7월 23일 오후 7:56
,누가 Finalize 하세요
2주차 SVD의 정리와 파이썬 구현.pdf SVD실습-1.hwp
__________________________________________________________________
해당 글을 읽던 중 SVD실습 Sage코드 부분에서 출력되고 있는 명령어가 eigenvectors_right()임을 확인했고 이 부분을 이용해 U,S,V를 구하는 Sage코드를 추가하여 코드 부분을 수정하여 Re-finalize합니다.
특이값 분해(SVD, Singular Value Decomposition)
1. 요약
SVD는 대각화 가능한 정사각행렬(대칭행렬)에 대해서만 적용할 수 있는 고윳값 분해를 일반적인 행렬에 대해서 적용가능하도록 한 행렬분해.
실수행렬 A에 대해서, 다음을 만족하는 직교행렬 U, V와 대각선행렬
가 존재한다.
이를 A에 대한 식으로는 다음과 같이 나타낼 수 있는데,
의 대각선 성분들을 행렬 A의 특이값이라고 한다.
V는 대칭행렬
를 직교대각화하는
직교행렬이고,
U는 대칭행렬
를 직교대각화하는
직교행렬이다.
2. SVD의 기하학적 의미
행렬을 좌표공간에서의 선형변환으로 봤을 때, 직교행렬의 기하학적 의미는 회전변환(rotation transformation)이거나 반전된(reflected) 회전변환이고, 대각행렬의 기하학적 의미는 각 좌표성분으로의 스케일 변환(scale transformation)이다.
이때 U와 V에 의한 선형변환은 도형을 회전시키기만 하기에 바뀐 모양은 대각행렬에 의해서 결정된다고 볼 수 있다. 즉 행렬의 특이값이란 이 행렬로 표현되는 선형변환의 스케일 변환을 나타내는 값이라고 볼 수 있다.
3. Reduved SVD를 통한 행렬근사
위
처럼 A를 SVD분해한 것을 full SVD라고 한다.
여기서 행렬
의 비대각 부분(영행렬)부분을 지우고, 해당 부분과 곱해지는 U의 부분을 지워도 여전히 행렬곱의 결과는 A가 나옵니다. 이를 thin SVD라고 합니다.
그리고 thin SVD에서 행렬
의 대각 성분 중 0인 부분을 모두 제거하고, 이와 곱해지는 U와 V의 요소 또한 제거해도 행렬곱의 결과는 A로 유지됩니다. 이를 compact SVD라고 합니다.
그리고 여기에서 행렬
의 대각 성분을 더 줄여서 상위 t개만 골라내고 이에 해당하는 U와 V의 요소들을 줄인 경우 행렬곱의 결과는 A와 달라지지만, A에 근사한 행렬
을 만들 수 있게 됩니다. 이를 truncated SVD라고 합니다.
이는 완전히 결과를 보존하지는 않지만 훨씬 적은 데이터만으로도 기존 행렬의 근사행렬을 만들 수 있다는 점에서 의미가 있습니다. 이를 이용해 데이터의 노이즈 제거, 데이터 압축 등이 가능합니다.
4. SVD 실습 : 7차 행렬의 특잇값분해 구하기
(1) 대각화 불가능한 7차 행렬인 행렬A를 고윳값 분해와 유사한 행렬 분해인 SVD를 이용해 A의 right singular vector을 구했습니다. sage 코드로 구현했습니다.
-입력
:
A=matrix(ZZ,[[3,2,3,4,3,2,2],[2,4,3,1,2,3,2],[2,2,1,2,4,3,1],[3,4,2,5,3,2,3],[4,4,1,2,3,2,1],[1,2,1,3,1,3,2],[1,2,3,2,3,4,1]])
(1)
A=matrix(RDF,[[3,2,3,4,3,2,2],[2,4,3,1,2,3,2],[2,2,1,2,4,3,1],[3,4,2,5,3,2,3],[4,4,1,2,3,2,1],[1,2,1,3,1,3,2],[1,2,3,2,3,4,1]])
U,S,V = A.SVD()
print U*S*V
[ 2.34860557095 -2.11178935319 3.8063773067 -2.33752501468 0.993319381358 3.70695384505 3.21615857848]
[ 4.07191143218 -3.10270669847 2.556812328 -0.298799222998 1.67843827504 3.26341078954 0.836165743778]
[ 1.58049017855 -1.41841188334 4.01395525783 0.660498461876 1.75877015786 3.15495311623 2.21247866903]
[ 1.77345108721 -3.60162353265 3.14358851136 -2.31969301504 1.96171224211 5.45689250438 3.31572978879]
[ 2.7295099372 -1.14850087833 2.31137828883 -0.473511136697 3.3423615543 4.53856931122 2.21224923826]
[ 1.26314710293 -2.56249124285 1.99908706662 -0.209050584015 -0.487851448779 3.74361131034 1.59543790261]
[ 2.86320766057 -2.25219900856 4.605046428 0.104853318565 0.165293036726 2.90242443591 1.02995402894]
(2)
A=matrix(RDF,[[3,2,3,4,3,2,2],[2,4,3,1,2,3,2],[2,2,1,2,4,3,1],[3,4,2,5,3,2,3],[4,4,1,2,3,2,1],[1,2,1,3,1,3,2],[1,2,3,2,3,4,1]])
B = A.transpose()*A
eig = B.eigenvalues()
sv = [sqrt(i) for i in eig]
temp = A.eigenvectors_right()
length = 0
x1 = list(temp[0][1][0])
x1 = vector(x1)
v = matrix(x1)
X = v.transpose()
for i in range(0,len(temp)):
for j in range(0,len(temp[i][1])):
length+=1
if i==0 and j==0:
continue
v = list(temp[i][1][j])
v = vector(v)
v = matrix(v)
X = X.augment(v.transpose())
G = X
vh = matrix([1/G.row(j).norm()*G.row(j) for j in range(0,length)])
U = matrix([A*vh.row(j)/sv[j] for j in range(0,length)]).transpose()
S = diagonal_matrix(sv)
print U*S*vh
[ 3.7619974588 + 0.210524399256*I 3.4343113125 + 0.949115973531*I
2.55258166983 - 0.679449423304*I 3.55819875733 - 0.28742444778*I
3.02007734572 + 0.792595938689*I 3.49465272285 - 1.01496575625*I
3.29524036162 + 0.244690455363*I]
[ 3.13004889721 - 0.210524399256*I 3.56415949638 + 0.316411319107*I
4.44588913904 - 0.586077869334*I 0.680918194279 + 0.28742444778*I
3.3150229833 + 1.57334314636*I 2.84044760616 - 1.3509733288*I
3.69300373841 - 0.244690455363*I]
[ 3.11126554993 - 0.0611235058623*I 0.720676876114 + 0.817490234165*I
1.6148102861 - 0.37106231873*I 1.35586372735 + 0.104070711793*I
4.81822919897 + 0.303721293373*I 5.30520834343 - 0.319022903936*I
1.90648209333 + 0.203667727061*I]
[ 3.74873902885 - 0.196947458421*I 2.99391498295 + 1.30111355437*I
4.77597991926 - 0.766304956336*I 4.64626532718 + 0.29981829158*I
2.80355792728 + 1.25942293357*I 3.2967389554 - 1.17119044064*I
4.35172675442 + 0.18315636291*I]
[ 5.023606553 - 0.332771410981*I 1.32208435042 + 0.619069590757*I
3.99208081305 + 0.00411968988448*I 1.33847005707 + 0.495565871366*I
3.30884104912 + 1.03353923715*I 3.8082239609 - 0.841772640724*I
2.60545500887 + 0.162644998759*I]
[ 1.54009136264 - 0.285224845953*I 1.43786269294 + 0.436178397868*I
2.31339045194 - 1.06389218093*I 2.78773691934 + 0.379101315773*I
3.03670537383 + 0.718030212075*I 2.0813527359 - 0.376824680458*I
2.54618708145 - 0.468869546575*I]
[ 2.05408544205 + 0.0611235058623*I 2.77419681327 + 0.595266953893*I
1.88006340328 - 1.04169486933*I 1.59614670986 - 0.104070711793*I
4.87424626362 + 0.60236969007*I 4.38726711917 - 0.587068079507*I
2.30307293349 – 0.203667727061*I]
[SVD]
특이값 분해는 정방 행렬에 대해서만 가능한 고유값 분해와 다르게 행과 열의 크기가 다른 행렬 에 대해서도 적용될 수 있습니다. 그림으로 보면 다음과 같습니다.
m x n 크기의 행렬 A를 위와 같이 분해하는 것을 의미합니다. m x n 크기의 행렬 A는 m x m 크 기의 행렬 U와 m x n 크기의 ∑ 그리고 n x n 크기의 Vt로 분해됩니다. 이때 행렬 U와 V에 속한 벡터를 특이 벡터(Singular Vector)라 합니다. 모든 특이 벡터는 서로 직교하는 성질을 가집니다. ∑ 는 직사각 대각 행렬이며, 행렬의 대각에 위치한 값만 0이 아니고 나머지 위치의 값은 모두 0입 니다. 이때 ∑의 0이 아닌 대각 원소 값을 특이 값(Singular Value)이라고 합니다.
A = U ∑ Vt 를 하나하나 살펴보면 아래와 같습니다.
U는 AAt를 고유값 분해해서 얻은 직교 행렬이며, V는 AtA를 고유값 분해해서 얻은 직교 행렬입니 다.
[파이썬으로 SVD 구현해보기]
numpy함수를 사용하여 쉽게 svd를 구현할 수 있습니다.
우선 np.matrix함수를 사용하여 행렬 A를 만들어주고 np.linalg.svd(A)로 svd 분해를 진행해줍니다. U,s,V 3개로 각각 나눌 수 있고 프린트하여 아래와 같이 확인할 수 있었습니다.
[실제 데이터에 SVD 적용해서 데이터 차원 축소 해보기]
1) 샘플데이터
- Input 데이터 : ‘calory’, ‘breakfast’, ‘lunch’, ‘dinner’, ‘exercise’
- Output 데이터 : ‘body_shape’
식습관, 운동습관과 체형과의 관계를 나타낸 간단한 데이터입니다. 아래와 같은 코드로 데이터를 표현해보았습니다.
이후 SVD를 계산하기 위해 사이킷런의 Standardscaler.fit_transform함수를 통해서 표준화를 시켜 주고 numpy.cov 함수를 통해 공분산행렬을 구해줍니다.
StandardScaler().fit_transform(matrix) np.cov(matrix)
고유값과 고유벡터는 np.linalg.eig(covariance_matrix)함수를 사용하여 간단하게 구할 수 있습니다.
또한 np.linalg.svd(covariance_matrix)함수를 사용하면 특이값 분해를 할 수 있는데 가운데 s값이 고유값이 됨을 알 수 있습니다. 이를 np.linalg.eig(covariance_matrix)로 구한 고유값과 비교했을 때 동일함을 알 수 있습니다.



여기서 부터는 PCA에 관한 내용입니다. 미리 예습한다 생각하고 코드를 작성해보았습니다.
가장 첫번째 고유값에 대하여 표준화 시킨 x에 곱해주면 첫번째 주성분이 아래와 같이 나오게 됩 니다. 이를 PC1이라고 부르고 표와 그래프로 시각화하여 나타내 보았습니다.

특이값 분해를 통해 주성분을 구했던 과정을 sklearn의 PCA 함수를 사용하여 간단한 코드로 주성 분을 찾아낼 수 있는데 위의 결과와 동일함을 알 수 있었습니다.
\
이처럼 이번 강의에서 배운 수학적 원리를 바탕으로 실제 데이터 분석에서 데이터의 차원 축소를 위해 사용된다는 것을 알게 되었고 단순하게 함수를 사용하는 것이 아니라 데이터의 행렬을 구하 고 원리를 이해하며 numpy를 사용하여 특이값 분해를 구현해 볼 수 있는 계기가 되었습니다.
comment: SVD가 왜 중요한지에 대한 질문에 대해서 큰 차원의 데이터를 많이 다루게 되는 현대사회에서 데이터의 차원을 축소시키고, 연산의 효율성을 높일 수 있는 기술이라는 것을 알게 되었습니다. 또한, SVD가 실제로 어떠한 상황에서 사용되는지에 관한 예시에 대해서도 학습하면서 머신런닝과 같은 모델 학습에서의 SVD의 중요성에 대해서 인식하게 되었습니다.
21. 2주차 요약 및 정리
[Final OK by TA] Re-finalized by 권서우 and 이지용 and 김보민 and 권서영 and 이시원 and 유민솔 and 김태윤 and 이상구교수님 (2주차 요약 및 정리)
작성자:임동선(2017####79)작성일:7월 28일 오전 10:49
조회수:13
2주차 요약을 하며 학우분들께서 올려주신 요약 내용을 보다 이해가 잘 되지 않는 부분이 있어 알아보고 도움될만한 사이트를 올립니다.
[선형대수-2] 이차형식과 행렬 대각화 : 고유값에 따른 타원곡선의 결정 (tistory.com)
앞선 요약 및 정리 내용에서 교수님께서 이차형식을 만드는 과정이 축이동과 회전이라고 해주신 점을 위 사이트에서 그림과 함께 보니 더욱 이해가 잘 되었습니다.
또한 타원에서 축의 방향이 고유 벡터의 방향과 같으며, 축의 길이는 고유 벡터의 제곱근의 역수임 또한 알 수 있었습니다.
[Final OK by SGLee] Re-finalized by 권서우 and 이지용 and 김보민 and 권서영 and 이시원 and 유민솔 and 이상구교수님 (2주차 요약 및 정리)
작성자:유민솔(2021####66)작성일:7월 23일 오후 4:31
조회수:20
학우님들이 요약해주신 2주차 내용에 선형 변환과 표준 행렬, 고윳값을 구하는 방법을 추가했습니다.
이시원 학우님이 올려주신 한글 파일에 내용 추가해서 올립니다!
선형 변환
-변환(Transformation):입력과 출력이 모두 벡터인 함수
-w = T(x): R^n에서R^m으로의 변환에서의 벡터x의T에 대한 이미지
-x =벡터w의 원상
코드:
인 상황에서 linear_transformat(QQ^2,QQ^3,A)
행렬 변환
->모든 선형 변환
는 행렬 변환으로 나타내기 가능
- A가m x n행렬
-Tₐ(x) = Ax, x∊R^n인Tₐ: R^n -> R^m
선형 변환을 만족하는 두 조건
(1) T(u+v) = T(u) + T(v)
->vector edition 보존
(2) T(ku) = kT(u)
->scalar multiple 보존
-의의
->행렬 A를 QR로 쓰기 가능하다.
->행렬 A를 단순화(삼각행렬 OR 대각선 행렬)시켜서 나타내기 가능하다
-A(x)=B를 풀 때 A를 RREF로 바꿔서 풀이가 가능하다.
선형 연산자: T: R^n -> R^n (자신으로의 변환)
T(x) = Ax로 나타내는 경우: R^n에서R^m으로의 모든 선형변환
T(x) = Ax일 때, A는 선형 변환T의 표준행렬
표준행렬: 모든 선형변환
은 행렬변환 T(x) = Ax로 나타낼 수 있고, 이때의 행렬 A를 표준행렬이라고 부르며 [T]와 같이 표기하기도 한다.
이때의 A = [T(e1):T(e2):....:T(en)]이다.
핵(kernel)
- T: R^n -> R^m이 선형 변환일 때, T에 의한 상이0이 되는R^n안의 벡터 전체 집합
-kerT로 나타냄
-코드: T.kernel()
단사:변환T: R^n -> R^m을 만족할 때
-단사확인코드: T.is_injective()
치역
-선형 변환T: R^n -> R^m임의의v∊R^n의 상T(v)의 전체 집합
-Im T로 나타냄
-코드: T.image()
전사: Im T = R^m
-확인 코드: T.is_surjective()
동형사상:선형 변환T가 단사&전사--> n = m --> T를R^n에서R^n으로의 동형사상
-동형사상인 경우 vector addition, scalar multiple, norm이 보존된다.
->하나의 연구로 유관된 모든 산업에 적용시킬 수 있다.
고윳값과고유 벡터
-0이 아닌 벡터x∊R^n이 적당한 스칼라 ⋋에 대하여Ax=⋋x를 만족하는 경우:⋋는A의 고윳값, x는 고유벡터(A가n차의 정사각행렬)
행렬A의 고윳값과 고유 벡터를 구하는Sage코드
A = matrix([[1, 2, 2], [1, 2, -1], [3, -3, 0]])
print(A.eigenvalues()) ->A의 고윳값 구해짐
print(A.eigenvectors_right()) ->고윳값,고유벡터,중복도 순서로 출력됨
+이외에도 RREF, QR분해로 풀이가 가능하다.
주의할 점: A의 서로 다른 고윳값들에 대응하는 고유벡터들은 모두 일차독립,서로 직교한다.
닮음 행렬
B = P^(-1)AP
-->정사각행렬A,B과 가역행렬P
--> B~A: B와A는 닮음 행렬
모든 행렬:주대각선 성분이 고윳값인 삼각행렬과 닮음
닮음행렬들은 행렬식이 같음-->특성방정식,고윳값이 같음
행렬문제는 좀 더 단순한 모양의 닮음행렬을 찾아서 쉽게 처리할 수 있음
대각화가능한 행렬
P^(-1)AP가 대각선행렬일 때(A는 대각선행렬과 닮은 행렬, P는 가역행렬)
--> A는 대각화가능한 행렬
--> P는 대각화하는 행렬
대각화가능의 조건
(1) A가n개의 일차독립의 고유벡터를 가짐
(2) A는 고윳값 ⋋₁,⋋₂, ... ,⋋ₙ을 주대각성분으로 갖는 대각선행렬D와 닮은 행렬
대각화하는P를 구하는 과정
(1) A의n개의 일차 독립 고유벡터p^1, p^2, ... p^n을 구함
(2) p^1, p^2, ... p^n을 열벡터로 가지는 행렬P만듦
(3) D는A의 대응하는 고윳값을 순서대로 주대각성분으로 갖는 대각선행렬
직교대각화
직교행렬: A^(-1) = A^T일 때의 행렬A
직교행렬A가 만족하는 조건들
(1)행렬A의 행벡터들은 직교+정규벡터
(2)행렬A의 열벡터들은 직교+정규벡터
(3) A는 가역행렬
(4) || Ax || = || x || -->길이 보존
--> A^(-1) = A^T
직교 대각화
A와C의 직교 닮음: C = P^TAP (A와C는 같은 크기의 정사각행렬, P는 직교행렬)
정사각행렬A를 대각화하는 행렬P --> A는 직교대각화가능, P는A를 직교대각화하는 행렬
[2주차]직교대각화문제풀어보기
작성자:이지용(2021####83)작성일:7월13일오후5:49
조회수:26
수업을들으면서왜|λI3-A|가λ(λ+3)(λ-6)=0이나오는지이해가안되서풀어보았습니다.
그래서왜λ=-3,0,6이나오는지이해가갔습니다.
그리고풀어보는김에나머지문제도풀어보았습니다.
sage에서A.eigenvectors_vectors()를쳤더니
고유백터는λ=6에서[(0,1,1)]이,λ=0에서[(1,-1/2,1/2)]이,λ=6에서[(1,1,-1)]이나왔습니다.
그래서x값을둘려는데예제풀이와저의x값이다르더군요. A의고유백터x가x⋲R이면kx도A의고유백터이라는성질을이용한것같았군요.
그리고D에서의λ수의순서에따라서도x값이달라졌습니다.
또x를달리둠에따라서P도달라졌습니다.
하지만P^(-1)*A*P=D가적용되는것는마찬가지였습니다.
sage를이용해서다시한번풀어보니다음과같이답이나왔습니다.
P에속한수들이깔끔한유리수로구성되있었습니다.
아까푼P과많이다르면서훨씬깔끔했습니다.
이과정을하면서저는행렬A를대각화하는행렬P는하나가아닌여러가지로나올수있다는것을알게되었습니다.
행렬A를대각화하며대각선행렬D를이경우6가지가나올수있었습니다.
x값의경우kx값을이용할것이냐,이용한다면k값은무엇이냐에따라서계산과정이달라지고
그리고D=P^(-1)*A*P를만족하는P는그보다많은경우의수가있을수있다는것을알게되었습니다.
[2주차] Part 1강의요약,질문
작성자:김보민(2020####50)작성일:7월15일오전1:04
조회수:36
이번주차강의수강후간단히용어중심으로필기해보았습니다!
굿노트로손필기하다보니배경이있었는데배경을삭제해달라는요청이있어배경제외후pdf로업로드했습니다!
실습은추후에이번주내로올리도록하겠습니다.
제가이번주차에이해가잘되지않았던부분으로는대칭행렬에서직교대각화를이용해교차항을제거할수있다는부분이었습니다.
이부분에대해서혹시쉽게설명해주실수있는학우님이있으시다면감사하겠습니다!
이상구(LEE SANGGU)7월15일오전6:39
자세히보시면2변수함수의이차형식만드는과정이축이동과회전이고이를통해완전제곱식은만드는과정인것을일수있습니다. 1.축이동2.회전이것을n변수를갖는함수에대해하는것이행렬의대각화입니다.교차항을없애는과정이off diagonal성분을0으로만들고대각선성분만남게하는과정입니다.행렬의대각화그래서중요하고,다음으로더쉬운대칭행렬의직교대각화를배웁니다이것을알면math4ai에필수인SVD는대칭행렬의직교대각화에서바로나옵니다.제일쉽습니다.
이지용(2021####83)7월15일오전8:30
예를들어서x^2+xy+y^2를직교대각화하면x^2+xy+y^2은A=[[1,1/2],[1/2,1]]의고윳값은3/2,1/2가나오고P=[[1/sqrt(2),1/sqrt(2)],[1/sqrt(2),-(1/sqrt(2))]]가되어서x'=sqrt(2)/2*(x+y), y'=sqrt(2)/2*(x-y )이므로위식은3/2*x'^2 +1/2*y'^2로바꿀수있습니다.그리고x^2+3xy+y^2를직교대각화하면그식에서A=[[1,3/2],[3/2,1]]의고윳값은5/2,-1/2이고P=[[1/sqrt(2),1/sqrt(2)],[1/sqrt(2),-(1/sqrt(2))]]가되어서x'=sqrt(2)/2*(x-y), y'=sqrt(2)/2*(x+y )으로놓고위식은-1/2*x'^2 +5/2*y'^2로바꿀수있습니다.
이상구(LEE SANGGU)7월15일오전10:14
잘했습니다. 2차원또는3차원에서의손으로계산하는방법은고등학교에서배우는방법입니다.대학에서그리고Math4AI에서우리는n차원공간에서얘기를시작하니까...다른접근이필요합니다.이차형식에서극값이위로볼록인지아래로볼록인지saddle point인지를이차형식에서유도된행렬A의고윳값을이용하여구합니다. n차원... n개의변수를갖는함수에대하여...극대극소를구하는것이Goal이므로고교시절의방법으로는불가능합니다.따라서이차형식그리고극대극소와고윳값에대한관계를이해하셨다고선언하셔야...이문제의답을얻으tlf것이랍니다.다음주월요일OH시간조절하여꼭참석하세요.중요한내용들알려줄께요^^
권서영(2020####27)7월18일오전11:16
저는이부분공부하면서2차방정식근의공식유도하는방식과일반형,표준형을떠올리며이해했습니다.표준형은공식의형태를봤을때y절편이나해를바로알수있는장점이있고교차항이존재하지않습니다.또한가장높은차원의미지수만남아있습니다.그래서일반형에서표준형으로바꿀때사용하는완전제곱식방식을떠올리면이해하기편하실겁니다!이를생각했을때행렬의대각선부분만남게되는것은어떻게보면차원들의기저를구하는방식이아닌가라는생각이들었습니다.행렬을벡터들의집합이라생각했을때그차원에알맞은열의크기중딱한값만남기고나머지는0이되니벡터가다른y , z축값은0이며x축값만가지게될테니말입니다!확실치는않지만행렬의대각화=기저형태로바꾸는방법이라이해했습니다.
([2주차]개념요약작성자:권서우(2020####52)작성일:7월22일오후11:01)이어서:
직교 대각화의 조건
(1) A가 대칭행렬
고윳값 분해
P^(-1)AP = D <-> A = PDP^(-1)
-->정사각행렬A가 대각화가능함
--> A의 고윳값들을 주대각선 성분으로 가지는 행렬D
-->고윳값에 대응하는n개의 직교 고유 벡터를 열벡터로 가지는P
-->고윳값과 그에 대응하는 고유벡터만 이용
n차의 두 정사각행렬A,B가 닮음일 때 성립하는 조건
(1) det(A) = det(B)
(2) tr(A) = tr(B)
SVD (특이값 분해)
A = U∑V^T
- U는AA^T를 직교대각화하는 행렬
- V는A^TA를 직교대각화하는 행렬
-
A의 특이값들을 단조감소 순서로 배열한 대각선행렬
- U의 열들은A의left singular vector
- V의 열들은A의right singular vector
행렬의 특이값 구하는sage코드
A = matrix([[sqrt(3), 2], [0, sqrt(3)]])
B = A.transpose()*A
eig = B.eigenvalues()
sv = [sqrt(i) for i in eig] ->특이값 구함
print(B.eigenvectors_right()) -> A.transpose()*A의 고유벡터 구하기, A의right singular vector들
일반화된 역행렬
-A^(-1) = V∑^(-1) U^T (U와V는 직교행렬)
최소제곱해
x = A^Tb
-A가m x n행렬
-b는R^n의 임의의 벡터
-Ax = b의 최소제곱해
이차형식
-각 항이2차인 다항식
-두 변수x, y를 갖는 이차곡선의 방정식ax^2 + 2bxy + cy^2 + dx + ey + f = 0
-행렬로 표현했을 때: [x y] [ a b] [ x ] + [d e] [ x ] + f = 0
-c d yy
주축 정리
변수 변환을 통해서 혼합항을 가지지 않는 형태로 표현하는 정리
다변수함수의 극값을 구할 때 사용되는이차형식의 부호
양의 정부호
-행렬A∊Mₙ이 대칭행렬일 때,이차 형식q(x) = x^TAx가 임의의x≠0에 대하여q(x) > 0
음의 정부호
-행렬A∊Mₙ이 대칭행렬일 때,이차 형식q(x) = x^TAx가 임의의x≠0에 대하여q(x) < 0
부정부호
-행렬A∊Mₙ이 대칭행렬일 때,이차 형식q(x) = x^TAx가 어떤x에 대하여는q(x) > 0,어떤x에 대하여는q(x) < 0
[2주차]정리하기이차방정식을표준위치로만들어보기
작성자:이지용(2021####83)작성일:7월15일오전00:45
아래에2주차내용을정리했습니다.





그리고x^2+4xy+y^2=2을이차형식로바꾸어표준위치로만들어보았습니다.
x^2+4xy+y^2=[x,y][[1,2],[2,1]][[x],[y]] .
det|λI-A|=0.λI-A=det[[λ-1,-2],[-2,λ-1]]=(λ-1)*(λ-1)-4=λ^2 - 2λ-3=0.
λ=-1or3.
λ1=3,λ2=-1. P=[[1/sqrt(2),1/sqrt(2)],[1/sqrt(2),-1/sqrt(2)]]
(x'=1/sqrt(2)*x+1/sqrt(2)*y, y'=1/sqrt(2)*x -1/sqrt(2)*y)
x^2+4xy+y^2+2x
=3*x'^2 -y'^2=2
->쌍곡선3/2*x'^2 -1/2*y'^2=1
그리고이쌍곡선의극점은(0,0)이됩니다.
이러한방법으로타원x'^2/a +y'^2/b=1,쌍곡선x'^2/a -y'^2/b=1or -x'^2/a +y'^2/b=1,포물선ay=x^2 or ax=y^2로바꿀수있음을이해했습니다.
SVD 분해를 구현하는 Sage코드를 2가지 더 첨부합니다.
(1)
sage: U,S,V = A.SVD()
SVD를 구할수 있는 Sage함수로써 다른 연산과정을 거치지 않고 U,S,V에 해당하는 행렬을 구해줍니다.
(2)
sage: B = A.transpose()*A
sage: eig = B.eigenvalues()
sage: sv = [sqrt(i) for i in eig]
sage: temp = A.eigenvectors_right()
sage: length = 0
sage: x1 = list(temp[0][1][0])
sage: x1 = vector(x1)
sage: v = matrix(x1)
sage: X = v.transpose()
sage: for i in range(0,len(temp)):
... for j in range(0,len(temp[i][1])):
... length+=1
... if i==0 and j==0:
... continue
... v = list(temp[i][1][j])
... v = vector(v)
... v = matrix(v)
... X = X.augment(v.transpose())
sage: G = X
sage: print G
sage: print
sage: vh = matrix([1/G.row(j).norm()*G.row(j) for j in range(0,length)])
sage: U = matrix([A*vh.row(j)/sv[j] for j in range(0,length)]).transpose()
sage: print U
sage: print
sage: S = diagonal_matrix(sv)
이 방식을 통하여 위에서 하나의 함수로 구해주었던 것과 마찬가지로 U,S,V에 대한 SVD를 구할 수 있습니다.
comment: 2주차까지 공부하였던 내용들에 대해서 전체적으로 복습하는 시간을 가질 수 있었습니다. 또한, 선행 연산자와 같이 개념 정리에 대해서 스스로 미흡하였던 부분을 발견할 수 있었고, 그 부분에 대한 개념을 학습하는 시간을 가질 수 있었습니다. 또한 2주차에 최종 목표라고 느껴졌던 SVD와 고윳값 분해에 대해서도 코드를 통해서 충분히 시행할 수 있게 되었다는 확신을 가지게 되었습니다.
Week 3 관련 내용
22. 미분파트 정리 및 뉴턴 방법의 제약에 대한 질의응답
[Final OK by TA] Finalized by 박건영 and 김석하 and 이시원 and 이상구교수님 (Newton's Method)
작성자:임동선(2017####79)작성일:7월 25일 오후 1:56
조회수:11
[3주차] 1차요약 (미분파트) & 뉴턴법 숫자변형 실습
작성자 : 박건영(2021####42)작성일 : 7월 20일 오후 5:16조회수 : 29
미분파트 개념정리 한 것과 뉴턴법이 정확히 이해되지 않아 어떤 느낌인지 실습을 통해 확인하였습니다!
4개의 댓글
김석하(2017####02)7월 20일 오후 9:46
뉴턴 방법으로 때로는 원하는값을 도출 해낼 수 없는 경우가 생기는데, 이러한 경우가 생기는 이유와 해결 방법이 궁금합니다.
이시원(2021####15)7월 20일 오후 10:38
뉴턴 방법은 함수가 연속이고 미분가능해야 한다는 제한사항이 존재하므로, 함수가 연속이지 않거나 미분가능하지 않은 경우에는 원하는 값이 도출 되지 않을 수 있습니다.
또한, 초기값을 잘 못 잡을 경우에도 원하는 값이 도출되지 않을 수 있습니다.
이상구(LEE SANGGU)7월 21일 오전 8:39
맞습니다. 먼저 그래프 개형을 plot 명령어로 그려보고.
해 들이 어디 근처에 있는지 확인한 후
각각의 근 을 찾기위해 ... 그 근처에서 뉴우턴의 알고리즘을 적용하면 구하고자 하는 근에 수렴합니다.
김석하(2017####02)7월 23일 오후 4:45
초기값을 정하는 기준이 따로 존재할까요?
Sage를 통한 실습:
sage: var('x')
sage: f(x) = 5*x^5+4*x^3-5*x^2
sage: print f(x)
sage: p = 0.05
sage: print(diff(f(x), x))
sage: df(x) = diff(f(x), x)
sage: print solve(f(x)==0,x)
5*x^5 + 4*x^3 - 5*x^2
25*x^4 + 12*x^2 - 10*x
[
x == -1/2*(1/450*sqrt(3631)*sqrt(15) + 1/2)^(1/3)*(I*sqrt(3) + 1) - 1/15*(2*I*sqrt(3) - 2)/(1/450*sqrt(3631)*sqrt(15) + 1/2)^(1/3),
x == -1/2*(1/450*sqrt(3631)*sqrt(15) + 1/2)^(1/3)*(-I*sqrt(3) + 1) - 1/15*(-2*I*sqrt(3) - 2)/(1/450*sqrt(3631)*sqrt(15) + 1/2)^(1/3),
x == (1/450*sqrt(3631)*sqrt(15) + 1/2)^(1/3) - 4/15/(1/450*sqrt(3631)*sqrt(15) + 1/2)^(1/3),
x == 0
]
sage: start = [-1,]
sage: print f(start[0])
sage: count = 1
sage: while abs(f(start[count-1]))>p:
... print f(start[count-1])
... print start[count-1]
... start.append(f(start[count-1])/df(start[count-1]))
... count = count+1
...
sage: print(start)
sage: print(f(start[count-1]))
-14
-14
-1
-128681644/229345007
-14/47
-4903104623526749403806537473659113342/50538956031789842773436252181157081957
-4595773/34731637
[-1, -14/47, -4595773/34731637, -1066872672676990226411647719254/16946108101308028879065197010263]
-29097031792647001706498443483295481433488100653543694523162279859072386906242754766851256915019432564825911028497400245134345529226081056466534468571489644/1397493712084097436679225010185673882055945875187705826827878997477813923212173642453431272975058641476725515718600271774226160633921316506441476350397247543
comment: 뉴턴 방법으로 해 들의 근처 위치를 구할 수 있다는 장점만이 아닌 뉴턴법의 한계와 제한 사항에 대해서도 확실하게 인지하게 되었습니다. 또한, 다른 학우분께서 직접 컴퓨터를 통해서 함수를 그려보고 실습하신 내용을 토대로 뉴턴법에 대한 이해도를 높일 수 있었습니다.
23. 다변수함수의 뉴턴 방법의 Sage코드 구성에 대한 질의응답
Final OK by SGLee Finalized by 양지슬, 이시원 [3주차] 김보겸 학우님 다변수함수에서의 Newton's method 질문 - 추가질문
작성자:양지슬(2017####18)작성일:7월 27일 오전 11:01
조회수:19
해당 질문에서, f(x,y)=0을 만족하는 점이 적어도 하나 존재하는 f(x,y)에 대해 ① 임의의 y값 y_0을 설정한 후 평면 y=y_0에서 f(x,y_0)=0이 되는 x의 근삿값 a를 구한 후 ② 1에서 구한 a를 이용해 평면 x=a에서 f(a,b)=0이 되는 y의 근삿값 b를 구하고, ③ 1과 2 과정을 순서대로 반복하여 최종적으로 오차범위 내에서 f(x,y)=0을 만족하는 근삿값 혹은 근 (a,b)를 구하는 알고리즘을 토대로 코드를 짜고 실행시켜보았습니다.
최종 코드:https://t.co/Xu0ojSXIDV?amp=1
var('x,y,z')
f=sin(x-y)+exp(-x*y+2)
f_x=diff(f(x,y), x)
f_y=diff(f(x,y), y)
p=implicit_plot3d(z==0, (x,-3,3), (y,-3,3), (z,-3,3), color='black')
p1=implicit_plot3d(z==f, (x,-3,3), (y,-3,3), (z,-3,3), color='blue')
p2=implicit_plot3d(y==-2, (x,-3,3), (y,-3,3), (z,-3,3), color='yellow')
(p+p1).show()
a=1.1 #x의 초깃값 a, y의 초깃값 b
b=2
i=0
while i<10: #과정 3을 i번 반복
i=i+1
i1=0
while abs(f(a,b))>=10^(-i-1):
i1=i1+1
Newton1(x,y)=x-(f(x,y)/f_x(x,y))
a=Newton1.substitute(x=a, y=2)
if f(a,2)==0:
break
i2=0
while abs(f(a,b))>=10^(-i-2):
i2=i2+1
Newton2(x,y)=y-f(x,y)/f_y(x,y)
b=Newton2.substitute(x=a, y=b)
if f(a, b)==0:
break
print('a=', a)
print('b=', b)
print('f(a,b)=', f(a, b))
이시원 학우님의 도움으로 코드를 수정하고 구체화하는 과정에서 알고리즘 상의 문제를 발견하고, 추가질문이 생겼습니다.
1. 과정 ①에서 구한 (a,y_0)은 이미 그 자체로 f(x,y)=0의 근삿값에 해당한다. 즉, 알고리즘의 과정 ②와 ③을 실행시켜야 할 당위가 부족하다.
2. 함수 g(z)에 대해 g(c)=0을 만족하는 변수 c가 point로 표현되는 일변수함수와는 달리, 함수 f(x,y)에 대해 f(a,b)=0을 만족하는 변수 (a,b)는 특수한 경우를 제외하고 point가 아닌 곡선으로 나타나게 된다. 그렇다면 함수 f(x,y)에 대해 Newton's method로 구하는 근 혹은 근삿값이 어떤 의미를 가질 수 있는가?
[3주차] 김보겸 학우님 다변수함수에서의 Newton's method 질문 - 추가질문
작성자:양지슬(2017####18)작성일:7월 25일 오전 10:42
조회수:44
김보겸 학우님께서 올려주신 질문, "다변수함수에서도 Newton's method를 활용할 수 있는가'를 보고 Newton's method를 sage 툴에서 직접 실습해보며 추가 질문이 생겨 글을 남겨봅니다. (댓글로 남기기에는 글이 길어 부득이하게 새 글로 남깁니다!)
지난 21일 게재한 3주차 실습, Newton(x)=x-f(x)/diff(f(x),x) 함수를 정의하여 지정된 횟수 동안 초기값 a로부터 a=Newton(a)를 반복, 근삿값을 구하는 코드를 이용하여 다변수함수에서의 Newton's method 코드를 실행해보고자 하였습니다.
교안의 편도함수 - 시각적 이해 파트를 활용하여, ①임의의 y값을 설정한 후 y==y_0(아래 첨부한 코드에서 y==-2)에 대한 평면에서 x의 근삿값 a를 구한다. ② 1에서 구한 a를 이용해 x==a에 대한 평면에서 y의 근삿값 b를 구한다. ③ 1과 2 과정을 순서대로 반복하여 f(x,y)=0의 근 혹은 근삿값 x, y를 구한다.
위와 같은 알고리즘을 생각해보았으나, 코드를 실행해본 결과 과정 1에서의 a값은 반복횟수가 증가함에 따라 0에 수렴함에도 불구하고 과정 2에서의 b값은 반복횟수가 증가해도 0에 수렴하지 않는 양상을 보이는 것을 확인할 수 있었습니다.
제가 생각한 알고리즘에서 오류가 있었다면 어떤 오류가 위와 같은 결과를 초래하였는지, 또한 개선점이 있다면 어떻게 개선하면 좋을지 조언을 구하고자 글을 남깁니다.
코드는 아래와 같습니다. (link:Sage Cell Server (sagemath.org))
var('x,y,z')
f=sin(x-y)+exp(-x*y+2)
f_x=diff(f(x,y), x)
f_y=diff(f(x,y), y)
p=implicit_plot3d(z==0, (x,-3,3), (y,-3,3), (z,-3,3), color='black')
p1=implicit_plot3d(z==f, (x,-3,3), (y,-3,3), (z,-3,3), color='blue')
p2=implicit_plot3d(y==-2, (x,-3,3), (y,-3,3), (z,-3,3), color='yellow')
(p1+p2).show()
a=1.1 #when y=2
i1=0
while i1<200:
i1=i1+1
Newton1(x,y)=x-(f(x,y)/f_x(x,y))
a=Newton1.substitute(x=a, y=2)
if f(a,2)==0:
break
print(a) #a=1.13761611998648
print(f(a,2)) #1.11022302462516e-16
b=2 #when x=1.13761611998648
i2=0
while i2<200:
i2=i2+1
Newton2(x,y)=x-f(x,y)/f_y(x,y)
b=Newton2.substitute(x=1.13761611998648, y=b)
if f(1.13761611998648, b)==0:
break
print(b)
print(f(b,2))
6개의 댓글
이시원(2021####15)7월 25일 오후 6:32
우선 첫째로 print(f(b,2))부분에서 출력하는 값은 수행하였던 연산과는 궤가 다른 방향입니다. b는 y의 값을 나타내는데 x에 대입되고 있습니다.둘째로는 지금은 앞서 계획하신 알고리즘에서 3번 부분이 존재하지 않습니다. 이는 a의 값의 변화에 따른 b의 값의 변화를 불러오지 못한다는 의미가 됩니다. 이 과정에서도 오류가 발생한 것으로 보입니다.수학적으로 가능한지에 대해서는 증명을 찾지 못하였으나 우선적으로 위 식에 대해서는 코드를 통해 0.01이하의 오차를 가진 해를 찾아낼 수 있었습니다.3번 부분을 포함하여 약간의 수정을 거친 코드입니다.var('x,y,z')f=sin(x-y)+exp(-x*y+2)f_x=diff(f(x,y), x)f_y=diff(f(x,y), y)p=implicit_plot3d(z==0, (x,-3,3), (y,-3,3), (z,-3,3), color='black')p1=implicit_plot3d(z==f, (x,-3,3), (y,-3,3), (z,-3,3), color='blue')p2=implicit_plot3d(y==-2, (x,-3,3), (y,-3,3), (z,-3,3), color='yellow')(p1+p2).show()a=1.1 #when y=2b=2i1=0while f(a,b)>=0.01:while i1<200:i1=i1+1Newton1(x,y)=x-(f(x,y)/f_x(x,y))a=Newton1.substitute(x=a, y=b)if abs(f(a,b))<0.01:breakprint(a) #a=1.13761611998648print(f(a,b)) #1.11022302462516e-16i2=0while i2<200:i2=i2+1Newton2(x,y)=x-f(x,y)/f_y(x,y)b=Newton2.substitute(x=a, y=b)if abs(f(a, b))<0.01:breakprint(b)print(f(a,b))indent가 표시되지 않아서 while이 한번 나올때마다 tab이 한번 들어간다고 생각해주시면 감사하겠습니다. indent가 표시된 버전이 필요하시다면 아래 공개한 워크시트를 참고해주세요.http://sage.knou.ac.kr/home/pub/553/
양지슬(2017####18)7월 25일 오후 7:09
이시원 학우님이 댓글을 달아주실 때까지 line 32의 함수 입력이 잘못 되었는지 모르고 있었네요 오류에 대한 지적 감사합니다.다만, 첫째로 line 32의 f(b,2)를 f(1.13761611998648, b)로 수정하였음에도 출력값은 0.93023으로 여전히 0에 수렴하지 않는 양상을 보입니다.둘째로는 f(a,b)가 0에 수렴하지 않는 양상을 보이는 까닭에 알고리즘의 과정 ③을 실행하기에 과정 ①과 ②가 미비하다는 판단을 내렸었습니다. 반복 시행을 위한 코드도 추가해보겠습니다!
양지슬(2017####18)7월 25일 오후 7:27
이시원 학우님이 작성하신 코드를 참고하여 코드를 수정해보았습니다.https://sagecell.sagemath.org/?z=eJyNkT1ygzAQhXudQjMpkMJPkNxlsjlCruCRbBhrTEADOEhu06ROlSZ3SJEmV_L4EJEA4_HYBVvtvvl4esu-iZoEJrLRPqAoh0aVxMSWhpnRJDb3NuROXhpYqzwnOXEkjbDxmr3ULEVIg3rVhVqpdqmLql2syR4gjbBD4kW0cBSxU7c_dauqqGoIZCFWWxdCs1su-WyXXeZN-JWJBYj5TBebFUXVOR-iQ81o0myqjrgFBbCE4Ttz_P7Cx9-Pw9_74ecTC7f9pSKRBI4UpAh1G1VkWD3xNH1E2JUCFbK-G0bmKN8MYE5EJOkzpEnKBn6EFBu_8vWSdW1Vsv7Xg4nHIzy4Q_UNnUABI5o0O9m0qt21GTHgEwM_YyrvH-bUnev8qi9ZZ2J7oQyp-ZzU7gj8KjU_pZ5C276ZMDlm5jcyy6vMWM4KrWtVtiQQEERY0NMo_SincVjDa6Mz_Qe8h9Xs&lang=sage&interacts=eJyLjgUAARUAuQ==이시원 학우님이 제안하신 알고리즘대로 코드를 실행시켜 본 결과 f(a,b)의 오차범위가 주어져있기 때문에 a_1(i1=1일 때 x의 근삿값)이 도출된 후에는 더이상 유의미한 근삿값을 도출할 수 없음을 발견하였습니다.
이시원(2021####15)7월 25일 오후 7:32
한가지 추가적인 문제점을 발견하였습니다.Newton1과 Newton2를 정의하는 과정에서 x-f(x,y)/f_x(x,y)가 아닌 a-f(x,y)/f_x(x,y)가 x-f(x,y)/f_y(x,y)대신 b-f(x,y)/f_y(x,y)가 사용되어야 합니다.Newton1과 같은 경우에는 x에 입력되는 값이 a로 동일하여 값이 산출되겠지만 Newton2같은 경우에는 x값에 1.13761199648 또는 a값이 입력되므로 뉴턴법의 식과 괴리가 발생합니다.
양지슬(2017####18)7월 25일 오후 7:58
먼저, Newton2를 정의함에 있어 x-f(x,y)/f_y(x,y)로 정의되어 있음을 확인하여 y-f(x,y)/f_y(x,y)로 교정하였습니다.이시원 학우님이 제시하신 부분에 대해서는, 정의된 Newton1 혹은 Newton2 함수를 이용함에 있어 substitute(x=a, y=b) 명령어를 사용하므로 기존의 코드 그대로 실행하여도 괜찮을 것 같습니다.
양지슬(2017####18)7월 25일 오후 8:12
https://sagecell.sagemath.org/?z=eJyNUUFuwjAQvOcVlnqIXRIamxvq9gl9QpENibBISZSEYnNtD5wrVeKC1Ceg0h4q9UXAI2onIRSBVPY0OxrPznqfeIZd5Wlv5hInglyOsfI1aYUqxb661i1m6J6CgYwiHGGjJB5SltPHnCaOk4J8TGPZl0UvjZOiM8AzgMBDRuJ3vI5RYd2g2R71kzjJwBUx749MiJSec4kudpmE1oSdmGgAn13oosM4TqbGB6etlJJ2Pkym2CzIgbYpulK75QLtPueb7-fN6hVxs_0xIxwBzJEQOM50KOMQyVsadNHVZv2ze39Dnd3yBcntxxxtV4vt-stBpiTIFi1R1VLz2oLKgIvcfDX3BCF3QIMH7Eufkm6pqOWS1u9t3YfTIhnT8jig_PpMN-aUJSCNkEMtbecTkReymBQhVmB3AnaQyQjZ8YyYgx6m2hJZyEdHTJWf_Zuf_c1vDsZO8rMqv_ab-LoEjUzU6dmZ9OIkPRIXxU8zOS6wy8H1ECf7VthWNG21jOVqZ_ILEPjpxg==&lang=sage&interacts=eJyLjgUAARUAuQ==현재까지 발견된 문제점을 교정한 코드입니다. i=10(과정 3의 반복횟수) 이상에서 f(a,b)=-3.33066907387547e-16 으로 수렴합니다.
comment: 일변수함수에서의 뉴턴법의 구현을 넘어서서 다변수함수에서의 뉴턴법의 구현이 가능한지에 대해서 구현을 시도해보는 경험이 되었습니다. 해당 방식을 통하여 다변수함수에서의 뉴턴법의 구현을 시도해보았으며, 이를 통해 보다 간편한 일변수 함수에서의 뉴턴법의 적용을 구현하는 방식에 대해서는 확신을 가지고 가능하다고 말할 수 있게 되었습니다.
24. 최댓값 최솟값 정리의 확장에 대한 질의응답
[Final OK by TA] Finalized by 박건우, 이시원, 이상구 교수님, 강덕재, 정진웅, 오혜준 [3주차] 최댓값 최솟값의 정리 확장 적용
작성자:임동선(2017####79)작성일:7월 29일 오전 10:12
조회수:8
아래 Q&A를 바탕으로 삼변수함수의 최대/최소를 구하는 문제를 '최댓값 최솟값의 정리'를 확장 적용하여 해결해보았습니다. 실습은 Sage를 이용하여 진행했습니다.
연속인 다변수함수에 대하여'최댓값 최솟값의 정리'를 재구성하기 위해선추가적으로 알아야 할 수학 지식이 너무나도 많았습니다. 이에 따라 Comfact 함이 확실한 정의역을 설정하였습니다.
문제 해결을 위해 변수의 개수를 하나둘씩 줄여가는 연쇄적인 방법을 사용했는데, 이것이 변수의 개수가 늘어감에 따라 상당히 비효율적인 양상을 보인다는 것을 깨닳았습니다. 변수가 많은 함수의 최대, 최소를 구할 때에는 '라그랑주 승수법'과 같은 메소드를 이용하는 것이 바람직하겠습니다.
[3주차] 최댓값 최솟값의 정리 확장 질문
작성자:박건우(2020####41)작성일:7월 24일 오후 12:52
조회수:34
3주차 수업을 통해 일변수함수의 최댓값 최솟값 정리를 다음과 같이 배웠습니다.
직관을 통해, 연속인 다변수함수에 대하여서도 위의 개념을 확장할 수 있다고 생각했습니다.
이에 관련문헌을 찾아보았는데 적절한 자료를 찾기가 어려워 질문을 남깁니다.
Q1. 연속인 다변수함수 f: R^n -> R 에 대하여서도 최댓값 최솟값 정리가 성립하나요?
Q2. 만약 그렇다면, 다변수에 대하여 '폐구간'을 어떻게 정의해야 하나요? 다음과 같은 도넛모양의 구간(경계선 포함)도 '폐구간'이라 말할 수 있나요?
comment: 일변수함수에서의 최대 최솟값 정리에 대해서 이해하게 되었으며, 이를 기반으로 다변수함수에서의 최대 최솟값 정리를 이해하기 위해서는 추가적인 개념들이 필요하다는 것을 알 수 있었습니다.
25. 말안장 함수, 임계점, 이계도함수 판정법에 대한 정리
[Final OK by SGLee] Re Finalized by 류재헌, 유민솔, 양지슬, 조주현, 권서영, 이시원 [말안장 함수에 관한 report]
작성자:이시원(2021####15)작성일:7월 29일 오후 1:45
조회수:12
[Final OK by SGLee] Re Finalized by 류재헌, 유민솔, 양지슬, 조주현, 권서영, 이시원 [말안장 함수에 관한 report]
안장점에 대해서 궁금한 점을 찾아보던중 앞서 학우님들이 작성해두신 안장점에 관한 Finalize된 글을 확인하게 되었고, 이에 대해서 이를 통해서 배운점과 헤시안의 eigenvalue를 통해 안장점 여부를 파악하는 부분에 대해서 극댓값과 극솟값의 경우를 추가하여 한눈에 보일 수 있도록 정리하여 Re-Finalized를 진행합니다.
본 시간에는, MATH4AI 교과서 2.4절에서 임계점이 반드시 극대 및 극소값을 가지지 않으며, 그것의 사례가 되는 안장함수를 sage코드를 통해서 여부를 판단해보도록 하겠습니다. 이번 레포트에서 사전에 알아야 할 내용은 아래와 같습니다.
<그림 1> 극대, 극소의 정의와 Fermat의 임계점 정리, 그리고 안장점의 개념
교과서에서 임계점이 반드시 극대와 극소를 가지지 않는 것의 반례로 안장점을 들었지만, 여기서 안장점의 physical meaning에 대해서 탐구하고 싶어서 sage를 이용해 임계점을 찾고, 그것이 왜 극대 또는 극소가 되지 않는지 나타내 보도록 하겠습니다.
<그림 2> 안장함수의 사례, z=y^2-x^2라는 간단한 사례가 있다. 출처 네이버 네냐플 블로그
주어진 함수를 sage를 통해 편미분해보겠습니다. 수기로 해도 될만큼 간단한 함수이기에, 수기로 해보실 분은 해보시면 좋을 것 같습니다.
<그림 3> 편미분을 통한 임계점의 값
임계점의 값을 알았으므로, 근방의 8방향의 함숫값을 알아보겠습니다.
<그림 4> 임계점 근방의 함숫값
보시다시피, 극대와 극소의 정의와는 달리 근방의 함숫값보다 크지도 않고 작지도 않은 0이라는 값을 가지고 있음을 확인할 수 있었습니다. 여기서 더 나아가자면 더 복잡한 형태의 안장함수를 찾고, 함수의 안장값과 주변의 함숫값을 확인하는 식으로 실습을 심화할 수 있겠습니다.
양지슬(2017####18)7월 26일 오후 11:45
류재헌 학우께서 작성하신 실습 페이퍼에서는 안장점 여부를 근방 8방향의 함수값을 비교함으로써 확인하셨는데, 극값을 판별하는 방법 중 하나인 일계 미분 판정법(함수 f가 정의역의 점 x_0 근방에서 미분가능하고 x_1<x_0<x_2인 x_1, x_2에 대해 f'(x_1)f'(x_2)<0이면 x_0은 f의 극점이다.)을 이용해 안장점 여부를 확인할 수 있을 것 같아 sage 코드를 작성해보았습니다. https://sagecell.sagemath.org/?z=eJx1UsFO20AQvfsrBnPIbmTMJseKvfkvohAF7EUWxUYbz8q-5eADEhwQgvbSVK3UKuIWUaS2Ur8odv6hYycQmeA9eHfevPdmdzxmrFkndbIOt5TMjvsH6XHfutRhlDBbSdsBxTcht8702FdSudUeBjW0Tk3ijyZggzo_EEMphQProFcFQwdSBzLOYT-tcxl9X10tFWsIIYxAj6OzgPUE_2ABLSMkIX58MTLBaRJr1uc1ji24iaQRbhTrC7YhRhIbQKiItCcFkJyydFpXqtUkPmzqaw-yOMQduHLak7iVV8szsn61G0ZRoEeXOvbxNGGGN1n4LgubLN9Iz7gTPJkkYYJJwFJpBlUnM9p7wzdklB42ybgh4w6Zru6bro9Honn7am1-fLF4XH36WTx9X-ULagxNwZs3tHGx4qIDdvn5Foqb6erh2W5Ttjp6I6OoaV1vhIraciRaLeziflHM_pX5F5rTl-ndlgbVYTTaXIpy9gfKb7fAhCN4OZtC-TVf_soJKmfP5XxazG9g-fvvcnFXJx_y4vqquP7h2hx2Sp_oYHz-H6zW_lw=&lang=sage&interacts=eJyLjgUAARUAuQ==
양지슬(2017####18)7월 27일 오전 00:16
또는, 이계도함수 판정법(열린 구간 U에서 정의된 두 번 미분가능한 함수 f:U→R에 대해 벡터 a in U가 임계점이라고 할 때 f''(a)>0이면 a는 극소점, f''(a)<0이면 a는 극대점이다.)을 활용하여 안장점 여부를 확인할 수도 있을 것 같아 관련 내용을 조사해보았습니다. 이변수함수 f의 이계도함수가 (a,b)를 중심으로 하는 원판에서 연속일 때, f_x(a,b)=0, f_y(a,b)=0인 a,b에 대해 함수D(a,b)=f_xx(a,b)f_yy(a,b)-{f_xy(a,b)}^2에 대해서 D>0이고 f_xx(a,b)>0이면 f(a,b)는 극소, D>0이고 f_xx(a,b)<0이면 f(a,b)는 극대이며 D<0이면 f(a,b)는 극대도 극소도 아니다. (증명은 https://blog.naver.com/hacksmw/222161503113 에서 확인하실 수 있습니다.) 이러한 사실에 의거하여 sage 코드를 작성해보았습니다. (삽입된 링크로 들어가시면 indent를 확인하실 수 있습니다.) https://sagecell.sagemath.org/?z=eJy1kE9LwzAYxu_9FC_zsESyUXsU42nfYmxjskYKQ6XrRnLzUGTowB6s62GVCQoedph_QAQ_UZt9B5O0mzvsqDkked_nyfNLMur6qMqJqGKLUdF2arztWBe-dxagCqMVAgyXJbZO_W6PUVbXq-eaViENzvsjFzWN3rRblNoEiuJAFy0CnIDAGPa40YSaN6kW63BOex5jiBmjo67SEWLTEmWLi22XwFaD6qP1wfBkEHjBMHARL9JtvK8Tdio1pJN2Slg93WPQOLYPLVBD7TUA2cTG654e5ffI9CN7D_PbcBW_yHECq0kk53H-FstpBDJNstflKk7kdEGgdLD8-g5MnLLIcAbZ55e8mqig_OapXsGG4Pa3uUf_xc0nl79cw2ysWX_BSUOQ8Vg-PMt5JGff-aOCLu-VXhB_AC5TB3Y=&lang=sage&interacts=eJyLjgUAARUAuQ==
안장점을 파악하는 방법
조주현
1. 함수 f의 gradient가 0이 되는 임계점을 찾고 그 임계점 주변의 값과 비교해보는 방법이 있습니다.
*gradient가 결국 미분값을 가지는 벡터이기에 안장점인지 확인하고 싶은 점 주변 근들을 gradient로 계산해봤을 때 부호가 다른 값이 나오면 극대, 극소가 아니며 안장점이라고 알 수 있습니다.
2. f의 hessian 행렬의 eigenvalue를 이용하여 판단하는 방법이 있습니다.
*eigenvalue를 이용해 안장점을 구한다는 것은 고윳값들의 부호가 definiteness를 나타나기 때문이다. 따라서 고윳값들의 부호가 다르면 f값이 안장점이라 할 수 있다
함수 f:
이 임계점
에서 연속인 2계 편도함수를 갖고 이 점에서의 f의 이차형식을 q(d)
라 할 때 아래 3가지가 성립된다.
(ⅰ) q가 양의 정부호이면 f(a)는 극솟값이다
(ⅱ) q가 음의 정부호이면 f(a)는 극댓값이다
(ⅲ) q가 부정부호이면, f(a)는 극값이 아니고, 이때 x=a를 안장점이라 한다.
또한 n=2인 경우에는
을 이용해서 이변수함수의 극대극소판정법을 얻을 수 있다.
3. 일계미분판정법을 이용하여 알아볼 수 있습니다.
4. 이계도함수를 이용하여 안장점을 판단하는 방법이 있습니다.
권서영 느낀점:
류재헌, 양지슬, 조주현 학우분들께서 안장점에 대해 양질의 토론을 펼쳐 저도 좋은 학습 기회를 얻었습니다. 읽으면서 헤시안을 구해 안장점을 구하는 말이 이해가 가지 않았으나 금세 고윳값들이 나타내는 definiteness 성질을 이용한 것을 알았습니다. 저와 같은 문과생분들이 보고 빠르게 이해할 수 있게 아래 간단하고 짧은 설명을 덧붙였습니다. 판별식 D를 이용한 안장점 판별이 처음에는 직관적으로 이해가 가지 않았습니다. 찾아보니 이계도함수에는 판별식이 존재했습니다. 저처럼 관련 배경지식이 부족해 바로 이해가 어려울 분들을 위해 관련 내용을 조주현 학우분께서 참고하라 알려주신 블로그에서 참고해 추가했습니다.
2021313유민솔
학우님들이 제시해주신 많은 방식을 읽고 이해하며 안장점 판별에 대한 안목을 키울 수있었습니다. 이해한 점을 바탕으로 함수 f(x, y)=y^4-x^4 가 말안장 함수인지 판단해보는 실습을 진행했습니다. 말안장 함수를 많이 접해보지 않았기에 예시를 찾는데 어려움이 있어, 단순히 차수를 올려서 실습을 진행해 보았기에 아쉬움이 남았습니다. 판별법은 류재헌 학우님이 제시해주신 방법을 사용했습니다. 학습을 통해 더 다양한 형태의 말안장 함수를 접하고 어떻게 활용되는지에 대해 고민해 보는 시간을 가지겠습니다.
1. 임계점을 구했습니다.
2. 류재현 학우님의 방식대로, 인근 8개 점에서의 함숫값을 구해 임계점에서의 함숫값과 같은 값이 존재함을 확인했습니다. 이는 극대 극소의 정의와 맞지 않음을 실습을 통해 확인할 수 있었습니다.
이시원 느낀점:
학우님들이 다양한 방식으로 안장점을 구하는 방식을 Sage코드로 구현해놓으신 것을 보면서 안장점을 구하는 다양한 방법과 코드를 학습할 수 있었습니다. 작성된 글을 읽으면서 이차형식이 부정부호인 경우에는 안장점이 된다는 부분에서, 극댓값과 극솟값의 성립조건도 궁금해져 그 부분을 수업내용에서 찾아 추가하였습니다. 또한, 일계 미분 판정법에서 n=2인 함수의 임계점을 통해서 극값을 찾는 방법이 가능한지에 대해서 궁금증을 가질 수 있었고, 이를 토대로 관련 내용을 찾아보면서 일계 도함수 판정법이 모든 n에 대해서 연쇄법칙을 통하여 설명이 가능하다는 점을 확인할 수 있었습니다.
2015 류재헌
학우님들이 보충 설명을 해주셨는데, 그 중 판별식에 대한 설명이 함수 판별에 대한 standard를 제공해 주어서 보고서의 내용이 더 풍부해졌습니다. 여기서 보충설명을 하자면, 판별식의 경우 D=0인 경우에 대한 설명이 없는데, D=0일 경우 극값이거나 안장점일 수 있다고 합니다. 토의를 통해서 좋은 내용을 얻을 수 있어서 유익했던 시간이었습니다.
< 참고문헌 >
1. 이상구, MATH4AI, BigBook
2. 이변수 함수의 극값(Extreme Value) : 네이버 블로그 (naver.com)
comment: 안장점, 임계점이 뜻하는 바가 무엇인지 학습하였으며, 이들을 판단하는 이론들에 대해서 이계도함수 판정법과 같은 방식들을 학습할 수 있었습니다. 또한, 그래디언트를 이용해서 임계점을 구하는 방법 그리고 그 임계점들에 대해서 주변값을 조사하여 안장점 여부를 판단하는 코드를 작성할 수 있다는 자신감을 가지게 되었으며, 이계도함수를 이용하여 안장점을 파악하는 코드에 대해서도 구현에 대한 자신감을 얻을 수 있었습니다.
26. 3주차 요약 및 정리
Final OK by SGLee Re-finalized by 이시원, 손재민, 양지슬, 이상구 교수님, 임혜림, 이상원, 이혜연, 유민솔, 김태윤, 김보겸, 정현목 (3주차 요약 및 정리)
작성자:정현목(2016####80)작성일:7월 27일 오전 11:51
조회수:16
학우분들께서 요약 및 정리하신 자료로 3주차 내용을 복습하였습니다.
그리고 김보겸 학우님께서 올려주신 Newton's Method 질문글을 보고 뉴턴법의 활용과 다변수함수에서의 뉴턴법의 적용에 대한 내용을 추가하였습니다.
1. 일변수함수와 미적분
1.1 함수
함수와 그래프를 주어진 코드를 통해 실습실에서 그림을 그릴 수 있음 (실습에서 계속)
Sage코드:
var(변수명)
f(변수명) = 식
1.2 극한 (limit)
임의의 양의 엡실론에 관해 absolute value of x-a가 0과 델타 사이에 있기만 하면 f(x)-b가 엡실론보다 작게 만드는 적당한 양수 델타가 존재하면 우리는 x가 a에 존재할 때 f(x)가 b에 수렴(converge)한다고 얘기할 수 있고,
라고 쓴다, 수렴하지 않으면 발산(diverse)한다고 한다.
수렴: 임의의 양수(positive) ε에 대하여, 만일 0 < δ이면 |f (x)-b | < ε 되게 하는 적당한 양수(positive) δ 가 존재하면, x가 a 에 접근할 때 f(x) 는 b 에 수렴(converse)한다
좌극한 = 우극한 = 함숫값 이라면 이 함수는 연속이라고 말함.
수렴하지 않으면 발산(diverse)한다고 한다.
실습 1. 함수와 범위 변화시켜서 그래프 코드로 구현해보기
var('x') # Define variable "x"
A = plot(x^10/11, x, -5, 5, linestyle = "--", color = 'green')
# graph the first function
B = plot(-1/x^2, x, -5, 5) # graph the second function
C = text("y = x^10/11 ", (3, 4), color = 'green', fontsize = 15)
# add the text on given position
D = text("y = -1/x^2", (-1, 5), fontsize = 15 )
# and set the font of the text
show(A + B + C + D, ymax = 10, ymin = -10) # display graphs and texts one time
실습 2. 함수 x^4 + 6*e^x 의 3계 도함수와 5계 도함수 코드로 구현해보기
var('x')
f(x) = x^4 + 6*e^x
print(diff(f(x), x)) # dy/dx
print(diff(diff(diff(f(x), x), x,),x)) # 3계도함수
print(diff(diff(diff(diff(diff(f(x), x), x), x),x),x)) # 5계도함수
실습 3. 삼각함수의 극한 구하기
var('x, y')
f(x) = cos(x)/abs(sin(x))
g(x) = x^2/sin(x)
A = limit(f(x), x = pi/4) # x = pi/4일 때 극한
B = limit(g(x), x = pi/8) # x = pi/8일 때 극한
print(A)
print()
print(B)
sage 코드: limit(함수, 변수=값)
1.3 도함수(derivative)와 미분(differentiation)
미분가능 : 함수 f(x)가 a를 포함하는 어떤 구간에서 well defined 되어 있고, 극한값이 존재하면 f(x)는 x=a에서 미분가능하다고 하며, 이 극한값을 f(x)의 a에서의 미분계수라 부르고, f’(a)로 나타낸다. f(x)는 x=a에서 미분가능하면 x=a에서 연속이다. 그러나 역은 성립하지 않는다. 즉, f(x)가 x=a에서 연속이라도 반드시 미분가능인 것은 아니다.
y=f(x)가 어떤 구간의 각 점 x에서 미분가능일 때, f(x)는 이 구간에서 미분가능이라고 한다. f(x)의 도함수는 다음 기호들로 나타낸다.
f’(x), y’,
,
, Dy
f(x)의 도함수를 구하는 것을 f(x)를 미분한다고 하고, y=f(x)의 도함수는
식 f’(x)=
으로 구한다. y=f(x)의 도함수 y’=f’(x)가 다시 미분가능하면 이를 y=f(x)의 제2계 도함수라고 하고 y’‘등으로 표현할 수 있다. 제 n계 도함수는 다음과 같다.
,
,
가 존재하는 경우, f(x)는 n번 미분가능하다고 한다.
f(x)가 x=a에서 미분가능인 것은 곡선 y=f(x)상의 점 A(a,f(a))에서 이 곡선에 대한 접선(tangent line)을 그을 수 있음을 의미한다. 이때, a에서의 기울기는
이므로 접선의 방정식은
와 같다. 이때, 이 곡선의 접선에 수직인 직선을 A에 있어서의 법선(normal line)이라 한다. 법선의 기울기를 m이라고 하면,
이다.
Sage 코드: diff(함수, 미분할 변수)
1.4 미분의 응용
최대최소정리 : f(x)가 폐구간 [a,b]에서 연속이면 이 구간에서 f(x)가 최댓값 및 최솟값을 취하는 점이 존재한다.
상식적으로, 그림으로도 이해가능. 최댓값과 최솟값은 그 구간 안에서의 극대 극소와 구간의 양 끝점에서의 함숫값을 비교하여 구할 수 있음.
질문 1 여기서는 극대 극소가 있는지는 모르고 최댓값 최솟값의 유무만 알 수 있는 것인가?
양지슬(2017####18)7월 23일 오후 1:07
질문 1. 최대 최소 정리는 연속함수 f(x)가 위로 유계가 아니다, 다시 말해 닫힌 구간[a,b]에서 x in [a,b]에 대해 every x<=y_1인 y_1이 존재하지 않는다고 가정한 후 모순임을 보여 간접증명함으로서 증명해보일 수 있습니다. 이 과정에서 f(x)가 만족해야 하는 조건은 구간 [a,b]에서 정의된 실숫값을 가질 것과 연속일 것 두 가지 뿐입니다. 이와 달리, 연속함수 f(x)에서 극댓값과 극솟값을 판별하기 위해서는 함수 f가 x_0에서 두 번 미분가능하며, f'(x_0)=0이고 f''(x_0)<0(극대) 혹은 f''(x_0)>0(극소)임을 판정할 수 있어야 합니다. 따라서, 함수 f(x)가 최댓값 최솟값 정리를 만족한다는 조건만으로는 주어진 구간 [a,b]에서 f(x)가 극댓값 혹은 극솟값을 가지는지 여부에 대해 판단할 수 없습니다.
실습:
실습 1. 2*x^3 - 4*x^2+3*x 의 최댓값과 최솟값 구하기
var('x')
f(x) = 2*x^3 - 4*x^2+3*x
p1 = plot(f(x), x, -4, 4)
show(p1)
print(solve(diff(f(x)) == 0, x)) # look for the flection points of df,x == -1/6*I*sqrt(2) + 2/3, x == 1/6*I*sqrt(2) + 2/3
ma = max(f(-1/6*I*sqrt(2)+ 2/3), f(1/6*I*sqrt(2) + 2/3), f(-4), f(4)) # find maximum value
mi = min(f(-1/6*I*sqrt(2)+ 2/3), f(1/6*I*sqrt(2) + 2/3), f(-4), f(4)) # find minimum value
print('최댓값 =', ma)
print('최솟값 =', mi)
Sage 코드:
폐구간 [-3,3]에서 f(x)에 대해서 최대값과 최솟값을 구해준다.
var('x')
f(x) = 2*x^2+1 # 다른 식을 사용하고 싶다면 이 부분을 수정하시오.
sol = solve(diff(f(x)),x)
maximum = max(f(3),f(-3))
minimum = min(f(3),f(-3))
for i in range(0,len(sol),1):
x = int(sol[i].right())
if maximum<f(x):
maximum = f(x)
if minimum>f(x):
minimum = f(x)
print(maximum)
print(minimum)
뉴턴법: 반복법으로, 초기 근사해로부터 특정 단계를 반복하여 근사해를 도출해내는 과정이다.
y=f(x)에 대하여
단계를 반복해 주게 된다.
뉴턴법을 시행할 경우에는 초기값을 정해주는 것이 매우 중요하며 초기값을 제대로 설정해주지 못했을 경우에는 원하는 결과가 도출되지 않을 수 있다. 또한 해가 존재하지 않거나 연속이 아닌 경우에는 뉴턴법을 통해 해를 도출해내는 것이 불가능하다.
sage 코드:
var('x')
f(x) = 5*x^5+4*x^3-5*x^2 #식을 수정하고 싶다면 이 부분을 수정해주세요.
p = 0.05
df(x) = diff(f(x), x)
print solve(f(x)==0,x)
start = [-1,]
print f(start[0])
count = 1
while abs(f(start[count-1]))>p:
print f(start[count-1])
print start[count-1]
start.append(f(start[count-1])/df(start[count-1]))
count = count+1
print(start)
print(f(start[count-1]))
A 극대 극소인지 알기 위해서는 미분을 해보면 된다.
Newton’s method 뉴턴의 방법
=>F(x)=0의 근의 근사값을 구하는 방법
r과 가까운점을 잡고 접선을 구한뒤 접선과 x축이 만나는 점에서의 접선을 구하는 것을 계속하면 r에 가까워지는 것을 확인 가능
접선을 이용해서 구할 수 있음, 최적화 문제 푸는 계산법은 대개 반복법
함수의 그래프 그린 후 함수가 x축과 만나는 근의 근사값을 원하는대로 정확하게 구할 수 있음
질문 2 교재에 뉴턴의 공식을 반복하여 사용하면, 원하는 근을 소수점 이하 몇째 자리까지라도 필요한 오차 이내로 정확하게 구할 수 있다. 라고 적혀있는데 ‘필요한 오차 이내’ 라는 말과 ‘정확하게 구할 수 있다’라는 말이 같이 올 수 있는 것인가요? 필요한 오차 이내에서 구할 수 있다면 정확하게 구할 수 없는게 아닌지 생각이 들었습니다. 제가 이해한 방식은 어떤 함수의 극한을 구하는 것 처럼 정확한 한 점에 위치하는 게 아니라 그 점으로 끝없이 다가가는 방향으로 이해해보았는데 이게 적절한 것인지 궁금해서 질문!
A. 수렴: 임의의 양수(positive) ε에 대하여, 만일 0 < δ이면 |f (x)-b | < ε 되 게 하는 적당한 양수(positive) δ 가 존재하면, x가 a 에 접근할 때 f (x) 는 b 에 수렴(converse)한다.
저는 수렴의 정의와 비슷하게 이해를 했습니다. 일정한 범위내에 값이 찍히면 그 값으로 수렴한다고 하는 것처럼 뉴턴의 법칙도 반복을 통해 일정한 범위내(필요한 오차 내) 값을 구할 수 있습니다.
질문 3 이게 중요한 이유?
A. 최적화 문제를 풀 수 있다.
최적화 문제란 현대 사회에서 가장 관심 있는 문제 중 하나는 '제한된 비용(자원 또는 시간) 안에서 최대의 효과를 얻는 것'일 것이다. 실생활에서 이러한 판단은 경험과 직관에 의존하는 경우가 많지만, 경험과 직관은 때때로 잘못된 판단을 낳기도 한다. 따라서 이러한 최적화 문제를 수학적으로 표현하고 최적의 해를 구하는 것은 여러 응용에서 중요한 문제이다.
출처 : [네이버 지식백과] 최적화 문제 (수학백과, 2015.5)
뉴턴법의 활용
일반적인 경우 뉴턴법/뉴턴-랩슨법은 다음과 같이 사용될 수 있다.
(i) 방정식 f(x) = 0의 해를 구하는 경우
(ii) 서로 다른 두 함수 g(x)와 h(x)의 값이 같게 되는 x를 구하는 경우 : f(x) = g(x) - h(x)로 놓고 f(x) = 0인 x를 구한다
(iii) f(x)의 최소값 또는 최대값을 구하는 경우 : 일반적으로 함수는 극점에서 최대값 또는 최소값을 가지므로 f'(x) = 0인 x를 뉴턴법으로 구한 후 f(x)에 대입하면 f(x)의 최대값/최소값을 구할 수 있다. f'(x) = 0인 x는 xn+1 = xn - f'(x)/f''(x)로 구한다.
실생활의 경우, 카메라에서 왜곡보정된 영상좌표를 구할 때에도 뉴턴법이 활용될 수 있다.
실습 2. Newton’s method cos 그래프에서 숫자 바꿔 구현해보기
1.5 적분 (Integral)
어떤 구간에서 정의된 함수 f(x)에 대하여 이 구간의 모든 x에 관하여
를 만족시키는 함수
가 존재할 때,
를
의 원시함수 또는 부정적분(indefinite integral)이라 한다.
가 주어졌을 때, 그 부정적분
를 구하는 것을
를 적분한다고 한다.
의 부정적분을
로 나타내고,
는 적분기호,
를 피적분함수,
를 적분변수라고 한다.
가
의 한 부정적분이면
=
(
는 임의의 상수)이다. 이때,
는 적분상수라고 한다.
[a,b]에서 연속인 함수
는 [a,b]에서 적분가능이라고 하며,
의 a부터 b까지의 정적분(definite integral)을
로 정의한다.
정리 : 적분에 관한 평균값의 정리
가 [a,b]에서 연속이면
=
인
가 a와 b사이에 적어도 하나 존재한다.
정리 : 미적분학의 기본정리(적분과 미분의 연결고리)
가 [a,b]에서 연속이고
를
의 임의의 한 부정적분,
이라 하면 다음 식이 성립한다.
=
실습 3. 미적분학의 기본정리 응용해 5/(2 - 2x^3) 함수의 0.5, sqrt(3)/2 구간에서 적분값 구해보기
f(x) = 5/(2 - 2*x^3)
P1 = plot(f(x), 0.5, sqrt(3)/2, fill = "axis") # fill the area between f(x) and x-axis
P2 = plot(f(x), 0.3, sqrt(3)/2 + 0.05, color = 'red') # graph f(x)
show(P1 + P2) # show P1 and P2
print(integral(f(x), x, 1/2, sqrt(3)/2).simplify_full()) # integrate f(x)
print((integral(f(x), x, 1/2, sqrt(3)/2).simplify_full()).n(digits=5)) # 근사값
Sage코드:
integral(함수,대상 변수, 시작 범위, 끝 범위).simplify_full()
2. 다변수함수와 미적분
2.1 벡터와 공간기하 : 참고 동영상 및 실습사이트를 통해 그림 그려보기
2.2 벡터 함수 : 참고 동영상 및 실습사이트를 통해 그림 그려보기
2.3 편도함수(Partial Derivative)와 그래디언트(gradient)
x,y를 독립적으로 변화하는 두 변수라 하고, z를 제3의 변수라 하자. x, y의 값이 각각 정해지면 여기에 대응하여 z의 값이 정해질 때 z를 두 변수 x와 y의 함수라 하고 이것을
로 표시한다. 이와 같이 이변수 이상의 함수를 일반적으로 다변수함수라 한다. 이 장에서는 주로 이변수함수만을 취급하나 함수의 성질은 다변수함수까지 확장할 수 있다.
가 x와 y의 함수라 하자 .f의 x에 관한 편도함수는 다음과 같이 정의된다.
, 마찬가지로 y에 관한 편도함수는
이다.
는 곡면의 방정식이다. 그러므로 점
에서의 곡선 APB의 접선의 기울기는 이 점에서의 X에 관한 Z의 변화율이다. (Y에서도 마찬가지이다.)
정리.
가 되는 조건
와
가 존재하고 모두 연속이면
이다.
이 정리는 모든 고계 편도함수에 대해 항상 성립한다.
정의. 방향도함수(directional derivative), 그래디언트(gradient), 헤시안(Hessian)
를 단위벡터라 하자. 그러면 점
에서 u방향으로의 f의 방향도함수(directional derivative)는 다음과 같이 정의된다.
일 때,
이고
일 때,
이다.
방향도함수 (directional derivative)
f가 점(a,b)에서 미분가능하고,
가 단위벡터라 하면 다음이 성립한다.
헤시안(Hessian) 행렬, 안장점(saddle point)
헤시안행렬은 다변수함수를 2차 편미분한 element로 갖는 행렬이다.
헤시안 행렬의 고유값을 통해 극소, 극대, 안장점 임계점을 판별할 수 있다.
안장점은 실수 영역의 다변수함수에서 어느 방향에서는 극대, 다른 방향에선 극소가 되는
점이다.
헤시안 행렬
헤시안 행렬은 이계도함수가 연속이라면 대칭행렬이다. 기하학적으로는 bowl 형태의 함수를 좀 더 볼록하거나 오목하게 만드는 변환이다.
· Taylor 정리
Taylor 다항식 : 미분가능한 함수에 대하여 주어진 함수와 가장 유사한 다항식.
미분가능한 함수 f(x)와 원점 근방에서 가장 유사한 일차함수
이
을 만족할 때
p(x)를 f(x)의 n-차 테일러 다항식 또는 n-차 근사다항식이라 하고
이를 f(x)~p(x)로 나타낸다.
Taylor 정리 : (n+1)번 미분가능한 함수의 n-차 테일러 다항식과 원래 함수의 오차는
(n+1)계 도함수로 표현 가능하다.
을 만족하는 c∃[0, 1]
· 다변수함수 f가 연속인 편도함수를 가지면, 적당한 t∈(0, 1)에 대해
가 성립한다.
질문. 다변수함수 f(x)에서 Taylor 정리를 사용하는 경우 gradient의 transposed form으로 계산하는 이유?
● 행렬의 곱셈 A*B : 두 행렬 A와 B의 곱 AB는 앞의 행렬 A의 열의 개수와 뒤의 행렬 B의 행의 개수가 같을 때 정의된다.
함수
의 Gradient
는 n by 1 벡터이므로, gradient에 transpose를 취하여 1 by n matrix를 구하여야 n by 1 matrix인 d와의 곱셈이 정의될 수 있다. 또한 이렇게 구한
에서는 1 by 1 스칼라 값을 얻을 수 있다.
Sage코드:
gradient를 구하는 코드는 함수.gradient() 이다.
2.4 함수의 극대(Local Maximum), 극소
근방의 모든
에 대해
이 성립하면,
는 (a,b)에서 극대과 된다고 하며,
를 극댓값(local maximum)이라 한다.
근방의 모든
에 대해
이 성립하면,
는
에서 극소가 된다고 하며,
를 극솟값(local minimum)이라 한다.
의 정의역의 모든
에 대하여
이 성립하면
는
에서 최대(최소)가 된다고 하며,
를 최댓값(최솟값)이라 한다.
함수
가
에서 극값(극댓값 또는 극솟값)을 갖는다고 가정하자. 그러면
일 때 일변수함수
는
에서 극값을 갖게 된다. 따라서
이 성립한다. 마찬가지로
일 때, 일변수 함수
는
에서 극값을 갖게 된다. 따라서
이 성립한다. 이로부터 다음 정리를 얻는다.
정리. Fermat의 임계점 정리
f가 (a,b)에서 극대 또는 극소가 되고, f의 편도함수가 존재하면 다음이 성립한다.
임계점(critical point)
을 만족하는 점
를
의 임계점(critical point)이라 한다.
●극대, 극소점이면 무조건 임계점이지만, 임계점이 무조건 극대, 극소점은 아니다. 이런 경우를 안장점(saddle point)라고 부른다.
안장점(saddle point)
: 곡면이 말ml 아낭과 같은 모양을 하고 있는 경우 임계점이지만 극대, 극소가 되지 않는 경우가 있다. 이런 경우를 안장점이라고 부른다.
임계점에서의 극대, 극소를 판별하는 방법 : f의 2계 편도함수로 구성된 헤시안(H) 을 생각해본다.
->미적분에서 2계도함수의 부호를 이용해 위로볼록과 아래로볼록을 판별하던 방식처럼 이해하면 편하다.
▶H의 고윳값이 모두 양 : f(a)는 극솟값
▶H의 고윳값이 모두 음 : f(a)는 극댓값
▶H의 고윳값이 서로 다른 부호 : 안장점
▶H의 고윳값중 하나가 0 : 함수 f의 모습이 포물기둥에 가까워짐.
●H로 극대, 극소를 판단할 수 있는 이유
-이변수함수일 경우 :
점 a 근방에서 f의 이차 근사식이
이고, n변수 함수일때는
인데, 위에서 임계점 x=a에서 함수 f의 극대, 극소를 결정하는 건
이기 때문이다.
Q. f(x,y)=0과 같은 다변수함수에서 Newton’s Method의 적용이 가능한가?
A. Gauss-Newton Method를 통해 다변수함수에서도 가능하다. 연립방정식의 근사해를 구할 때는 가우스-뉴턴(Gauss-Newton) 방법을 사용하는데, 가우스-뉴턴 방법은 뉴턴법을 연립방정식으로 확장한 것으로 볼 수 있다. 다음과 같이 변수의 개수가 n, 식의 개수가 m개인 (m>=n) 다변수 연립방정식이 있다.
위 연립방정식을 행렬 표현으로 바꾸기 위해 X = (x1, .., xn), F(X) = (f1(X), ..., fm(X))라 놓으면 위 식은 F(X) = 0와 같은 행렬식 형태가 된다. 즉, 위에서 설명한 뉴턴법을 똑같이 적용할 수 있는 형태가 된 것이다. 이때, F는 F: Rn -> Rm인 다변수 다차원 함수로 볼 수 있으며 이에 대한 미분은 Jacobian 행렬로 표현된다 (아래와 같은 행렬을 Jacobian 행렬이라 부른다)
이제 F를 함수, X를 변수로 보고 원래 뉴턴법 식을 그대로 쓰면 다음과 같은 형태가 된다.
그러나, 행렬(J)로 직접 나눌 수는 없기 때문에 물론 위 식은 잘못된 수식이다. 대신, F/J는 JP = F인 P를 구함으로써 계산할 수 있다. 즉, 연립방정식에 대한 뉴턴법 수식은 다음과 같다.
계산 방법을 좀더 부연 설명하면, 현재의 X 추정값에 대해 J와 F값을 계산한 후에 JP = F인 P를 구한다. 구한 P를 이용해서 X = X - P로 X를 업데이트한다. 업데이트된 X로 J, F를 다시 계산하고 P도 구한다. 이와 같은 과정을 X가 수렴할 때까지 반복한다 이다. 참고로, JP = F인 P는 최소자승법을 이용하면 P = (JTJ)-1JTF와 같이 계산된다.
가우스-뉴턴(Gauss-Newtorn) 방법은 어떤 초기값(해에 대한 초기 추정치) X0를 시작점으로 다음과 같이 X를 갱신함으로써 근사해를 찾는 방법이다.
출처 : https://darkpgmr.tistory.com/m/58
comment: 안장점에 대해서 그래프로써 확인하면서 보다 직관적인 이해도 더할 수 있었습니다. 또한 뉴턴법을 다변수함수로 적용시키기 위해서 확장시켜 나가는 과정을 확인하고 그 과정에서 가우스 뉴턴법이 쓰인 다는 것을 학습하였습니다.
Week4 관련 내용
27. 경사하강법과 뉴턴법의 차이 및 내용 정리
Final OK by SGLee Re-Finalized by 이시원, 유민솔, 김성준, 류재현, 조주현[경사하강법과 뉴턴법에 대해]
작성자:이시원(2021####15)작성일:7월 28일 오전 3:02
조회수:21
기존글에 python으로 진행한 실습내용과 learning rate의 변화에 따른 경사하강법의 진행 모습에 차이를 시각화한 결과를 추가하였습니다.
우리가 지금까지 배웠던 개념들은 머신러닝 알고리즘에서, 데이터의 군집을 가장 잘 나타내는 직선인 선형 회귀 직선을 찾아내는데 핵심적인 개념이라 볼 수 있습니다. 경사 하강법에 대한 여러 레포트를 썼지만, 단편적인 이해에 그치고 지금까지 배웠던 개념들을 모두 활용하는데 있어서 부족함을 느꼈습니다. 유민솔 학우님의 요약문을 보고, 저도 공부를 다시 하여 지금까지 배웠던 내용들을 첨가하여 보고서를 다시 써봤습니다.
<그림 1> 경사하강법과 뉴턴방법의 비교
유민솔, 이범수 학우님의 글에 뉴턴 방법의 경우에는 learning rate를 따지지 않는다는 댓글을 달았는데, MATH4AI를 통해 더 공부를 해 본 결과 실제로는 값이 너무 커지는 경우를 방지하고 적절한 line search를 동반하기 위해 learning rate를 적용한다는 것을 알았습니다. 그래서 경사하강법과 뉴턴 방법에 대해 잘못 알고 있는 것이 있는지 한 번 더 내용을 점검하여 스스로 정리해 봤습니다.
<그림 2> 선형 회귀 직선의 개요
머신 러닝 알고리즘 개요 수업을 보고 요약한 내용입니다. 예를 들어 키라는 값에 대응하는 값인 몸무게가 있을 때, 우리는 임의의 키에 대응하는 몸무게 역시 찾아내고 싶고 군집에 가장 가까운 형태의 직선을 그려내어 대응하는 몸무게를 찾을 수 있습니다. 이 직선에 해당하는 것이 선형 회귀 직선입니다. 이러한 개념은 여러 가지 형태로 이용될 수 있는데, 예를 들자면 여러 사진의 데이터가 있고 이것이 개의 형태에 가까운지를 판별하는 직선으로 활용될 수도 있는 것입니다. 우리가 잘 알고 있는 머신러닝 알고리즘의 기초입니다. 선형 회귀 직선을 그리기 위해서는 H(W,b)에 해당하는 가설 직선(Hypothesis fuction)이 필요합니다. 우리는 이 가설 직선이 목표로 하는 선형 회귀 직선과 얼마나 가까운 가를 판별해야 합니다. 여기에 사용되는 개념이 우리가 배운 최소제곱해(least sqare fuction)입니다. 실제 데이터값과의 차이를 제곱하여 더하는 방식으로, 그것이 얼마나 0에 가까운가를 따짐으로써 가설 직선이 목표로 하는 직선과 가까운가를 판별할 수 있습니다. 여기서 최소 제곱해는 cost로서 대표되는데, cost는 W와 b를 파라미터로 갖는 함수입니다. Cost 함수는 W를 변수로 취하느냐, b를 변수로 취하느냐에 따라서 다르며, 우리는 최적의 직선을 찾아내기 위해 W,b 각각의 변수에서 이차함수의 최솟값을 찾아내야 할 것입니다. 이차함수의 최솟값은 극값에서 결정됩니다. 극값을 찾아내기 위해, 우리가 배웠던 경사하강법과 뉴턴 방법중 적절한 것을 사용하게 되는데, 여기서는 경사하강법만을 다루겠습니다. 그래서 우리는 경사하강법을 이용해 최적해인 Global optinum에 가까운 W와 b값을 찾을 것입니다.
<그림 3> 경사하강법을 적용한 머신러닝의 알고리즘
우리는 수많은 데이터를 input으로 제공하고, 이것이 (xi, yi)값이 됩니다. 가설 직선에 input으로 제공한 데이터를 적용하여 cost를 찾아내고, 찾아낸 cost가 임계점에 도달했다면 알고리즘을 종료, 임계점에 도달하지 못했다면 새로운 cost를 업데이트 해야합니다. 새로운 cost를 업데이트하기 위해서는 W와 b값을 새로이 설정할 필요가 있는데, 이 때 W와 b값이 원래의 값에서 너무 현저히 작거나 커지는 것을 방지하기 위해 learning rate를 적용합니다. 적절한 learning rate는 우리가 수업시간에 배운 내용을 통해 찾아낼 수도 있으며, 물리적인 방법으로 적절한 결과값을 도출해 낼 때까지 코드를 수정할 수도 있습니다.
<그림 4> 행렬을 통한 W와 b값을 찾아내는 과정
역행렬을 통해 W와 b값을 구할 수 있다는 것을 정리한 글입니다. Cost가 임계점에 도달하였다면, 그것이 선형 회귀 직선에 가까운 W와 b의 값이 됩니다.
경사하강법(Gradient descent algorithm)과 뉴턴방법(Newton’s method)의 비교
2021313666유민솔 느낀점
:경사하강법과 뉴턴 방법에 대한 전반적인 내용은 책에 자세히 나와있기 때문에, 책의 내용을 요약하기보단 제가 개념을 이해하는데 도움이 되었던 외부 자료 및 발상들 위주로 정리해보았습니다. 처음에 이해하는 데 어려움이 있었지만 그전에 배웠던 개념들과 교수님이 비유해주신 내용을 곱씹어가며 생각해보니(ex:스키장에서 최단 거리로 내려오는 경우를 상상할 것) 어느정도 이해가 된 것 같았고, 이를 정리해보면 좋겠다는 생각을 했습니다. 이를 기반으로 실습을 진행할 계획입니다. 같은 함수를 뉴턴 방법과 경사하강법 모두를 이용해 최솟값이 나오는 좌표를 구해보고 오차를 비교하는 것, 그리고 오차가 크게 나온 방법이 있다면 이유를 그 함수의 특징과 연관지어서 분석해 보는 활동을 한다면 의미 있을 것 같습니다.
①경사하강법(Gradient descent algorithm)
: 머신 러닝에서 손실함수(=오차함수, 비용함수)의 최솟값을 찾기 위해 경사하강법을 이용.
->쉽게 생각하면 미분값을 조금씩 더하거나 빼서 함수의 극값을 찾는 방법.
●알고리즘
1)초기근사해와 입실론(허용오차)을 아주 작게 잡기. 보통 10^-8 이하로 잡는다.
2)Gradient를 잡아서 dk를 감소하는 방향으로 잡는다. dk가 아주 작으면 알고리즘을 바로 멈춰도 된다.
(*Gradient : 다변수 함수 f의 각 변수에 대해 편미분한걸 벡터로 모아놓은 것. 다변수 함수의 그래프에서 순간변화율이 가장 빠르게 증가하는 방향을 나타내고, 벡터의 크기는 그 증가의 가파른 정도, 즉 기울기이다.)
3)계속 dk의 값을 작게 갱신시킨다.
●수렴 속도를 조정하는 step size를 지정해줘야 한다.
②뉴턴방법(Newton’s method)
: 뉴턴 방법은 함숫값이 0이 되는 최적해를 찾는 방법이다. 내부 원리는 거의 유사하고(일차 미분의 원리가 사용), hessian을 통해 극값 판단이 필요하다. 함수 f의 극대, 극소를 구하기 위해 gradient descent 방법을 직접 적용해도 되지만, f가 극대 극소인 점은 f’=0인 점이므로 뉴턴 방식으로 f’=0인 점을 구해도 된다.
③두 방식의 비교.
: 경사하강법은 step size파리미터를 지정해줘야 하는데 비해 뉴턴법 계열에서는 현재의 함숫값과 미분값(기울기)로부터 step size가 자동으로 결정되기 때문에 정해줄 필요가 없다. 또한 해 근처에서 수렴 속도가 급격히 느려지는 문제점을 해결 가능하다. 그러나 뉴턴법은 f’=0의 해를 구하는 방식으로 최대 최소를 판정하는데, 여기서 극대와 극소를 구분하여 찾을 수 없고, 임계점에서 반드시 f가 극점인 건 아니다.(saddle point, 안장점일 가능성이 존재한다). 그러므로 뉴턴법은 hessian을 통한 극값 판정법과 함께 이용해야 하는데, 복잡한 함수인 경우 불필요한 연산이 필요할 수 있다. 적절한 경우에 따라 두 방식을 이용하는게 중요할 것으로 보인다.
경사하강법 python 코드 실습(이시원):
경사하강법을 python의 numpy라이브러리를 통하여 직접 구현해본 후 구현한 코드를 다양한 learning rate에서 시행하여 learning rate의 차이에 따라 경사하강법에서 나오는 결과들이 어떻게 변화하는지를 확인할 수 있었습니다.
이 과정을 통해서 gradient를 직접구하는 프로그램 또한 numpy라이브러리를 통해서 구성해볼 수 있는 기회가 되었습니다.
python 코드:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]
precision = 1e-8
step = [0.02,0.1,0.5]
epos = 1000
data = 100
hat = np.random.rand(2,1)
theta = np.random.randn(2,1)
fix = theta
X_new = np.array([[0],[2]])
X_new_b = np.c_[np.ones((2,1)),X_new]
plt.figure(figsize=(10,4))
plt.ylabel("$y$",rotation=0,fontsize=15)
for i in range(0,3,1):
plt.subplot(131+i)
plt.plot(X,y,"b.")
learning_rate = step[i]
theta = fix
for j in range(0,epos,1):
if j<10:
pred = X_new_b.dot(theta)
style = ""
if j>0:
style= "b-"
else :
style = "r--"
plt.plot(X_new,pred,style)
grad = 2/data*X_b.T.dot(X_b.dot(theta)-y)
theta = theta - learning_rate*grad
plt.xlabel(f"$x_{i+1}$",fontsize=15)
plt.axis([0,2,0,15])
plt.title(f"$\eta = {learning_rate}$",fontsize=14)
plt.show()
시행 결과
<참고 문헌>
1. https://bnzn2426.tistory.com/111
2. https://ukb1og.tistory.com/18
3. https://darkpgmr.tistory.com/m/133
4. MATH4AI, 이상구, Bigbook
5. 머신러닝의 기초 - 선형 회귀 한 번에 제대로 이해하기 (30분만 투자해봐요!) – YouTube 동빈나
comment: 뉴턴 법과 경사하강법의 차이점에 대해서 학습할 수 있었으며, python코드를 통해서 경사하강법에서의 학습률의 중요도를 확인해보고자 다양한 학습률을 가지고서 답을 찾아나가는 과정을 거치면서 학습률을 구하는 방식에 중요도에 대해서도 인지하게 되었습니다. 이부분에 대해서 기존의 작성되어 있던 글들에서 학습률을 그때그때 지정하는 방법을 학습할 수 있었고, 경사하강법의 구현에 대한 자신감을 가지게 되었습니다.
28. 경사하강법 구현 코드의 수정
[ Final OK by SGLee ] Re-Finalized by 이범수, 이시원, 유민솔, 김성준, 류재현, 조주현, 박건영 [경사하강법에 대해]
작성자:이범수(2016####23)작성일:7월 28일 오후 12:24
조회수:19
앞서 만들어주신 코드에 조금 수정하면 어떨까 싶은 부분을 만져보았습니다.
돌려보고 의견이나 질문 해주세요
importnumpyasnp
frommatplotlibimportpyplotasplt
data=np.array([[2,0],[4,0],[6,0],[8,1],[10,1],[12,1],[14,1]])
w1=0
w0=0
lr=0.05
defsigmoid(x):
return1/(1+np.e**(-x))
foriinrange(2001):
forx_data,y_dataindata:
w1_diff=x_data*(sigmoid(w1*x_data+w0)-y_data)
w0_diff=sigmoid(w1*x_data+w0)-y_data
w1=w1-lr*w1_diff
w0=w0-lr*w0_diff
Error=(data[:,0]*w1+w0-data[:,1]).reshape(-1,1)
Error=(Error**2).sum()
ifi%500==0:
print(Error)
print("generation=%.f,기울기=%.04f,절편=%.04f"%(i,w1,w0))
fig=plt.figure()
ax=fig.add_subplot()
ax.grid(True)
ax.scatter(data[:,0],data[:,1])
ax.plot(data[:,0],data[:,0]*w1+w0,c='r')
plt.show()
Re-Finalized (2) by 이시원, 유민솔, 김성준, 류재현, 조주현, 박건영 [경사하강법에 대해]
작성자:박건영(2021####42)작성일:7월 28일 오전 10:12
조회수:2
앞서 여러학우분들이 경사하강법과 뉴턴법에 대해 코딩을 하고 정리를 한 것에 다시 다른 방법으로 경사하강법을 구현할 수 있는 코딩 알고리즘을 추가해보았습니다!
import numpy as np
data = [[2, 0], [4, 0], [6, 0], [8, 1], [10, 1], [12, 1], [14, 1]]
w1 = 0
w0 = 0
lr = 0.05
def sigmoid(x):
return 1 / (1 + np.e ** (-x))
for i in range(2001):
for x_data, y_data in data:
w1_diff = x_data*(sigmoid(w1*x_data + w0) - y_data)
w0_diff = sigmoid(w1*x_data + w0) - y_data
w1 = w1 - lr * w1_diff
w0 = w0 - lr * w0_diff
if i % 500 == 0:
print("generation=%.f, 기울기=%.04f, 절편=%.04f" % (i, w1, w0))
comment: 기존의 작성하였던 코드들이 다른 사람들의 손을 거치는 경우 어떠한 변화와 발전이 생길 수 있는지에 대해서 알 수 있는 학습이었습니다.
Week 5 관련 내용
29. 막대 도표와 히스토그램의 사용 예시와 사분위와 평균에 대한 질의응답
[Final OK by SGLee] Finalized by 김민서, 박수연, 이시원, 홍정명[5주차]1강 요약 및 답변 + 사분위 관련 질문 과 답, (2) 2) 평균이 항상 사분위 범위 안에 존재하는 것은 아닙니다. 아닌 경우도 있습니다.
작성자:박수연(2021####28)작성일:8월 5일 오전 1:55
조회수:36
[Final OK by SGLee] Finalized by 김민서, 박수연, 이시원, 홍정명[5주차]1강 요약 및 답변 + 사분위 관련 질문 과 답
Finalized by 김민서, 이시원, 홍정명, 박수연 [5주차]요약 및 질문.docx
김민서 학우님께서 요약하신 5주차 1강 내용을 바탕으로 추가적으로 필요한 것들을 정리해보았으며,
사분위수 이외에도 백분위수에 대해 실습해 보고 싶어 R언어를 이용해 자유롭게 백분위수를 계산할 수 있는 코드를 찾아보았습니다.
또한, 김민서 학우님께서 해주신 질문을 보던 중 궁금한 점이 있어 질문드립니다.
김민서 학우님의 질문:
Q2.평균이라는개념은알고있었지만사분위라는개념을이강의를통해서처음알게되었습니다.순서대로숫자를나열한후4등분해서Q2-Q3사이의범위라고이해했습니다.그럼평균이항상이사분위범위안애존재하는것인가요?
저 또한 사분위 범위의 개념을 처음보기 때문에 확실하지는 않지만 사분위 범위가 Q2-Q3 사이의 범위가 아닌 Q1-Q3 사이의 범위로 이해하고 있습니다.
저희 교재에 있는 예제 결과를 이용하였을 때 아래의 그림과 같은 방식으로 이해를 하고 있는데, 어떤 방식으로 이해를 하는 것이 맞을까요?
--------------------------------
5주차1강요약및질문
작성자:김민서(2021####02)작성일:8월4일오후9:10
조회수:27
Q1.수치나데이터셋을통해도수분포표,원도표,막대도표등다양한방법으로표현하고시각화할수있다는것을알게되었습니다.다양한도표를찾다가히스토그램과막대도표가모양이비슷해보이고막대도표의경우에는막대사이의간격이있다는것,히스토그램에는막대사이의공백이없다는것이었습니다.이차이로어떤경우에활용할수있는지궁금합니다.
답 by 이시원(2021####15)8월 4일 오후 9:44
1) 막대 도표의 경우에는 각 막대 사이의 간격이 있기 때문에 이산 변수의 분포를
히스토그램같은 경우에는 각 막대 사이의 간격이 붙어있기 때문에 연속 변수의 분포의 표현에 보다 적합할 수 있습니다. 아래 사이트는 내용을 참고한 사이트입니다.https://ko.gadget-info.com/difference-between-histogram
Q2.평균이라는개념은알고있었지만사분위라는개념을이강의를통해서처음알게되었습니다.순서대로숫자를나열한후4등분해서Q2-Q3사이의범위라고이해했습니다.그럼평균이항상이사분위범위안애존재하는것인가요?
답 by 홍정명(2021####17)8월 4일 오후 9:28
2) 평균이 항상 사분위 범위 안에 존재하는 것은 아닙니다. 아닌 경우도 있습니다.
극단적으로 예를 들면 0 이상 1이하의 수 20개 정도에 마지막으로 10억이 하나 존재하는 자료를 생각해 볼 수 있습니다.
이상구(LEE SANGGU)8월 4일 오후 10:12
홍정명씨와 이시원씨의 멋진 답 들 입니다. ^^
comment: 우리가 흔하게 사용하는 통계를 수치화하는 수단들이 어떠한 자료 형태냐에 따라서 적합한 형태가 존재한다는 것을 이 글을 통해서 생각해보고 학습할 수 있었습니다. 또한, 평균과 사분위 범위 같은 느낌적으로는 비슷하다는 느낌이 들어도 확실히 확인 된 것이 아니라면 검증해 볼 필요성이 존재한다는 것을 알 수 있었습니다.
30. 5주차 1강에 대한 정리 및 표본평균=모평균의 증명 정리
[Final OK by TA] Re-finalized by 김민서, 박수연, 이시원, 홍정명, 장지원([5주차] 1강 정리 추가)
작성자:임동선(2017####79)작성일:8월 7일 오후 1:35
조회수:21
다른 학우분들의 강의내용 요약에 제가 해본 확률분포 관련 요약을 추가해 보았습니다. 학우분들이 진행한 정리내용이 제가 얻은 지식을 더 잘 이해하는 데 도움이 된 것 같습니다.
-----------------------------
Re-finalized by 김민서, 박수연, 이시원 홍정명, 장지원 5주차 1강 정리 추가
작성자:장지원(2020####71)작성일:8월 5일 오후 4:43
조회수:18
https://gallery.shinyapps.io/CLT_mean/
위 링크는 모집단의 분포, 평균, 표준편차, 샘플 크기, 샘플 개수 등을 임의로 설정한 후 그 결과로 분포 모양이 어떻게 변화하는지 시뮬레이션으로 확인해볼 수 있는 사이트 입니다.
저는 배운 것을 적용하고 눈으로 확인할 때 가장 큰 희열을 느끼는데요, 여러분들도 학습할 때 이 사이트를 이용하시면 흥미를 느끼실 수 있을 거라 생각합니다.
---------------------------------------------------
고등학생 때 확률에 관한 문제를 풀면서 표본평균이 모평균과 왜 같은지 이유를 모른채로 문제를 풀곤 했었습니다. 그 증명을 찾아보고 정리했습니다.
[표본평균이모평균과같음을증명]
모집단이하나있습니다.이모집단의평균은μ이고분산은σ2라고놓겠습니다.이모집단에서크기가n인표본을뽑아봅시다.첫번째표본은표본1,두번째표본은표본2이렇게무수히많은표본을뽑을수있습니다.복원추출을가정합니다.따라서표본안에있는원소들은중복이가능하고,원소들이뽑히는사건은서로'독립'이됩니다.
Part Ⅲ 확률통계와 빅데이터
-통계학 (사회 부흥의 실마리, 데이터 과학의 기초)
cf) 통계학의 역사
1) 통계학은 17세기에야 비로소 시작되었다. 이전에도 숫자표나 통계적 기법 등을 사용했지만 왜 17세기부터 시작됐다고 여기는 것일까? 통계적으로 생각하는 방법은 총 다섯가지로 ‘자료의 수집과 분류, 분류된 자료를 표나 그래프로 정리, 자료의 특성 분석, 결과의 판단과 추론, 추론의 검증’으로 이루어진다. 이전의 수학에서는 이 중 1단계에만 머물러 있었다.
2) 런던의 전염병을 기록하면서 통계학이 탄생했다. 런던에 많은 사람들이 몰리면서 전염병이 발생했는데, 이 때문에 1517년부터 연말에 ‘사망표’를 발행했다. 이때 존 그랜트라는 상인은 사망표 하나로는 정보가 부실하다고 생각해 과거 자료들을 모두 조사하여 ‘특정한 병의 비율이 항상 꾸준함, 사망률은 계절에 따라 변함, 도시의 사망률이 지방보다 높음’이라는 결론을 내렸다. 이를 토대로 그는 ‘사망표에 관한 자연적 및 정치적 관찰’이라는 책을 썼으며 이것이 근대 통계학을 탄생하게 했다고 본다.
3) 독일의 30년 전쟁 후에 실시한 국세 조사를 통해 통계학이 탄생했다고 보기도 한다. 경제학자 헤르만 코링은 17세기 전반에 독일에서 일어난 ‘30년 전쟁’이라는 종교 전쟁 후 국세 조사를 실시하여 ‘국세학’이라는 주제로 강연을 했고, 이때 통계학의 어원인 국가(state)로서의 국세통계학을 세상에 소개했다.
-통계 프로그램인 R프로그램 사용하여 데이터 처리
dev.off( ) 명령어로 그래프 확인
-그래프의 종류
원 도표 막대 도표 도수 분포표
5주차 1강 요약 및 질문
작성자 : 김민서(2021####02)작성일 : 8월 4일 오후 9:10
조회수 : 27
Q1. 수치나 데이터셋을 통해 도수분포표, 원도표, 막대도표 등 다양한 방법으로 표현하고 시각화할 수 있다는 것을 알게 되었습니다. 다양한 도표를 찾다가 히스토그램과 막대도표가 모양이 비슷해보이고 막대 도표의 경우에는 막대 사이의 간격이 있다는 것, 히스토그램에는 막대 사이의 공백이 없다는 것이었습니다. 이 차이로 어떤 경우에 활용할 수 있는지 궁금합니다.
이시원(2021####15)8월 4일 오후 9:44
1) 막대 도표의 경우에는 각 막대 사이의 간격이 있기 때문에 이산 변수의 분포를 히스토그램같은 경우에는 각 막대 사이의 간격이 붙어있기 때문에 연속 변수의 분포의 표현에 보다 적합할 수 있습니다. 아래 사이트는 내용을 참고한 사이트입니다. https://ko.gadget-info.com/difference-between-histogram
-표본평균(sample mean)
[표본평균이 모평균과 같음을 증명]
모집단이 하나 있습니다. 이 모집단의 평균은 이고 분산은 라고 놓겠습니다. 이 모집단에서 크기가 n인 표본을 뽑아봅시다. 첫번째 표본은 표본1, 두번째 표본은 표본2 이렇게 무수히 많은 표본을 뽑을 수 있습니다. 복원추출을 가정합니다. 따라서 표본 안에 있는 원소들은 중복이 가능하고, 원소들이 뽑히는 사건은 서로 '독립'이 됩니다.
표본평균은 아래와 같이 정의됩니다.
표본평균의 기댓값은 아래와 같이 구합니다.
각각은 모집단의 평균과 같습니다.
아래 등식이 유도됩니다.
-표본분산(sample variance)
-표본표준편차(sample standard deviation)
-중위수(median)
-사분위 수: 4등분하는 위치의 수(3개)
Q1(제1사분위수, 제25백분위수)
Q2(제2사분위수, 중위수, 제50백분위수)
Q3(제3사분위수, 제75백분위수)
-사분위 범위(inter-quartile range, IQR): IQR = Q3-Q1
5주차 1강 요약 및 질문
작성자 : 김민서(2021####02)작성일 : 8월 4일 오후 9:10
조회수 : 27
Q2. 평균이라는 개념은 알고 있었지만 사분위라는 개념을 이 강의를 통해서 처음 알게되었습니다. 순서대로 숫자를 나열한 후 4등분해서 Q2-Q3 사이의 범위라고 이해했습니다. 그럼 평균이 항상 이 사분위 범위안애 존재하는 것인가요?
홍정명(2021####17)8월 4일 오후 9:28
2) 평균은 그 사분위 범위 안에 항상 존재하지 않습니다. 극단적으로 예를 들면 0 이상 1이하의 수 20개 정도에 마지막으로 10억이 하나 존재하는 자료를 생각해 볼 수 있습니다.
-백분위수(percentile)
*백분위수 (sage)R언어 실습
quantile(data, c(p1, p2, …, pn))을 이용하여 사분위수 이외에도 제17백분위수, 제34분위수, 제51분위수 등 자유롭게 백분위수들을 계산할 수 있습니다.
comment: 표보집단의 평균, 분산, 표준편차와 모집단의 평균, 분산, 표준편차를 구하는 방법이 다르다는 것을 학습할 수 있었으며, 통계학의 역사에 대해서 읽어보고 어떠한 경로를 통해서 세상에 주목받기 시작했는지에 대해서 학습하는 기회가 되었습니다.
31. 베르누이 분포, 이항 분포, 포아송 분포에 대한 정리
[Final OK by SGLee] Re-Finalized by 오혜준, 이혜연, 이시원, 양지원 (베르누이 분포, 이항 분포, 포아송 분포)
작성자:양지원(2021####82)작성일:8월 9일 오후 10:29
조회수:18
베르누이 분포의 mean과 variance를 구하는 방법을 추가하고 이해하기기 쉬운 discrete function으로 베르누이 분포를 표현하는 방법을 추가하여 보았습니다.
이항분포와 포아송분포에 관한 내용을 다시 한번 보고 확실히 실습과 함께 이해할수 있었던 finalized script였던거 같습니다!
comment: 이 과정을 통해서 포아송 분포에 대해서 이해할 수 있었으며, 작년에 고등학교에서 어렴풋이 배웠던 이항분포를 정규분포로 생각하고 계산해도 된다고 말씀해주셨던 이유를 유추해 볼 수 있었습니다. 또한, 베르누이 분포에 대해서 평균과 분산과 관련된 식을 작성해주신 것을 토대로 이항 분포의 평균과 분산을 구해볼려는 시도를 할 수 있었습니다. 이항분포에서의 평균과 분산, 표준편차 식이 간단히 된 만큼, 기존보다 적은 메모리와 시간의 소모로 효율적으로 알고리즘을 구성하고 문제를 해결해 나갈 수 있을 것이라는 자신감을 가질 수 있었습니다.
32. 베이즈 추정과 나이브 베이즈, 라플라스 스무딩에 대한 정리
[Final OK by SGLee] Re-Finalized by 오혜준, 이혜연, 이시원, 양지슬 (베이즈 추정과 나이브 베이즈, 라플라스 스무딩)
작성자:양지슬(2017####18)작성일:8월 10일 오후 2:25
조회수:14
여러 학우분들께서 정리해주신 베이즈 정리와 그 응용에 대한 글을 읽고, 나이브 베이즈의 한계점인 zero probability 혹은 zero frequency를 극복할 방안으로의 laplace smoothing에 대해 찾아보았습니다.
[Final OK by SGLee] Re-Finalized by 오혜준, 이혜연, 이시원, 양지슬 (베이즈 추정과 나이브 베이즈, 라플라스 스무딩)
작성자:양지슬(2017####18)작성일:8월 10일 오후 2:25
조회수:14
여러 학우분들께서 정리해주신 베이즈 정리와 그 응용에 대한 글을 읽고, 나이브 베이즈의 한계점인 zero probability 혹은 zero frequency를 극복할 방안으로의 laplace smoothing에 대해 찾아보았습니다.
베이즈 정리와 응용
오혜준, 이시원, 이혜연, 양지슬
베이즈 정리란?
사전확률과 사후확률의 관계를 조건부 확률을 이용하여 계산하는 이론.
이때 사전확률은 확률변수에 대해서 관측 자료를 고려하지 않고 얻은 결과로써 사전에 미래에 사건이 일어날 확률을 측정한 것을 말하며, 사후확률은 관측이나 증거에 대한 조건부 확률을 이야기합니다.
베이즈 추정(Bayesian Estimation)이란?
추론 대상의 사전 확률과 추가적인 정보를 기반으로 해당 대상의 사후 확률을 추론하는 통계적 방법, 모숫값이 가질 수 있는 모든 가능성의 분포를 계산하는 작업.
어떤 확률분포함수의 모수를 μ라고 했을 때, 최대가능도추정법에서는 모수를 미지의 상수로 보지만 베이즈 추정법에서는 모수를 확률밀도함수를 갖는 확률변수로 본다. 즉, 어떤 값이 가능성이 높고 어떤 값이 가능성이 낮은지를 살펴볼 수 있다.
※ 베이즈 추정법을 사용하는 이유: 추정된 모숫값 하나만으로는 추정의 신뢰도와 신뢰구간을 구할 수 없기 때문이다.
는 사후확률, p(X)는 사전확률.
ex 1) 협력업체로부터 납품받은 기계의 성능을 평가하는 경우, 무작위 발췌검사 표본에서 얻어진 정보만으로 모수(협력업체로부터 납품받은 기계 전체)의 성능을 평가해야 한다. 이 때, 과거 납품 시 성능검사기록이나 비슷한 부품의 성능 자료, 이 부품의 물리적 특성에 관한 지식 등을 통해 사전 정보를 얻을 수도 있다. 이런 경우 단순히 표본을 통해 모수를 추정하기보다 표본 정보와 사전 정보를 함께 사용하여 모수를 추정하는 것이 보다 바람직하다.
ex 2) 암 검진의 위음성, 위양성 확률 계산
주민의 10.5%가 암 환자이고, 89.5%가 암 환자가 아닌 어떤 마을에서 암 검진을 실시했을 때, 암 환자 중 양성 판정을 받은 비율은 90.5%, 암 환자 중 음성 판정을 받은 비율은 9.5%, 암 환자가 아닌 사람 중 양성 판정을 받은 비율은 20.4%, 암 환자가 아닌 사람 중 음성 판정을 받은 비율은 79.6%이다.
C: Cancer(암 환자), P: Positive(양성), N: Negative(음성)
P(C): 암 환자일 확률=0.105 P(~C): 암 환자가 아닐 확률=0.895
P(P│C): 암 환자일 때 양성 판정을 받을 확률=0.905 (민감도. sensitivity.)
P(N│C): 암 환자일 때 음성 판정을 받을 확률=0.095
P(P│~C): 암 환자가 아닐 때 양성 판정을 받을 확률=0.204
P(N│~C): 암 환자가 아닐 때 음성 판정을 받을 확률=0.796
Q. 이 때, P(C│P): 양성 판정을 받은 사람이 암 환자일 확률은?
베이즈 추정에 의해 P(C│P)=P(P│C)*P(C) / P(P)
여기서, P(P)=P(P,C)+P(P,~C)=P(P│C)*P(C)+P(P│~C)*P(~C)
P(P), 즉 양성 판정을 받을 확률은 암 환자이자 양성 판정을 받을 확률(P(P, C))과 암 환자가 아닌데 양성 판정을 받을 확률(P(P, ~C))의 합과 같다.
조건부 확률에 의해 P(P,C)=P(P│C)*P(C)이고, P(P,~C)=P(P│~C)*P(~C)
∴ P(C|P)=P(P|C)*P(C) / P(P)=0.905*0.105 / (0.905*0.105 + 0.204*0.895)=0.342
P(C|P), P(C|N), P(C|N)도 마찬가지로 계산하면 각각 0.65797, 0.013808, 0.986192
이를 파이썬으로 풀어보면 다음과 같습니다.
# load dataset
import pandas as pd
df = pd.read_csv('cancer_test_data.csv')
df.head()
# 양성 판정 받은 사람 중 암 환자일 확률: P(C|P)
df.query('test_result == "Positive"').has_cancer.mean()
>>0.34282178217821785
# 양성 판정 받은 사람 중 암 환자가 아닐 확률: P(~C|P)
(df.query('test_result == "Positive"')['has_cancer'] == False).mean()
>>0.65717821782178221
# 음성 판정 받은 사람 중 암 환자일 확률: P(C|N)
df.query('test_result == "Negative"').has_cancer.mean()
>>0.013770180436847104
# 음성 판정 받은 사람 중 암 환자가 아닐 확률: P(~C|N)
(df.query('test_result == "Negative"')['has_cancer'] == False).mean()
>>0.98622981956315292
실제 데이터를 pandas로 계산한 결과와 베이즈 추정으로 계산한 결과가 같은 것을 볼 수 있습니다.
지도학습(Supervised learning): 사전 데이터를 기반으로 충분히 학습시키는 방법.
지도학습을 위한 첫 스텝은 Feature와 Label을 파악하는 것.
Label: 우리가 원하는 분류 결과. (아래의 예시에서는 호랑이, 고양이, 얼룩말.)
Feature: Label 결과에 영항을 주는 요소. (동물의 자세, 표정, 생김새, 털 색깔 등.)
나이브 베이즈
지도 학습의 일종으로, Feature에 따라 Label을 분류하는데 베이즈 정리를 사용하는 것이 특징. 따라서 모든 Feature가 서로 독립(independent)이어야 한다는 가정이 필요.
스팸 메일 필터, 텍스트 분류, 감정 분석, 추천 시스템 등에 광범위하게 활용되는 분류 기법.
ex) Image classification – 동물 사진 분류: 사전에 수많은 호랑이, 고양이, 얼룩말 사진에 대해 학습을 시킨 후, 학습 시 사용되었던 사진이 아닌 새로운 사진에 대해서도 정확한 분류가 가능.
나이브 베이즈 분류기(Naive Bayes Classifier)란 무엇인가?
나이브 베이즈 분류: 베이즈 정리에 기반한 통계적 분류 기법, 가장 단순한 지도 학습 (supervised learning) 중 하나로 나이브 베이즈 분류기는 빠르고, 정확한 알고리즘.
나이브 베이즈의 장단점
ex 1) 날씨 정보와 축구 경기 여부에 대한 데이터에서, 날씨에 대한 정보를 기반으로 축구를 할 것인지 안 할 것인지 확률을 구하는 예제.
먼저, 맨 왼쪽 테이블을 보겠습니다.
날씨에 따라 축구를 했는지 안했는지에 대한 과거 데이터입니다. 이 과거 데이터를 먼저 Training 시켜 모델을 만든 뒤 그 모델을 기반으로 어떤 날씨가 주어졌을 때 축구를 할지 안 할지 판단하는 것이 목적입니다. Frequency Table은 주어진 과거 데이터를 횟수로 표현한 것입니다. Likelihood Table 1은 각 Feature (여기서는 날씨)에 대한 확률, 각 Label (여기서는 축구를 할지 말지 여부)에 대한 확률을 구한 것입니다. Likelihood Table 2는 각 Feature에 대한 사후 확률을 구한 것입니다.
Feature가 하나일 때 나이브 베이즈 분류 문제
문제 1. 날씨가 overcast일 때 경기를 할 확률은?
P(Yes|Overcast) = P(Overcast|Yes) P(Yes) / P(Overcast) <- 베이즈 정리에 의해
1. 사전 확률 P(Overcast) = 4/14 = 0.29
P(Yes) = 9/14 = 0.64
2. 사후 확률 P(Overcast|Yes) = 4/9 = 0.44
3. 베이즈 정리 공식에 대입 P(Yes|Overcast) = P(Overcast|Yes) P(Yes) / P(Overcast) = 0.44 * 0.64 / 0.29 = 0.98
즉, 날씨가 Overcast일 때 축구를 할 확률이 0.98이라는 뜻입니다.
문제 2. 날씨가 Overcast일 때 경기를 하지 않을 확률은?
P(No|Overcast) = P(Overcast|No) P(No) / P(Overcast)
1. 사전 확률 P(Overcast) = 4/14 = 0.29
P(No) = 5/14 = 0.36
2. 사후 확률 P(Overcast|No) = 0/9 = 0
3. 베이즈 정리 공식에 대입
P(No|Overcast) = P(Overcast|No) P(No) / P(Overcast) = 0 * 0.36 / 0.29 = 0
즉, 날씨가 Overcast일 때 축구를 할 확률이 0이라는 뜻입니다.
P(Yes|Overcast) = 0.98, P(No|Overcast) = 0입니다.
즉, 날씨가 Overcast일 때 축구를 하는 확률은 0.98, 축구를 하지 않을 확률은 0입니다.
두 확률을 비교한 뒤 더 높은 확률의 Label로 분류를 하면 됩니다.
두 확률을 비교했을 때 'Yes' Label의 확률이 0.98로 더 높습니다.
따라서 나이브 베이즈 분류기는 날씨가 Overcast일 때 축구를 할 것이라고 판단합니다.
Feature가 Multiple일 때 나이브 베이즈 분류
문제 1. 날씨가 overcast, 기온이 Mild일 때 경기를 할 확률은?
P(Paly=Yes | Weather=Overcast, Temp=Mild) = P(Weather=Overcast, Temp=Mild | Play=Yes)
P(Play=Yes) / P(Weather=Overcast, Temp=Mild)
P(Weather=Overcast, Temp=Mild | Play=Yes) = P(Overcast|Yes)
P(Mild|Yes) P(Weather=Overcast, Temp=Mild) = P(Weather=Overcast)
P(Temp=Mild) = (4/14) * (6/14) = 0.1224
1. 사전 확률 P(Yes) = 9/14 = 0.64
2. 사후 확률 P(Overcast|Yes) = 4/9 = 0.44 P(Mild|Yes) = 4/9 = 0.44
3. 베이즈 공식에 대입 P(Weather=Overcast, Temp=Mild | Play=Yes) = P(Overcast|Yes) P(Mild|Yes) = 0.44 * 0.44 = 0.1936 P(Paly=Yes | Weather=Overcast, Temp=Mild) = P(Weather=Overcast, Temp=Mild | Play=Yes)
P(Play=Yes) / P(Weather=Overcast, Temp=Mild) = 0.1936 * 0.64 / 0.1224 = 1
문제 2. 날씨가 overcast, 기온이 Mild일 때 경기를 하지 않을 확률은?
P(Paly=No | Weather=Overcast, Temp=Mild) = P(Weather=Overcast, Temp=Mild | Play=No)
P(Play=No) / P(Weather=Overcast, Temp=Mild)
P(Weather=Overcast, Temp=Mild | Play=No) = P(Overcast|Yes) P(Mild|No)
1. 사전 확률 P(No) = 5/14 = 0.36
2. 사후 확률 P(Overcast|No) = 0/5 = 0 P(Mild|No) = 2/5 = 0.4
3. 베이즈 공식에 대입 P(Weather=Overcast, Temp=Mild | Play=No) = P(Overcast|No) P(Mild|No) = 0 * 0.4 = 0
P(Paly=No | Weather=Overcast, Temp=Mild) = P(Weather=Overcast, Temp=Mild | Play=No)
P(Play=No) / P(Weather=Overcast, Temp=Mild) = 0 * 0.36 / 0.1224 = 0
축구를 할 확률은 1이고, 축구를 하지 않을 확률은 0입니다.
축구를 할 확률이 더 크기 때문에 날씨가 Overcast이고 기온이 Mild일 때는 축구를 할 것이라고 분류합니다.
이렇듯 나이브 베이즈는 베이즈 정리를 활용하여 확률이 더 큰 Label로 분류를 합니다.
파이썬으로 나이브 베이즈 구현해보기
날씨, 기온에 따른 축구 여부 분류 2개의 Feature (Weather, Temp)와 1개의 Label (Play)로 구성된 dataset을 아래와 같이 만들어 주고 간단하게 특징 데이터를 나이브베이즈 모델.fit함수를 이용해 학습시킨후 예측을 진행해보았습니다.
# Assigning features and label variables
weather=['Sunny','Sunny','Overcast','Rainy','Rainy','Rainy','Overcast','Sunny','Sunny', 'Rainy','Sunny','Overcast','Overcast','Rainy']
temp=['Hot','Hot','Hot','Mild','Cool','Cool','Cool','Mild','Cool','Mild','Mild','Mild','Hot','Mild'] play=['No','No','Yes','Yes','Yes','No','Yes','No','Yes','Yes','Yes','Yes','Yes','No']
# Import LabelEncoder
from sklearn import preprocessing
#creating labelEncoder
le = preprocessing.LabelEncoder()
# Converting string labels into numbers.
weather_encoded=le.fit_transform(weather) print(weather_encoded)
>>> [2 2 0 1 1 1 0 2 2 1 2 0 0 1]
# Converting string labels into numbers
temp_encoded=le.fit_transform(temp)
label=le.fit_transform(play)
print("Temp:",temp_encoded)
print("Play:",label)
>>> Temp: [1 1 1 2 0 0 0 2 0 2 2 2 1 2]
>>> Play: [0 0 1 1 1 0 1 0 1 1 1 1 1 0]
#Combinig weather and temp into single listof tuples
features = zip(weather_encoded,temp_encoded)
features = list(features)
print(features)
>>> [(2, 1), (2, 1), (0, 1), (1, 2), (1, 0), (1, 0), (0, 0), (2, 2), (2, 0), (1, 2), (2, 2), (0, 2), (0, 1), (1, 2)]
#Import Gaussian Naive Bayes model
from sklearn.naive_bayes import GaussianNB
#Create a Gaussian Classifier
model = GaussianNB()
# Train the model using the training sets
model.fit(features,label)
#Predict Output
predicted= model.predict([[0,2]])
# 0:Overcast, 2:Mild
print("Predicted Value:", predicted)
# 1: Yes
>>> Predicted Value: [1]
라플라스 스무딩(Laplace smoothing)이란?
laplace smoothing 혹은 additive smoothing. 나이브 베이즈를 작동시켰을 때 훈련 데이터에 없던 값이 들어오거나 이상값이 들어올 경우 그에 대한 P(X│Y)가 0이 되어, 정상적인 분류가 되지 않는 zero probability(zero frequence)의 한계를 극복하기 위해 사용되는 방법.
α: 스무딩 가중치, K: features의 차원.
α의 값이 0이 아니라면, P(X│Y)는 0이 더 이상 0이 되지 않는다.
ex) 아래의 training data set을 기반으로 한 날씨에 따른 테니스 경기 여부의 나이브 베이즈 분류 상에 기존에 학습되지 않은 데이터, foggy가 등장할 경우
특징벡터
∴ 최종 클래스 Y는 No.
Q. <Outlook=foggy, Temperature=cool, Humidity=high, Wind=strong>에 대한 Y의 계산
Conditional laplace smoothing:
k=1일 때,
laplace smoothing을 통해, zero probability problem을 막을 수 있다.
출처:
http://matrix.skku.ac.kr/math4ai/part3/
https://bkshin.tistory.com/entry/dd
https://sanghyu.tistory.com/11
comment: 사전 확률과 사후 확률을 조건부 확률을 통해서 연결시켜주는 베이즈 정리에 대해서 학습하였으며, 이를 기반으로 하는 나이브 베이즈 알고리즘에 대해서도 학습하였습니다. 나이브 베이즈 알고리즘은 모델을 학습시키는 경우에 사용되는 알고리즘으로, 모든 특성들이 독립이라는 가정이 필요하며 효율성이 좋다는 장점이나 수치가 많은 데이터에 사용하기에는 이상적이지 않다는 점 등을 학습할 수 있었습니다.
33. 표본 분산을 n이 아닌 n-1로 나누는 이유와 베이즈 정리의 적용에 대한 정리
[Final OK by SGLee] [Final OK by TA] [5주차] Re-finalized by 정승민, 임혜림, 이지용, 권서영, 박정현, 동나, 이시원, 김수호, 이상구 교수님 표본 분산을 n이 아닌 n-1로 나누는 이유
작성자:임동선(2017####79)작성일:8월 10일 오후 3:15
조회수:13
[5주차] 18,

19강 정리 및 질문 < 답: 표본분산은 n을 나누는 모분산과 다르게 n-1을 나누는 이유에 대하여 http://matrix.skku.ac.kr/2020-math4ai-final-pbl/ 에 그 설명이 있습니다.
작성자:임혜림(2021####86)작성일:8월 2일 오후 5:01
조회수:63
강의 요약:
218F0DCB-FA46-447F-9360-873B20F6AD03.png
99E0ED5E-D861-4A81-9E07-3FE596AA3FDA.png
질문:
1.표본분산에서 왜 n이 아니라 n-1로 나누는지 모르겠습니다
질문 : 표본분산을 n-1로 나누는 이유
답: 표본분산을 n이 아닌 n-1로 나누는 이유는 n-1로 나누었을 때의 기대값이 모분산과 더 가깝기 때문입니다.
1. 표본분산은 n을 나누는 모분산과 다르게 n-1을 나누는 이유에 대하여http://matrix.skku.ac.kr/2020-math4ai-final-pbl/에 그 설명이 있으니 참고하세요^^
그리고 ... https://blog.naver.com/ptm0228/221984817258에 증명이 있습니다.
먼저 추정부터 생각해보자. 통계에서 추정(Estimation)이란, 표본으로부터 모집단의 모수(평균이나 분포 등)을 추론하는 것을 의미한다. 이것은 굉장히 강력한 의미를 갖는다. 모집단을 전부 조사하지 않아도, 일부만 가지고 모집단의 대표적인 특성을 분석 할 수 있기 때문이다. 그다음 추정량(Estimator)이란, 추정을 함수화한것을 의미한다.(물론 정확한 의미는 아니지만, 최대한 이해가 잘될수 있도록 설명 중!)
예를들어 당신은 어떤 기준을 가지고 모집단에 대한 추정을 시작할 것이다.
하지만 추출된 표본은 항상 결과가 다르다! 왜냐하면 random sample이니까, 어떤게 나올지 모르기 때문,
따라서 매번 추정은 달라질 수 있다. 그래서 매번 달라지는 표본에 대해서 추정을 가능하도록 함수화 한것이 바로 추정량(Estimator)이 된다.
뽀너스, 추정치(Estimate)란, 추정량에 실제 표본의 값을 넣어서, 계산한 추정값을 의미한다.
따라서 추정량과 추정치는 다른 개념, 추정치를 얻기 위해 추정량이 필요하다!
계속해서 매번 다른 표본에 대한 추정치가 다르다고 했었다. 따라서 우리는 이것에대한 대책도 마련해야된다. 무엇을 추정량의 대표로 삼을 것인가?
그 해결책은 매우 쉽게 풀린다. 추정량들의 대푯값을 설정하는 것이니까 평균으로 해버리자 라는 것이다! 따라서
이제 왜 n-1로 나누는지가 어느정도 의문이 풀렸으면 좋겠다.
[출처]통계학 개론 - 표본분산을 n-1로 나누는 이유|작성자손땀
2. 베이즈 정리가 인공지능에서 어떻게 활용되나요?
답:이상구(LEE SANGGU)8월 2일 오후 6:07
2. [Discussion] 베이즈 정리, 조건부 확률과 몬티 홀 문제https://m.blog.naver.com/slayerseo/221995935407에 답이 있습니다.대부분의 기계학습과 패턴인식 교재는 첫장에서 베이즈 정리(Bayes’ Theorem)와 베이즈 분류를 다룬다. 그 이유로는첫째, 베이즈 정리(Bayes’ Theorem) 를 이용한 베이즈 분류(Bayes Classification)는 다른 기계학습 방법론들에 비해 상대적으로 알고리즘이 간단함에도 불구하고 현실세계의 많은 문제를 효과적으로 풀 수 있다는 장점이 있다....18세기에 등장한 베이즈정리(조건부확률)은. 최근에 다시 부상하고 있다. . 머신러닝과 딥러닝 으로 대표되는. 인공지능에 기반한 빅데이터산업이. ...한번 보시고 요약하세요^^
이전
다음
9개의 댓글
이상구(LEE SANGGU)8월 2일 오후 6:02
1. 표본분산은 n을 나누는 모분산과 다르게 n-1을 나누는 이유가 뭔가요?http://matrix.skku.ac.kr/2020-math4ai-final-pbl/ 에 그 설명이 있으니 참고하세요^^작성자 : 이상현(2020****98)작성일 : 8월 13일 오후 8:21 조회수 : 40표본분산은 n을 나누는 모분산과 다르게 n-1을 나누는 이유가 뭔가요?확률밀도함수의 모든 구간에서의 정적분의 값이 1이 아닌 경우도 있나요? 8월 13일 오후 8:471. 표본분산을 n이 아닌 n-1로 나누는 이유는 n-1로 나누었을 때의 기대값이 모분산과 더 가깝기 때문입니다. https://blog.naver.com/ptm0228/221984817258 위의 글에 증명이 있습니다. 2. 확률밀도함수는 확률변수의 분포를 나타내는 함수로, 세 가지 조건을 만족해야 합니다. 그중 하나가 모든 구간의 정적분 값이 1이라는 것이기 때문에 아닌 경우는 없다고 생각합니다. http://matrix.skku.ac.kr/math4ai/part3/8월 13일 오후 9:14 천가영 씨, 훌륭합니다^^ 표본분산을 n이 아닌 n-1로 나누는 이유는 n-1로 나누었을 때의 기대값이 모분산과 더 가깝기 때문입니다. 가 답 입니다.8월 14일 오전 1:54 천가영 학우분의 댓글에 증명을 보니 되게 어렵네요. 저도 뜬금없이 n이 아닌 n-1로 나누는 이유가 궁금했어도 찾아보지를 않았네요. 좋은 정보 감사합니다.8월 14일 오전 2:08 저도 궁금했던 부분인데 증명 글 올려주셔서 감사합니다. 그 증명을 완전히 이해하기에는 제가 아직 공부가 부족한 것 같네요. 더 학습을 하고나서 다시 읽어봐야겠습니다. 감사합니다.8월 14일 오전 10:45 예전에 그냥 표본분산을 n-1로 나누는 이유는 불편추정치를 만들기 위함 정도로 간단하게 넘어갔었는데, 그걸 증명하는 방식이 있었네요.8월 14일 오후 8:37 저도 이에 대해 유사한 의문을 가지고 있었는데, 답변해주시고, 또 질의 해주셔서 감사드립니다. 덕분에 표본 분산에 대한 이해와 확률 밀도 함수에 대한 이해를 심화 시킬 수 있었습니다.8월 14일 오후 10:18 자유도의 개념으로 봐도 됩니다. 예를 들어 x+y+z=3이라고 할때 x와 y의 값을 알면 z의 값의 정해지는 것이니까 종속변수가 되는 것이죠. 그러므로 독립변수는 n-1이 됩니다.8월 15일 오후 9:20 와 생각도 못해봤던 개념이네요. 감사합니다.comment :표본분산을 n-1 로 나누는 이유는 그래야 기댓갑이 모분산과 더 가깝기 때문이라는 것특히 이에 대한 증명 내용을 천가영 학우분이 올려주신 블로그에서 자세히 볼 수 있었고 정확하게 이해할 수 있었습니다.이상구(LEE SANGGU)8월 27일 오전 9:20아주 이상적으로 5주차 동료들의 학습 내용을 모으고 학습한 후, 본인이 학습한 내용을 추가한 후 ... Final comment 를 추가한 이상적인 모델 입니다. 5장 내용 에서 평가한다면 A 입니다. 모든 chpater 를 이렇게 정리하고 보고서 서 제출하고 발표 한다면 ... 우리 강좌 학기 성적은 당연히 A 입니다.손원식(2019****98)8월 27일 오전 9:58 제 글이 도움이 되셨다니 진심으로 감사합니다!! 그리고 제가 작성한 글 comment에 오타가 있었네요 ㅠㅠ 수정하도록 하겠습니다.정원철(2017****79)8월 27일 오후 3:56 잘 정리된 글과 함께 다른 분들의 반응까지 한번에 볼 수 있어서 굉장히 만족스럽습니다. 감사합니다 !관련 과정을 순서대로 설명해주시며 나타내주신 점 정말 감사하게 생각합니다.[5주차] 이항분포 실습 작성자 : 한수현(2019****61) 작성일 : 8월 23일 오후 4:13 조회수 : 17...
이상구(LEE SANGGU)8월 2일 오후 6:07
2. [Discussion] 베이즈 정리, 조건부 확률과 몬티 홀 문제https://m.blog.naver.com/slayerseo/221995935407 에 답이 있습니다.대부분의 기계학습과 패턴인식 교재는 첫장에서 베이즈 정리(Bayes’ Theorem)와 베이즈 분류를 다룬다. 그 이유로는첫째, 베이즈 정리(Bayes’ Theorem) 를 이용한 베이즈 분류(Bayes Classification)는 다른 기계학습 방법론들에 비해 상대적으로 알고리즘이 간단함에도 불구하고 현실세계의 많은 문제를 효과적으로 풀 수 있다는 장점이 있다....18세기에 등장한 베이즈정리(조건부확률)은. 최근에 다시 부상하고 있다. . 머신러닝과 딥러닝 으로 대표되는. 인공지능에 기반한 빅데이터산업이. ...한번 보시고 요약하세요^^그리고 아래 내용도 도움이 될 것입니다.http://matrix.skku.ac.kr/2020-math4ai-final-pbl/ 의 토론 참고^^Q : [Discussion] 베이즈 정리, 조건부 확률과 몬티 홀 문제답: A : 몬티홀 문제란 세 개의 문들 중에 하나를 선택하여 문 뒤에 있는 선물을 가질 수 있는 게임쇼에 참가했다. 한 문 뒤에는 자동차가 있고, 나머지 두 문 뒤에는 염소가 있다. 이때 어떤 사람이 예를 들어 1번문을 선택했을 때, 게임쇼 진행자는 3번문을 열어 문 뒤에 염소가 있음을 보여주면서 1번 대신 2번을 선택하겠냐고 물었다. 참가자가 자동차를 가지려할 때 원래 선택했던 번호를 바꾸는 것이 유리할까? 라는 내용이다. 1. 경우의 수를 하나하나 따져보면, 처음의 선택을 바꾸는 것이 유리하다.2. 조건부 확률이나 베이즈 정리를 적용했을 때도 선택을 바꾸는 것이 유리하다.2. 문의 개수를 훨씬(100만개까지) 늘려보면, 직관적으로 생각했을 때도 처음의 선택을 바꾸는 것이 유리함을 알 수 있다.3. ‘선택하지 않은 문들 중 염소가 있는 문 하나를 공개해주겠다. 처음 선택을 바꿀 것인가?’ 대신 ‘선택을 바꾼다면 처음에 선택하지 않은 두 문 뒤에 있는 모든 물건들을 주겠다. 처음 선택을 바꿀 것인가?’라고 생각한다면,즉 선택지를 조금 다르게 해석하면 확률 계산도 할 필요 없이 문을 두개 고른다는 생각에 쉽게 선택을 바꿀 수 있다.느낀 점 : 몬티 홀 문제는 정말 유명하다. 그에 대한 해설도 당연히 잘 알려져 있다. 하지만 조건부확률과 베이즈 정리에 대해 처음 수업에서 배웠을 때 나는 이 문제를 떠올리지 못했다. 질문자님의 새로 배운 내용과 알고 있는 지식을 연결하는 능력이 뛰어나다고 느꼈다.박정호(2014****10)8월 12일 오후 6:50상세한 설명 감사합니다
이지용(2021####83)8월 2일 오후 6:33
1번의 답이 왜그런지 전개해보았더니분산=1/(n-1)*∑k=1n(x(k)-a)^2=σ^2 ,(σ는 표주편차,a은 평균)라고 하면 분산을 전개해보면1/(n-1)*∑(x-a)^2=1/(n-1)*∑(x^2-2xa+a^2)=1/(n-1)*∑x^2 –2a/(n-1)*∑x +n/(n-1)*a^22=1/(n-1)*∑(a+b(k))^2 –2na^2/(n-1)+n/(n-1)*a^2=1/(n-1)*∑(a^2 +ab(k) +b(k)^2) -n/(n-1)xa^2 #(∑b(k)=0,1/(n-1)*∑b(k)^2=σ^2 )=n/(n-1)xa^2 + 0 +σ2 –n/(n-1)xa^2=σ^2 이기 때문이 라고 합니다.
권서영(2020####27)8월 2일 오후 9:58
1번에 덧붙여서, 만약 the sample variance를 n을 분모로 놓고 계산했다면, 계산된 통계값은 biased estimator of the population이 될 것이고 특히 parameter보다 더 작은 값을 추정치로 내 놓을 것이기 때문입니다. 위 코멘트들이 깔끔하게 정리해 둔 것 같습니다!
박정현(2018####21)8월 2일 오후 10:04
첨언하자면, 모집단과 달리 한 표본에서는 표본평균 x bar가 정해져있기 때문에 n개의 표본 중 자유변수( 자유롭게 값을 가질 수 있는 경우)는 n-1개입니다. 합이 정해져 있기 때문입니다. 이를 자유도라고 하는데 이 때문에 모분산에 대한 추정량으로 편차제곱합/n 대신 편차제곱합/n-1 을 많이 씁니다.앞서 말씀해주신 것처럼 편차제곱합/n-1은 모집단의 분포와 상관없이 모분산에 대한 불편추정량(unbiased estimator)입니다. 추정량의 불편성(unbiasedness) 는 E(theta hat)=theta 임을 말합니다, 즉, 추정량의 기댓값이 곧 추정하고자 하는 모수임을 말합니다. 랜덤표본을 뽑아 각 표본의 표본표준편차를 계산하는 상황을 가정해 보시면, 각 표본표준편차의 평균을 계산했을 때 이것이 모분산과 근접하다고 생각하시면 되겠습니다. 이는 앞서 이지용 학우님이 계산해주신 수식을 풀어 보시면 됩니다.하지만 불편추정량이라고 해서 항상 좋은 것은 아닙니다. 모수에 대한 특정 추정량을 평가할 경우에 E[(theta-theta hat)^] 즉 편차제곱합의 평균을 평가 기준으로 삼는데,이는 편향의 제곱과 추정량의 분산의 합입니다. 따라서 불편추정량이더라도 분산이 큰 경우에, 추정량으로서의 성능이 좋지 않을 수 있으므로 이것의 분산을 함께 고려해야 합니다. 이 때문에 추정량의 편향을 조금 허용하는 대신 분산을 현저히 줄인 추정량들도 많이 쓰입니다. Ridge, lasso estimator 등등이 그 예입니다.한편, 편차제곱합/n 자체를 sigma^2의 추정량으로 직접 사용할 수도 있는데, 이 경우 모분산의 식을 그대로 표본의 식으로 대체한 것으로 MoM(method of moment estimator;적률방법추정량)이라고 부릅니다.추가적으로 Sigma^2 hat = 편차제곱합/n-1을 이용하여 모집단의 분포가 정규분포인 상황에서 (n-1)s^2/sigma^2~Chisq(n-1)임을 이용, variable transformation을 이용하여 T-test를 할 수도 있습니다.
권서영(2020####27)8월 2일 오후 10:14
2번 질문에 대해 이상구 교수님께서 남겨두신 링크의 글을 읽고 요약을 해봤습니다.우리 세계는 매순간 선택의 기로에 서 있다. 특히 정보가 홍수처럼 쏟아질 때 사람들은 새로운 정보를 습득해 불확실성을 낮추기 위해 노력한다. 베이즈 정리는 새로운 정보가 추가됐을 때 그 정보를 반영해 확률을 수정해 나간다. 사전확률과 사후확률이라는 개념이 있다. 어떤 실험결과에서 나온 정보를 얻기 전 확률을 사전, 그 반대를 사후라고 한다. 베이즈 이론은 과거 데이터를 기반으로 미래를 예측하기에 데이터가 많을수록 확률도 정확해진다. 특히 빅데이터 시대에서 베이즈 정리가 더욱 주목을 받는 원인이기도 하다.베이즈 정리는 주관이 분포와 확률에 영향을 미친다고 생각한다. 그래서 복잡한 상호작용들이 반복되는 현실세계를 설명하는 사전분포라고 칭해지기도 한다.사전분포를 바탕으로 새로 취득한 정보를 더해가는 베이즈통계의 분석방식은 인공지능의 핵심인 자가학습과 연관성이 깊다.실제로 각 개인은 무의식 속에서 조건부확률에 의한 의사결정을 실제로 하고 있으며 개개인의 조건부 확률계산에 타인의 그 것이 결합되면서 심리학에서 말하는 편향이 나타난다고 미루어 볼 수 있다. 그래서 기계학습에 의해 숙련된 인공지능이 각광받는다.
동나(2017####99)8월 3일 오전 3:34
Bayes Algorithm& Natural Language Processing(Application of AI)Natural Language Processing is one of the applications of AI, which can be solved by using Naive Bayes Algorithm. The reason is that Speech recognition is something like according to received signal sequence to conjecture the signal sequence actually emitted by the speaker. Moreover, the signal sequence contained the sentences that the speaker spoke and the meanings what he or her would to express. Therefore, the problems of speech recognition can be transformed into the problems of communication recognition which can to be further simplified mathematics problem. Moreover, this mathematics problems can be solved by using Bayes Algorithm.
이상구(LEE SANGGU)8월 3일 오전 3:44
Dear Ms. Dong Na, You may study our course with the following English contents of mine http://matrix.skku.ac.kr/intro-math4ai/ and http://matrix.skku.ac.kr/2020-AI-translation/I think thta will help you and other international students. From your Prof. ^^
동나(2017####99)8월 3일 오전 3:54
Okay~~~ I got it! Thanks for your help!Sincerely,Dong Na
[5주차] 임혜림 양의 게시물에 관한 질문
작성자:정승민(2021####76)작성일:8월 3일 오후 1:09
조회수:15
임혜림 양이 올려주신 1번 답에 관련된 증명 중 이해 안되는 과정이 있어서 질문을 올립니다.
이 식이 왜 성립하는 지 잘 모르겠어요.
이전
다음
3개의 댓글
이시원(2021####15)8월 3일 오후 1:22
https://math100.tistory.com/12 이곳을 참고하시면 이해하시는데 도움이 될 것 같습니다.
김수호(2019####59)8월 3일 오후 9:51
시원 학우님께서 올려주신 링크는, 우변의 괄호 안이 Xi - X바 가 아닌 Xi-mu일때 성립하는 증명식입니다.임혜림학우님의 오타인것같습니다.
정승민(2021####76)8월 3일 오후 10:05
아, 역시 뭔가 이상하다 했는데 그랬었군요. 감사합니다
4개의 댓글 박정현(2018####21)8월 3일 오후 10:41
자유도(degree of freedom)은 통계적 모델의 주어진 제약조건 내에서 자유롭게 가질 수 있는 값을 의미합니다. 이는 보통 랜덤표본으로부터 모집단의 모수에 대해 추정하는 과정 때문에 일어나는 여러가지 문제 때문에 고려해주게 되는 값이라고 보시면 되겠습니다.예를 들어,랜덤벡터 X1,X2,...,Xn이 평균이 mu이고 분산이 sigma^2인 어떤 분포를 따른다고 할 때, 분산의 식에 평균이 포함되므로 우리는 먼저 평균을 추정해주어야 합니다. 이때 모평균의 추정량으로 가장 많이 사용하는 것이 x bar, 표본평균입니다.그런데 분산을 계산하려고 할때, 우리는 여전히 모평균을 알지 못하므로 모평균을 추정해준 표본평균을 대체하여 사용하게 됩니다. 이때 모분산의 식대로 n으로 나눠주게 되면 x bar가 추정된 값이기 때문에 실제 모집단에서 모분산을 계산하는 상황보다 정보를 덜 쓰게 되는 상황이 발생합니다. 따라서 데이터의 분산을 과소추정할 가능성이 있기 때문에 추정해준 모수의 개수만큼(1개) n에서 빼주어 편차제곱합을 나누는 보정을 해주게 됩니다.(더 작은 값으로 나누므로 추정된 분산이 커집니다)이러한 컨셉은 통계학의 확률분포 전반에서 많이 쓰입니다. 예컨대 챕터 1의 최소제곱해 꼴을 이용하여 회귀분석의 베타계수에 대한 최소제곱추정량을 구할 수 있습니다-> Y=beta0+beta1x1 일때 가장 적절한 beta0와 beta1은 (X'X)^-1X'Y 꼴입니다.이때 추정해준 베타계수가 2개이기 때문에(절편항+x변수 1개) 잔차의 분산을 추정하는 과정에서는 이를 보정하여 n-2로 나눠주게 됩니다. 이는 p개의 X변수에 대해 일반화되어 적용되어.. X변수가 p개인 절편항이 있는 회귀모형의 경우 분산에 대한 추정량은 잔차제곱합/n-p-1이고 이경우 자유도는 n-p-1입니다.한편, 이러한 자유도의 필요성은 모수가 존재하는 구간에 대한 추정을 하거나, 원하는 가설에 대한 검정을 하기 위함이기도 합니다.이 때문에 잘 알려진 확률분포 중 일부는 모수가 자유도인 경우도 있습니다. 자유도로 나누어 보정해준 추정량을 이용하여 모수에 대한 구간추정을 할 때 해당 자유도를 모수로 갖는 확률분포를 이용하여 모수의 대략적인 위치를 파악할 수 있습니다. 대표적인 예로 카이제곱분포와 T분포,F분포 등이 있습니다.
정승민(2021####76)8월 4일 오전 00:02
정현 학우님의 설명 덕분에 자유도에 대해 어느 정도 이해한 것 같습니다. 근데 아직까지 행렬의 이해가 충분하지 않아서 예제로 들어주신 회귀분석의 베타계수는 이해가 잘되네요ㅜ.정리하면 (1) 정보의 부족으로 인한 추정의 오차를 줄이기 위해 자유도를 이용하는 것이다. (2) 크기가 n인 표본 평균의 자유도는 n-1이다. (3) 카이제곱분포와 T분포, F분포는 자유도를 모수로 갖는다? 이정도 일까요?
박정현(2018####21)8월 4일 오후 1:03
보충해서 설명드리면,1. 맞습니다. 모집단에 대한 정보를 추정하기 위해 표본을 이용하게 되는데 이때 표본에서 추정한 여러가지 모수의 개수에 따라 추정량 분포의 분산을 과소추정하는 문제가 생겨 이를 보정해주기 위해 자유도라는 컨셉을 도입하게 됩니다. 자유도식은 꼭 표본수가 들어가지는 않고, 추정해준 모수의 개수를 고려하여 자유도를 정하게 됩니다. (때에 따라 자유도 식에 n이 들어가지 않는 경우도 있는데...이건 이 과목에선 그다지 중요하지 않으니 컨셉만 이해하시면 될 듯 합니다 ㅎㅎ)2. 정확히 말씀드리면, 크기가 n인 표본에서 모평균을 표본평균으로 추정했을 경우 모분산에 대한 추정량인 표본분산 식의 편차제곱합의 자유도가 n-1입니다.3. 넵 맞습니다 ! 참고로 F분포는 자유도 2개를 모수로 갖는 확률분포입니다.
정승민(2021####76)8월 4일 오후 1:43
감사합니다. 추가해서 Re-finalize할게요!
3개의 댓글 정승민(2021####76)8월 4일 오후 8:58
박정현 학우님이 자유도에 대한 개념을 알려주셔서 추가하여 Re-Finalize했습니다.
이상구(LEE SANGGU)8월 4일 오후 10:13
원래 질문에 대한 답도 이해하셨지요?
정승민(2021####76)8월 5일 오후 11:16
네, 이해했습니다. 단순히 수리적으로 증명된다는 것을 넘어 이것이 가진 의미 또한 이해했습니다!
comment: 표본분산을 n이 아닌 n-1로 나누어주는 이유에는 자유도와 같은 문제들이 존재한다는 것을 알 수 있었습니다.
34. 확률밀도함수의 적분에 대한 질의응답
[Final OK by SGLee] Finalized by 정승민, 이시원, 홍정명, 박정현, 이상구 교수님, 이지용 (확률밀도함수와 적분)
작성자:이시원(2021####15)작성일:8월 10일 오후 5:20
조회수:12
과거 확률 예제 2번에 관한 질문에서 진행하였던 토의를 요약하여 Finalize합니다.
해당 토의를 진행하면서 저는 열린구간에서 f(x)가 정의되어있을때 그 외에 구간에 대해서 값을 어떻게 다루는지 알 수 있었으며, 닫힌 구간에서만이 아닌 열린 구간에서도 적분이 가능하다는 것을 알 수 있었습니다.
정승민 학우님이 질문해주신 게시글에서 작성된 내용을 토대로Finalize해보았습니다.
Q1) 앞서 배운 미적분에서 적분을 할 때는 닫힌 구간에서 적분할 수 있다고 배웠습니다. 근데 여기는 열린구간인데도 적분을 하는데 오류인가요?
Q2) 확률밀도 함수에서함숫값에 어떤 의미가 있나요? 예를 들어 여기서는 f(1)=3인데 이 값이 가지는 통계적인 의미가 있나요?
이시원(2021####15)8월 4일 오후 2:25
A1.만약 f(x)가 해당 부분에서 정의되어 있는것이라면 확률밀도함수에서는 특정 지점에서의 확률값은 0이므로 P(a<x<b)=P(a<=x<b)=P(a<x<=b)=P(a<=x<=b)이므로 P(0<x<1)=P(0<=x<=1)로 계산이 가능한것으로 알고 있습니다.다만 f(x)가 0과1에서 정의되지 않은경우라면 가능한지의 여부에 대해서는 잘 모르겠습니다...
홍정명(2021####17)8월 4일 오후 2:40
2) 확률밀도함수에서 구간을 잡았을 때 그 적분값이 해당 확률인 것을 생각해보면, 특정 지점에서의 함숫값만으로 갖는 의미보다는 그 근방의 구간을 잡는 것 (즉 해당 사건의 범위를 정의하는 것) 과 함께 확률을 정의한다는 의미를 갖는 면이 더 중요한 것 같습니다.
박정현(2018####21)8월 4일 오후 2:54
1. f(x)가 연속확률변수 X에 대한 확률밀도함수인 경우 한 점에서의 확률은 0이므로 이시원 학우님이 말씀해주신 것처럼P(a<x<b)=P(a<=x<b)=P(a<x<=b)=P(a<=x<=b)이므로 P(0<x<1)=P(0<=x<=1)이 성립합니다. 즉, 적분이 0과 1을 포함하는 폐구간에서 정의되더라도 한 점에서의 확률이 0이므로 열린구간에서 정의된 함수에 대해서도 확률분포가 성립 가능합니다. 한편,예제처럼 f(x)가 열린구간에서 정의되어 있는 경우 다른 구간에서는 f(x) = 0 임을 내포합니다.2. 확률밀도함수의 한 점이 갖는 y값은 가능도 혹은 우도(likelihood) 라고 하는데, 직관적으로 생각해 보시면 해당 확률분포에서 랜덤추출을 한다고 했을 때 그 x 값이 뽑힐 가능성을 의미합니다. 이를 이용한 통계적 추정 방법으로 가능도를 최대화하는 지점의 통계량을 모수에 대한 추정량으로 삼는 MLE(최대우도추정방법)이 있는데,.. 이 수업에서는 크게 중요한 부분은 아닌 듯 하네요...
이상구(LEE SANGGU)8월 4일 오후 3:32
먼저 열린구간에서도 적분은 정의됩니다.1. 여러분이 이전에 배운 보통의 정적분인 리만적분 (구분구적법)은 닫힌 구간에서 연속함수를 적분합니다.2. 그러나 이상적분은 열린 구간에 대하여 적분할 수도 있고 불연속인 함수에 대하여 적분할 수도 있습니다.Key: 확률밀도함수에 대하여 배우는 여기서는 주어진 영역의 면적을 구하는 것인데 ... 그 방법으로 적분을 선택한 것이고, 면적은 밑변과 높이를 곱해서 얻을 수 있는데 구간의 끝점에서는 밑변이 영이므로 면적이 영이므로 ... 열린구간에서 면적을 구하나, 닫힌구간에서 면적을 구하나 일치합니다. 따라서 주어진 열린구간에서도 적분을 하여 면적(확률)을 구했다고 이해 하시면 됩니다.
이지용(2021####83)8월 4일 오후 5:30
1. 열린구간에서도 닫힌구간에서처럼 적분하면 될겁니다. ∫f(x)dx은 (1/n)*∑(n->∞)f(a+b/n) 이어서 f(0)/∞과 f(1)/∞이 적분값에 더해져도 적분값은 동일하기 때문입니다.2. 확률밀도함수에서 적분한 함수값 ∫(0->1)f(x)dx=[x^3](0->1)=1-0=1 은 중요하게 작용합니다. 전체 사건이 일어날 확률이 1이라는 것을 의미하기 때문입니다. 또한 범위 (0,1)에서 어떤 범위(0<a<b<1) 내 ∫(a->b)f(x)값은 해당 사건이 일어날 확률입니다. 그래서 저는 f(x)값이 의미가 있다고 생각합니다.
토의를 요약하자면 f(x)가 열린구간에서 정의되어 있다면 다른 구간에서의 f(x) = 0임을 내포하고 있는 것이며, 확률밀도함수의 특정 지점에서의 확률은 0이므로 P(a<x<b)=P(a<=x<b)=P(a<x<=b)=P(a<=x<=b)을 통해 계산해낼 수 있습니다. 또한 f(x)값은 가능도와 같이 해당 확률분포에서 랜덤추출을 진행할 시 해당 x값이 뽑힐 가능성을 나타내기도 하므로 의미가 존재합니다. 또한, 열린구간에 대해서도 이상적분을 통해 적분을 진행할 수 있습니다.
comment: 열린구간에서 f(x)가 정의되어있을때 그 외에 구간에 대해서 값을 어떻게 다루는지 알 수 있었으며, 닫힌 구간에서만이 아닌 열린 구간에서도 적분이 가능하다는 것을 알 수 있었습니다. 이를 통하여 앞으로 적분을 하는 과정에서 보다 다양한 요소들을 고려하고, 넓은 범위에 대해서 적분을 시도할 수 있는 기초를 마련할 수 있었습니다.
35. 조건부확률과 곱사건의 차이점에 대한 질의응답
[Final OK by SGLee] Finalized by 위승연, 이시원, 이상구, 김나현, 문가은, 손재민, 안은선, 정수인 [5주차] 조건부 확률 질문 by 위승연
작성자:정수인(2019####70)작성일:8월 13일 오후 10:16
조회수:10
[5주차] 조건부 확률 질문
작성자:위승연(2017####33)작성일:8월 13일 오후 8:32
조회수:19
간단한 질문인데 직관적인 이해가 필요해서 질문 올립니다.
곱사건은 A와 B가 동시에 발생하는 확률이고, 조건부 확률은 A가 발생했다는 전제 하에 B가 발생하는 확률이라고 한다면 결국 두 경우 모두 A와 B가 둘 다 발생했다는 것인데 어떤 점에서 차이가 생기는 건가요?
계산을 할 때 곱사건은 명확하게 눈으로 보이는데 조건부 확률은 뭔가 예시를 들어도 이해가 부족한 느낌입니다.
7개의 댓글 이시원(2021####15)8월 13일 오후 8:45
확률을 구할 때의 표본공간이 달라집니다. 곱사건의 경우에는 표본공간이 그대로 유지된다면 조건부 확률의 경우에는 A로 표본공간이 축소 됩니다.
이상구(LEE SANGGU)8월 13일 오후 8:50
일반적인 확률의 곱셈두 사건 A와 사건 B가 동시에 일어날 확률P(A and B)=P(A | B)×P(B)=P(B | A)×P(A)이지만,일반적으로는P(A | B) 와 P(B | A) 가 같지 않다는 것에서 둘의 차이가 시작됩니다즉 차원이 높아지면 상황이 달라진다는 것을 알게된 것이 논의의 시작 입니다.https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=mykepzzang&logNo=220834864348 을 보고 다시 질문 하세요
김나현(2017####30)8월 13일 오후 8:58
예를들어, 기저귀를 산 행동과 맥주를 산 행동이 독립적이라고 가정할때 동시에 일어날 확률은 각 행동의 확률을 곱한 것이지만 기저귀를 산 사람이 맥주를 살 확률은 곱사건이 아닌 조건부로 간주해야 합니다.
문가은(2020####34)8월 13일 오후 9:21
단순히 두 사건이 일어난 것과 조건부 확률의 확률이 같다고 보기는 어렵습니다. 즉, A사건이 일어날 때 B사건이일어나는 경우와 B사건이 일어날 때 A사건이 일어날 확률은 다릅니다.실생활의 사례를 들면 병이 걸렸을 때 검사 결과가 양성이 나올 확률과, 검사결과가 양성이 나왔을 때 병에 걸린 것이 맞을 확률은 다르다고 할 수 있습니다.
손재민(2019####38)8월 13일 오후 9:23
사건 A와 B가 동시에 발생할 확률은 P(A and B)이고, 사건 A가 발생한 상황에서, B가 발생한 상황은 P(A and B)/P(B)일 것입니다. (이미 B가 발생한 상황을 전제하므로)
안은선(2020####19)8월 13일 오후 9:44
두 가지 다 A와 B가 발생했다는 점은 같지만 곱사건은 사건 A와 B가 동시에 발생할 확률입니다. 반면, 조건부 확률은 첫 번째 사상 A가 이미 일어났다는 전제 하에 두 번째 사상 B가 발생할 확률이라는 점에서 곱사건과 차이가 나는 것입니다. 이로 인해 조건부 확률은 표본공간이 사상 A로 한정됩니다.
정수인(2019####70)8월 13일 오후 10:15
P(A|B)와 P(B|A)가 다른 이유는 어떤 영역에서 곱사건이 발생하는 상황을 구하는 것은 동일하지만, 그 '어떤 영역'이 다르기 때문에 발생합니다. (앞서 다른 학우님들이 말씀하신 전제가 다르다는 말과 같은 말입니다).둘의 차이에서 차원에 따른 변화가 일어난다는 것에 대한 직관적인 비교 예시를 더 달아두겠습니다.위 교수님께서 달아두신 링크 속 예시인데 이해가 잘 됩니다.- 카드덱에서 임의로 두장을 뽑을 때, 하트인 카드를 뽑을 사건 A, 빨간색 카드를 뽑을 사건 B라고 했을 때-> p(A) = 13/52 = 1/4, P(B) = 26/52 = 1/2-> P(A and B) = 13/52 * 25/51 = 25/204(여기서 25/51인 이유는 이미 첫 시도에 하트를 뽑은 상태이기 때문에 52장 -> 51장으로 줄고, 하트 역시 빨간 카드를 뽑는 것이기 때문에 26장->25장으로 줄은 것입니다)여기서 P(A|B) = P(B)에서의 곱사건, P(B|A) = P(A)에서의 곱사건으로 값이 달라집니다.
Comment: 곱사건과 조건부확률의 차이점에 대해서 표본공간이 다르기 때문에, 둘의 차이가 존재한다고 이해하고 있었으나, 다른 학우분들께서 실제로 예시를 들어주시면서 설명해주시 내용을 통해서 보다 직관적인 이해도도 높일 수 있었습니다.
36. 5주차 요약 및 정리
[Final OK by SGLee] Re-finalized by 김민서, 이시원, 양소혜 5주차 개념 정리
작성자:양소혜(2021####30)작성일:8월 12일 오전 11:09
조회수:13
5주차 정리에서 빠진 부분을 보충하고, 포아송 분포에 내용을 추가하였습니다.
표본평균:
개의 표본자료를
,
,
,
이라 할 때
으로 계산된다.
중위수:
n개의 표본자료를 크기순으로 나열한 것을
,
,
,
이라 할 때,
(i) 관측값의 개수(
)가 홀수면, 중위수는
번째 관측값이다.
(ii) 관측값의 개수(
)가 짝수면, 중위수는
번째 관측값과
번째 관측값의 평균이다.
값들을 중위수라고 한다.
표본분산:
개의 표본자료를
,
,
,
이라 하고, 이들의 표본평균을
라고 하면
로 계산된다.
표본표준편차:
순열 : 서로 다른 물건들 중 몇 개를 골라 순서를 주어 나열한 경우의 수
조합: 서로 다른 물건들 중 몇 개를 골라 순서 없이 나열한 경우의 수
이항정리:





, 
일반화 하면,
위의
은 x,y에 각각 1을 대입한 것
이항계수:
Pascal의 공식:
를 만족하는 정수
과
는 다음 식을 만족한다.




중복집합의 순열:
(multi-set)
의 permutation (모든
개를 순서대로 늘어놓는) 경우의 수이며,
이항계수의 특징:
1.
(
,
),
2.
(
,
,
)
3.
(
,
.
),
(
,
)
수학적 확률:

기하학적 확률:
인 영역
에 속하는 확률은
통계적 확률과 대수의 법칙(Law of large number)
시행 횟수를
, 특정 사건
가 일어날 횟수를
라 하면,
이 한없이 커질 때 통계적 확률 P(A) 는 일정한 값 a, 즉 (수학적 확률) a 에 가까워진다.
확률의 공리:
다음을 만족하는
를 사건
의확률이라 한다.
① 표본공간
에서 임의의 사건
에 대하여
이 성립한다.
② 표본공간
에 대하여
(표본공간 전체의 확률은 1)이 성립한다.
③ 공사건
에 대하여
이 성립한다.
④
이 서로배반사건(exclusive events, 背反事件)이면 다음이 성립한다.
확률의 기본개념:
어떤 사건
사건
가 일어나지 않을 경우
사건
가 일어날 확률
사건
가 일어나지 않을 확률
조건부 확률
어떤 사건
가 일어났다는 조건하에서 사건
가 일어날 확률을 사건
에 대한 사건
의 조건부 확률(conditional probability)이라 하고
로 표시한다.
(단,
)
조건부 확률의 곱셈정리
조건부 확률의 정의로부터 다음의 곱셈정리(관계식)를 얻을 수 있다.
베이즈 정리
베이즈 정리는 불확실성 하에서 의사결정 문제를 수학적으로 다룰 때 중요하게 이용된다. 특히, 정보와 같이 눈에 보이지 않는 무형자산이 지닌 가치를 계산할 때 유용하게 사용
또한, 임의의
에 대한 조건부확률 
에
와 위의 전확률(total probability) 공식을 대입하면 베이즈 정리(Bayes’ theorem)라고 한다.
베이즈 정리에서
를 사건
의 사전확률,
를 사건
의 사후확률
확률변수:
일정한 확률을 갖고 발생하는 사건(event)에 수치가 부여되는 함수
X가 가질 수 있는 범위를 셀 수 있는지 여부에 따라 이산확률변수와 연속확률변수로 구분된다.
확률분포(probability distribution):
변수
가 취할 수 있는 모든 값
이 취하는 확률이 각각 
로 주어질 때,
를 이산확률변수라 하고
를
의 이산확률함수(probability function) 또는 확률질량함수(probability mass function, pmf)라 함.
확률질량함수의 성질 :
(1)
(2)
(3)
가 이산형 분포를 가지면 실수의 부분집합
의 확률은
이산확률변수
의 기댓값과 분산, 표준편차는 다음과 같이 계산한다.
기댓값 :
분산 :
표준편차 :
확률밀도함수(PDF):
연속확률변수란 어떤 범위에 속하는 모든 실수값을 취할 수 있는 확률변수로, 그 분포는 확률밀도함수(probability density function, pdf)를 이용하여 다음과 같이 나타낸다. 즉, 연속확률변수
의 확률밀도함수가
일 때,
가
에 있을 확률은
확률밀도함수는 확률변수의 분포를 나타내는 함수, 다음 조건을 만족함.
(1)
(2)
(3)
연속확률변수
의 기댓값과 분산, 표준편차:
기댓값 :
분산 :
표준편차 : 
기댓값, 분산의 성질:
(1)
,
,
(2)
,
,
(3) 확률변수
에 대하여 새로운 확률변수
를
로 정의하면 평균과 분산이 항상
과
이다. 따라서 이 확률변수
를 확률변수
의 표준화 확률변수라 한다.
베르누이 분포:
1회 시행의 결과가 성공과 실패로만 나오는 실험을 베르누이 실험이라고 하며 성공할 확률이 p인 베르누이 시행에서 아래를 따르는 확률변수 X의 확률분포를 X~B(1,p)라고 하며 베르누이 분포를 따른다고 말한다.
,
이때의 E(x)=p, V(X)=p(1-p)이다.
이항분포:
n번 베르누이 시행의 성공 확률분포이다. n=1일 경우 베르누이 분포와 같다.
한번의 시행에서 사건 A가 일어날 확률이 p, 독립적으로 반복된 시행횟수가 n일 때, 사건 A가 일어나는 횟수를 x라 하면 X의 확률분포는 아래와 같다.
(단,
)
이때의 확률변수 X가 이항분포 B(n,p)를 따른다고 하며, X~B(n,p)로 나타낸다.
E(X)=np, V(X)=np(1-p)=npq로 계산된다.
이때, 이항분포의 형태는 p,q에 의해서 결정되며 p<q이면 왼쪽으로 p>q이면 오른쪽으로 치우쳐진 형태로 그려지며, p=q인 경우 완전 대칭을 이룬다.
포아송분포:
단위 시간 안에 어떤 사건이 일어날 횟수를 확률변수 X라 하고 그 기댓값을
라 할 때, 그 사건이 n회 일어날 확률은
이다. 이때 E(X)=V(X)=
이다.
이항분포
에서 평균
는 일정하고,
을 한없이 크게 할 때(상대적으로
는 한없이 작아짐) 이 확률분포는 포아송 분포가 된다. 즉, 포아송 분포(Poisson distribution)는 이항분포의 극한분포(limiting distribution)이다.
(감마값을 달리 하여 포아송분포를 확률질량함수로 나타낸 것. 출처: 위키백과)
cf) 포아송 분포가 필요한 이유
10초에 0.1%의 확률로 사람 한 명이 넘어진다면, 1시간 동안 수많은 사람등리 지나갈 때 이 중 한 사람이 넘어질 확률은?
1시간은 3600초이므로 1시간 동안 넘어지는 사람 수를 확률변수 X라 할 때
X~B(360,0.001)이다.
분포로 나타내기 위해 360번 중 k번 사건이 일어날 확률을 구하면
이다.
계산하기 결코 쉽지 않다.
이처럼 n이 너무 크고, p가 너무 작은 경우에 확률분포를 근사적으로 계산하기 위해 이항분포의 극한분포인 포아송분포가 필요하다.
(출처:https://angeloyeo.github.io/2021/04/26/Poisson_distribution.html)
http://matrix.skku.ac.kr/math4ai/part3/
comment: 이번 Finalize과정을 통해서 지금까지 들었던 통계 수업을 복습하는 시간을 가질 수 있었습니다. 또한, 개념들을 설명하며 정리하는 과정에서 제대로 이해하고 있었다고 생각하는 개념들에 대해서 제대로 정의내리지 못한 경우가 다수 존재했다는 것을 느꼈고, 그 부분에 대한 개념이해를 추가적으로 진행할 수 있었습니다.
Week 6 관련 내용
37. Sage, R, Python, C 언어 사이의 차이점에 대한 정리
[Final OK by SGLee] Re-finalized by 김보민, 박건영, 박정현, 이상구 교수님, 이시원 (프로그래밍 언어의 차이)
작성자:이시원(2021####15)작성일:8월 11일 오후 6:05
조회수:17
R프로그램 언어 공부 및 질문 라는 글에서 진행되었던 R과 Python의 차이점에 대한 논의를 김보민 학우님께서 Finalize한 내용에 더하여 왜 빅데이터와 관련된 부분에서 C, JAVA보다는 Python을 더 선호한다고 느껴지는지 등의 여부에 대해서 제가 스스로 실습하면서 느꼈던 점들을 추가하여 Re-Finalize 했습니다.
R 프로그램 언어 공부 및 질문
작성자:박건영(2021####42)작성일:8월 5일 오전 00:20
조회수:15
1강을 듣고 주요 개념을 정리하고 더해서 R 프로그램 언어에 대해 추가적으로 공부해보았습니다!
여기서 추가적으로 궁금한 것은 R프로그래밍 언어랑 JAVA 둘 다 통계에서 많이 쓰인다고 하는데 두 가지의 차이점이나 특징이 궁금합니다! 실제로 뭐가 어떤 분야에 사용되는지 알고 싶습니다!
이전
다음
2개의 댓글
박정현(2018####21)8월 5일 오전 00:27
Java는 개발언어라서 개발자분들이 많이 쓰시는 걸로 알고 있고, 실제로 통계적 분석에서 많이 쓰는 것은 R 과 python인데 좀더 통계적 모델링에 최적화되어있는 것은 R,(여러 개발된 패키지가 많아서 베이지안 기반의 모델이나 시뮬레이션 구현 등을 하기가 편합니다.), 알고리즘 기반의 모델에 최적화되어 컴퓨터사이언스+인공지능 분야에서 더 자주 쓰이는 것은 python입니다.
이상구(LEE SANGGU)8월 5일 오전 1:07
십년전에는 자바로 무어라도 만들어 본 적 있으면 무조건 좋은 조건으로 취업했습니다.지금은 전혀 고용없습니다. MS 가 몇년전 자바 호환 포기 했고 ...여러분은 무조건 Sage 같은 파이썬 과 (통계는) R 둘다 해 본 경험을 지금 또는 졸업전에 가져야만 한답니다.
박건영님의 질문에 python 과 R 이 어떤 점에서 데이터 분석에 이점이 있고 왜 자주 사용되는지에 대해 궁금해 둘을 비교한 글을 찾아보았는데 저처럼 궁금해하실 분들을 위해 추가해 공유합니다ㅏ
파이썬과 R 중 데이터 사이언스에 어떤 언어가 더 적합한지에 대한 데이터 과학자들의 논쟁이 계속되고 있다. 최근 파이썬은 세계에서 가장 인기 있는 프로그래밍 언어로 부상하고 있고, R은 여전히 많은 데이터 분석가들이 선호하는 언어이다. 각 언어는 데이터 사이언스 작업에 따라 서로 다른 장단점이 있기 때문에 프로젝트에 맞춰 적절히 선택되어야 한다.
14일 Tech Republic은 데이터 과학자들이 올바른 프로그래밍 언어를 선택하는 방법에 대해 공유했다.
캘리포니아 데이비스 대학의 컴퓨터 사이언스 교수 Norm Matloff는 다음 10개 도메인에 걸쳐 R과 Python을 비교하여 어떤 프로그래밍 언어가 더 나은 선택인지 결정했다.
1. 우아함 (우승자: 파이썬)
우아함에 대한 평가는 매우 주관적이다. 맷로프 교수는 파이썬은 괄호나 교정기 사용을 크게 줄일 수 있기 때문에 파이썬의 명백한 승리이며, 파이썬은 매우 날렵하다고 말했다.
2. 학습 곡선 (우승자: R)
Python을 사용하기 위해선 NumPy, Pandas, matplotlib를 포함한 많은 자료를 배워야 한다. 하지만 R에는 기본적으로 매트릭스 유형과 기본 그래픽이 내장되어 있다.
시스템에 능숙한 경우에도 Python의 라이브러리를 구성하기 까다로울 수 있다. 반면 대부분의 R 패키지는 즉시 실행되며, 초보자도 R을 활용해 몇 분 안에 간단한 데이터 분석을 할 수 있다.
3. 사용 가능한 라이브러리 (무승부)
파이톤 패키지 인덱스(PyPI)는 183,000개 이상의 패키지를 가지고 있으며, CRAN(Compreged Rarchive Network)은 12,000개 이상의 패키지를 가지고 있다. 그러나 데이터 과학에 대한 PyPI는 적다.
예를 들어 맷로프가 주어진 데이터 포인트의 가장 가까운 이웃에 대한 빠른 계산을 하기 위해 코드가 필요할 때, 두 개의 패키지를 즉시 찾을 수 있었다. 반면 파이썬에서는 가장 가까운 이웃의 코드를 찾을 수 없었다. 그는 간단하고 직설적인 구현은 오직 한 개였다고 언급했다.
또한 맷로프는 PyPI에 다음 용어를 검색하면 아무것도 나타나지 않았다고 덧붙였다: 로그 선형 모델, 포아송 회귀 분석, 기악 변수, 공간 데이터, FWE 비율.
4. 머신 러닝 (우승자: Python, 하지만 많이는 아님)
최근 몇 년간 파이썬의 엄청난 성장은 머신러닝과 인공지능의 상승에 일부분 영향을 받았다. Python은 AlexNet과 같이 이미지 인식을 위해 정밀하게 조정된 라이브러리를 많이 제공하지만, R 버전도 쉽게 개발할 수 있다.
맷로프는 파이썬 라이브러리의 힘은 특정한 이미지 평탄화 ops 설정에 의해 생기며, R의 Keras wrapper를 통해 쉽게 구현할 수 있다고 말했다. 순수한 R 버전의 TensorFlow(텐서 플로)가 개발될 수 있으며, R의 랜덤 포레스트와 그래디언트 부스팅의 가용성이 탁월할 수 있다고 주장한다.
5. 통계적 정확성 (우승자: R, 월등히 좋음)
맷로프는 파이썬을 옹호하는 머신러닝 전문가들이 때때로 관련된 통계적 문제에 대해 잘 이해하지 못한다고 지적했다. 반면 R은 통계학자에 의해 작성되었다고 덧붙였다.
6. 병렬 연산 (무승부)
R과 Python의 기본 버전은 멀티 코어 연산에 대한 지원이 약하다. 파이썬의 멀티프로세싱 패키지는 다른 이슈들에 대한 좋은 해결책이 아니며, R의 병렬 패키지도 마찬가지이다.
맷로프는 “클러스터 연산을 지원하는 외부 라이브러리는 두 언어 모두 괜찮다", "현재 Python은 GPU에 대한 더 나은 인터페이스를 가지고 있다."라고 말했다.
7. C/C 인터페이스 (우승자: R, 하지만 많이는 아님)
R의 Rcpp는 R과 C/C 를 연결하는 강력한 도구이다. 파이썬 swig(스위그)와 같은 도구를 가지고 있지만 그것은 그렇게 강력하지 않으며, Pybind11 패키지는 아직 개발 중이다. R의 새로운 ALTREP 아이디어는 성능과 사용성을 향상시킬 수 있는 잠재력을 가지고 있다. 하지만 Cython과 파이썬의 PyPy 변형은 때때로 C/C 인터페이스의 필요성을 없앨 수 있다.
8. 객체 방향, 메타 프로그래밍( 우승자: R, 하지만 많이는 아님)
R과 Python 둘 다에서 기능이 객체임에도 불구하고 R은 이를 더욱 심각하게 받아들이고 있다고 언급했다. 그는 "파이썬을 사용할 때마다 R에서 많이 하는 것처럼 단말기에 기능을 인쇄하지 못한다는 사실에 짜증이 난다"고 말했다.
Python은 단지 하나의 OOP 패러다임을 가지고 있다. 반면 R에서는 몇 가지를 선택할 수 있다. 그는 R의 마법 메타 프로그래밍 기능(코드를 생성하는 코드)을 감안할 때 컴퓨터 과학자들은 R에 대해 주목해야 한다고 주장한다.
9. 언어의 통일성 (우승자: 파이썬, 월등히 좋음)
파이썬이 버전 2.7에서 3.x로 변해도 큰 혼란이 생기지 않을 것이다. 하지만 R은 RStudio의 영향으로 두 개의 다른 언어로 바뀌어가고 있다. (R, Tidyverse)
맷로프는 Tidyverse가 일반적인 R보다 우월하다면 받아들일 수 있지만, 개인적으로 그렇게 생각하지 않는다고 언급했다. 또한 이것이 초보자들에게 어렵게 만든다고 말했다.
10. 링크된 데이터 구조 (우승자: 파이썬)
Binary tree 같은 고전적인 컴퓨터 사이언스 데이터 구조는 파이썬에서 구현하기 쉽다. R에서 리스트 클래스를 사용해 구현할 수 있지만, 맷로프는 이것고 느리다고 추측한다.
2018년 클라우드 아카데미 보고서에 따르면 R에 능통한 데이터 엔지니어에 대한 수요가 파이썬에 능숙한 사람들에 비해 현저히 적다. 데이터 엔지니어 직무 게시물의 66%가 Python을 언급했고, R을 언급한 게시물은 18%에 불과했다.
클라우드 아카데미에 따르면 R과 Python 이외의 데이터 엔지니어를 위한 다른 대표적인 기술로는 SQL, Spark, Hadoop, Java, Amazon Web Services(AWS), Scala, Kafka 등이 있다.
출처 : 코딩월드뉴스(https://www.codingworldnews.com)
_______________________________________________
R 코드
도표 그리기(데이터 시각화)
blood = c("B", "A", "B", "A", "A", "B", "O", "A", "A", "A", "O", "B", "AB", "B", "AB",
"AB", "A", "A", "O", "AB", "O", "A", "B", "O", "B", "B", "A", "A", "O", "A",
"A", "AB", "B", "B", "O", "B", "B", "B", "A", "AB", "A", "A", "B", "O", "B",
"B", "O", "B", "O", "B", "A", "A", "AB", "A", "A")
cnt = table(blood)
pie(cnt) # 원도표
barplot(cnt) # 막대도표
cbind(cnt, prop.table(cnt)) # 도수분포표
cnt
A 20 0.3636364
AB 7 0.1272727
B 18 0.3272727
O 10 0.1818182
평균, 중위값, 사분위값 구하기
data <- sample(1:100,5,replace=TRUE)
print(data)
print(mean(data))
print(median(data))
print("\n")
print(quantile(data,type=1))
print(quantile(data,type=2))
print(quantile(data,type=3))
[1] 29 8 60 55 92
[1] 48.8
[1] 55
[1] "\n"
0% 25% 50% 75% 100%
8 29 55 60 92
0% 25% 50% 75% 100%
8 29 55 60 92
0% 25% 50% 75% 100%
8 8 29 60 92
분산, 표준편차, 박스그림 그리기
data <- sample(1:100,100,replace=TRUE)
print(data)
print(mean(data))
print(var(data))
print(sd(data))
boxplot(data,horizontal=T)
[1] 28 21 95 26 28 61 42 92 16 1 95 57 76 85 16 97 22 35 81 74 4 85
[23] 38 3 45 64 3 77 97 31 1 85 62 67 82 18 30 49 38 77 40 73 9 11
[45] 10 78 34 8 18 12 84 95 67 57 16 70 50 90 10 28 63 91 59 48 23 42
[67] 48 26 83 65 82 43 94 11 26 61 37 70 58 12 82 93 42 32 49 68 40 79
[89] 4 47 77 48 26 62 22 48 87 76 15 70
[1] 49.73
[1] 833.8355
[1] 28.87621
순열 구하기 실습
다양한 언어와 방식을 통해서 순열을 구해보고 그 과정을 통해서 어느 방식이 더욱 순열을 구하는데 유리한 지 그리고 데이터를 다루는 데 유리한지를 알아보면서 아래의 문제를 풀어보는 실습을 진행해 보았습니다.
1. factorial을 직접 구해서 나누어주는 방법
아래와 같은 Sage코드를 통해서 구할 수 있습니다.
Python으로 구현하면 아래와 같아집니다.
마지막으로 C나 C++, Java와 같은 언어를 통해서 구해줄 경우에는 해당 언어들의 변수가 저장할 수 있는 수의 범위를 벗어나기 때문에 어느정도의 연산을 줄여주거나 mod값을 적용해주는 과정이 필요합니다.
이를 C로 구현한 내용을 표현하자면 아래와 같습니다.
2. Pascal의 공식을 통해서 구해주는 방법
Pascal의 공식을 통한 방식은 위의 방식과 비교하자면 약간의 시간이 더 걸리는 방식이지만 연산하는 수의 크기를 보다 줄일 수 있는 방법입니다.
아래는 Pascal의 공식을 구현한 python코드입니다.
또한 마찬가지로 Pascal의 공식을 구현한 C코드입니다.
comment: 위 실습을 진행하면서 데이터의 개수가 충분하지 않거나 4분위를 구하는 방식에 따라 값이 달라지는 경우가 존재함을 확인할 수 있었습니다. 또한, R이라는 언어가 Python의 Matplotlib보다 데이터의 시각화에 있어서 효율적이라는 생각을 가지게 되었으며, 통계부문에서의 R의 강점을 체험할 수 있던 계기가 되었다.
이번 순열 구하기 실습을 진행하면서 다양한 언어를 사용해보고 그에 따라서 Python과 C언어가 각자가 유리한 부분과 취약한 부분, 그리고 사용하는 환경의 차이점에 대해 알 수 있었습니다. Python의 경우에는 큰 데이터를 처리하고 넓은 범위에서의 수의 연산을 지원하는 반면에 연산속도면에서 C언어에 비해 매우 느린 단점을 가지고 있습니다. 반면에 C언어는 연산을 보장하는 범위가 작은 반면에 코드가 실행되는 속도가 매우 빠르다는 장점을 가지고 있습니다. 이러한 실습을 통해 얻은 점들을 통해서 점점 사람들의 코딩언어로 Python이 지향되고 있는 이유중에는 점점 더 커져가는 데이터를 다루는데 용이하다는 장점이 포함되어 있을 것이라는 생각을 가지게 되었습니다. 또한 큰 수 연산을 보장하는 Python의 경우에는 충분한 메모리가 존재한다면 Pascal의 공식이 아닌 팩토리얼 연산으로 순열을 구하는 것이 효율적일 것이라는 생각을 가질 수 있었습니다.
푸아송 분포와 sage, R코드 실습
류재헌, 양지슬, 안은선
이산확률변수를 가지는 이산확률분포에는 베르누이분포, 이항분포, 포아송 분포 등이 있습니다. 5주차 강의의 핵심인만큼 다른 학우분들도 확률분포에 대한 report를 여럿 올려주셨는데, 저도 다른 학우분들의 글을 보고 이항분포에 대한 개념을 정리하기 위해서 양지슬, 안은선 학우님의 글에 제 글을 첨부해 re-finalize해보기로 하였습니다.
< 그림1 > 머신러닝 알고리즘에서 지도학습, 자율학습을 위한 수학, ArtificialNeuralNetworkForNewbie
확률 기반의 인공지능을 구축하기 위해서, 우리는 여러 기저함수에 대해서 배우게 됩니다. 기저함수란 서로 직교하면서 선형적으로 독립적인 함수의 집합을 의미합니다. 기저함수를 구성하는 설명 변수(기저벡터)들은 선형 독립이어야 합니다. 기저함수는 확률분포 모델에 따라 연속 확률분포와 이산 확률분포로 분류됩니다.
연속 확률분포에는 정규분포, 감마분포, 지수분포, 베타분포, 디리클레 분포 등이 있습니다. 그리고 이산 확률분포에는 이항분포, 음이항분포, 푸아송분포, 카이제곱 분포, 그리고 로지스틱 분포가 있습니다. 그 중에서 푸아송 분포는, 확률에서 단위 시간 안에 어떤 사건이 몇 번 발생할 것인지를 표현하는 이산 확률 분포입니다.
<그림 2> 푸아송 분포의 공식, 위키백과
이 때, 시간의 단위구간이 있고(1시간), 이를 더 짧은 단위구간으로 나눌 수 있을 때(1시간) 더 짧은 단위구간 중에 어떤 사건이 발생할 확률은 일정해야 합니다. 그리고 어떤 단위구간 사건의 발생은 다른 단위구간의 발생으로부터 독립적입니다. 다시 말하면, 영향을 주는 경우에는 푸아송 가정에 어긋난다는 뜻입니다.
<그림 4> 예제 4번, 푸아송 분포를 따르는 모집단에서의 표본 추출, MATH4AI
이항분포 예제 4번에서는 포아송 분포를 따르는 모집단에서, 임의로 표본을 취하고 있는 코드를 소개하고 있습니다. 교재의 추출 집단과 코드의 실행 결과로 인한 추출 집단이 다른 것을 확인할 수 있습니다.
<그림 4> 푸아송 분포의 예제5번, MATH4AI
P(X=1) = P(X=2)인 포아송 분포를 따르는 X가 있을 때, P(X=3)을 구하는 예제입니다. 이 예제를 변형시켜서, P(X=2 = P(X=3)인 포아송 분포를 따르는 X가 있을 때, P(X=1)을 구해보도록 하겠습니다.
<그림 5> 푸아송 분포에서 lamda의 해
<그림 6> 푸아송 분포의 sage 코드 풀이
<그림 7> 푸아송 분포의 R 코드 풀이
푸아송 분포의sage코드, R코드를 이용한 풀이입니다. Lamda의 경우0보다 크기 때문에, lamda = 0은 해답이 되지 못합니다. 따라서 lamda = 1.5가 되고, 이것을 sage와R의 풀이에 적용해 해답을 구했습니다.
38. 공분산과 상관계수와 독립 사이의 명제에 대한 질의응답
[Final OK by SGLee] Finalized by 조주현, 이시원, 박정현, 안은선, 김민서, 양지슬 (원글: 질문과 답 - 공분산과 독립사건), 명제 '두 사건이 서로 독립이면 공분산과 상관계수가 0이다'에 대해 정확히 이해하고, 그 역('공분산과 상관계수가 0이면 두 사건이 서로 독립이다')이 일반적으로 성립하지 않는 이유와 반례에 대해 배우고 어떤 경우에 그 역이 성립하는지 또한 배울 수 있는 기회가 되었습니다.
작성자:양지슬(2017####18)작성일:8월 11일 오전 1:58
조회수:26
Finalized by 조주현, 이시원, 박정현, 안은선, 김민서, 양지슬 (원글: 질문 - 공분산과 독립사건)
명제 '두 사건이 서로 독립이면 공분산과 상관계수가 0이다'에 대해 정확히 이해하고, 그 역('공분산과 상관계수가 0이면 두 사건이 서로 독립이다')이 일반적으로 성립하지 않는 이유와 반례에 대해 배우고 어떤 경우에 그 역이 성립하는지 또한 배울 수 있는 기회가 되었습니다.
[6주차] 질문 - 공분산과 독립사건
작성자:조주현(2018####96)작성일:8월 10일 오후 9:26
조회수:30
Q. 두 개의 사건이 서로 독립이면 공분산과 상관계수가 0인데 이 역인 '공분산과 상관계수가 0이면 두 개의 사건은 서로 독립이다' 도 성립하는지 궁금합니다.
이시원(2021####15)8월 10일 오후 9:37
A. 공분산이 0 인 경우에도 독립이 아닐수 있습니다.P(x=-1)=P(x=1)=1/4,P(x=0)=0일 때, Y=x^2이라면 P(y=0)=P(y=1)=1/2가 되고 Cov(x,y)=0이 됩니다. 다만 이때의 x,y는 독립이 아닙니다.아래는 참고한 사이트 출처입니다.https://datalabbit.tistory.com/15
박정현(2018####21)8월 10일 오후 9:44
A. 일반적으로 역은 성립하지 않습니다.
Cov X,Y=0임은 두 확률변수 간 선형적인 상관관계가 없음을 의미합니다.
단, 두 확률변수가 모두 정규분포를 따를 경우 역이 성립합니다.
안은선(2020####19)8월 10일 오후 10:53
역이 항상 성립하지는 않습니다.공분산이 0인 경우에는 강의에서 배운 것처럼 독립이라 아무런 선형관계가 존재하지 않는 경우와 비선형적으로 상관 관계가 있는 경우가 있습니다.(비선형 상관관계는 선형이 아닌 상관관계를 말합니다.)따라서 공분산이 0이라고해서 무조건 두 개의 사건이 독립이 되는 것이 아니게 되는 것입니다.
이상구(LEE SANGGU)8월 10일 오후 11:57
Good answers ^^
김민서(2021####02)8월 11일 오전 00:08
조주헌님의 질문과 다른 학우님들의 답변을 듣고 궁금증을 해소할 수 있었습니다.
cov = x,y가 0이라고 해서 x,y가 독립이 아닌 한 가지 예시를 더 첨부합니다 !E(XY) = 0*(-1)*0 + 0*0*(1/3) + 0*1*0 + 1*(-1)*1/3 + 1*0*0 + 1*1*(1/3) = 0E(X) = (-1)*(1/3) + 0*(1/3) + 1*(1/3) = 0E(Y) = 0*(1/3) + 1*(2/3) = 2/3따라서 Cov(X,Y) = E(XY) - E(X)E(Y) = 0 - 0*(2/3) = 0
그런데 박정현님의 답변 중 두 확률변수가 모두 정규분포를 따를 경우 역이 성립한다는 것에 대해 궁금증이 생겼습니다.
Q2. 두 확률변수가 정규분포를 따를 때에는 왜 역이 성립하는 것인가요??
양지슬(2017####18)8월 11일 오전 1:29
박정현 학우님의 댓글을 읽고 김민서 학우님과 같은 의문이 생겨 관련하여 찾아보았습니다.https://en.m.wikipedia.org/wiki/Multivariate_normal_distribution 에서는
A.2두 확률변수가 각각 정규분포를 따르는 경우가 아닌, 다변량 정규분포를 따르는 경우에서만 선형적인 상관관계가 없을 때 두 사건이 서로 독립이라는 명제가 성립할 수 있다고 서술되어 있습니다.
위 서술에 따라, Joint Normality에 대해 더 조사해보았습니다.
이변수 정규분포에서의 Joint pdf는 f(x,y)={1/2pi*sigma_x*sigma_y*sqrt(1-rho^2)}*exp[-z/2*(1-rho^2)] 이 때 z={(x-mu_x)/sigma_x}^2 - 2*rho*(x-mu_x)(y-mu_y)/sigma_x*sigma_y + {(y-mu_y)/sigma_y}^2 로 나타낼 수 있습니다.여기에서 rho=0이면, f(x,y)=(1/2pi*sigma_x*sigma_y)*exp[-z/2]=(1/sqrt(2pi)*sigma_x)*exp[-(x-mu_x)^2/2*sigma_x^2]*(1/sqrt(2pi)*sigma_y)*exp[-(y-mu_y)^2/2*sigma_y^2]=f(x)*f(y) 로 나타낼 수 있습니다.
따라서, x,y에 대한 joint probability density function f(x,y)가 bivariate normal distribution을 따를 때에는 공분산이 0이면 두 사건이 독립이라고 할 수 있습니다.참고한 링크를 첨부합니다.
comment: 명제의 역의 성립 가능성에 대해서 보다 조심스럽게 접근해야 한다는 것을 깨달을 수 있었으며, 공분산과 상관계수가 0이더라도 서로 독립이 아닌 경우에 대해서 찾아보면서 명제의 반례가 있음을 확인할 수 있었습니다. 이를 통해서 공분산과 상관계수를 통해서 사건 사이의 관계를 유추해서는 안된다는 것을 깨달았습니다.
중심극한정리에 대한 질문과 실습 정리
권서우, 김은진, 류재헌, 유민솔, 이상원, 이상구 교수님, 홍정명
권서우 학우님꼐서, ‘중심극한정리에서 표본이 많아지면 표본평균의 정규분포가 가지는 분산이 모집단의 분산과 가까워지지 않는 원리’에 대해서 질문해 주셨습니다. 저를 비롯해서 많은 학우분들이 댓글을 달아주셨는데, 그 내용을 정리하자면 아래와 같습니다.
<그림 1> 분산 그래프, 위키백과
분산의 경우 ‘분산이 클수록 그래프의 모양은 퍼진다’ 라는 특성을 가지고 있습니다. 중심극한정리에서 표본의 경우 모집단에서 원소를 추출해 그 원소들의 평균을 원소로 가지고 이것을 표본평균이라고 합니다. 만약 표본의 개수가 더 많아진다면 모집단의 평균과 표본평균은 가까워 질 것이고, 표본의 개수가 모집단의 원소의 개수와 같다면 표본평균 = 평균이 되어서 모든 원소가 평균값을 가지게 될 것입니다. 그렇다면 그래프의 모양은 퍼진 모양이 아닌 중심에 몰려 있는 모양을 취하게 될 것이고, 이것은 분산의 감소를 뜻합니다. 아래에는 질문글과 권서우, 김은진 학우님의 개념 요약과 실습을 첨부하였습니다.
[6주차] 중심극한정리에 관한 질문
작성자 : 권서우(2020####52)작성일 : 8월12일 오전1:19
조회수 : 47
중심극한정리에서는 표본이 많아지면 많아질수록 정규분포에 가까워진다고 정의가 되어있습니다. 그런데 샘플링한 표본의 평균은 모집단의 평균과 가까워지지만 분산은 왜 가까워지지 않는지에 대한 원리가 궁금합니다.
이상원(2016####99)8월12일 오전2:11
질문 내용이 흥미로워 많이 찾아봤지만 명쾌한 설명을 얻지는 못했습니다. 제 생각에는1. 정의에 따르면 표본이 많아지면 정규분포의"모양"에 가까워지는 것이기에 표본이 많아진다고 모집단의 정규분포"모양"에 가까워지는것은 아닌것 같습니다. 즉 분산이 달라 좌우로 퍼지는 산포도의 모양이 다를 수 있을 것 같습니다. 2. 평균과 분산의 계산식을 생각했을땐 표본평균에lim->inf를 하면 쉽게 모평균과 표본평균의 근사성이 이해가 가지만 중심극한정리는 모집단이 정규분포에 따르지 않아도 표본의 수가 많아지면 정규분포에 가까워지는것이기에 모집단이 정규분포인가 아닌가에 따라서도 분산이 가까워질지 아닐지 생각할수도 있을것 같습니다.
류재헌(2015####86)8월12일 오전2:14
식으로 표현하자면, n을 표본의 개수, 표본 평균을x*라고 했을 때, V(x*) = V(1/n*(x1+x2+...+xn)) = 1/(n^2)*{v(x1)+...+v(xn)} = 1/(n^2)*nV(X) = σ^2/n이기 때문에n이 커질수록 분산은 모집단의 분산과 가까워지지 않습니다. 거꾸로n=1이라면 모집단의 케이스와 표본의 케이스가 같을 것이므로 평균과 분산이 모집단의 경우와 같을 것입니다. 그런데 계산적인 의미로 궁금하신게 아닌 것 같으니 설명을 첨부하자면, 중심극한정리에서는 표본의 평균을 추출하여 그것들이 이루는 분포를 관찰하게 됩니다. 이 때, 모집단의 모양은 가지각색인데, 전혀 정규분포를 이루지 않는 집단도 일정한 크기 이상의(보통은n=30 이상) 표본을 추출하여 평균을 내고 그 평균의 분포를 관찰하면 정규분포를 이루게 됩니다. 표본의 크기가 커질수록 정규분포는 가운데에 집중된 모양을 이루게 될 테고(모집단의 평균과 가까운 값이 많아질 것이기 때문에), 이것은 곧 분산이 작아진다는 것을 의미합니다. 이것이 엄밀하지 못한 설명이여서 막 사용할수는 없지만, 이해하시는데 조금이나마 도움이 되셨으면 해서 첨부합니다. 이 사이트가 도움이 될 겁니다. https://drhongdatanote.tistory.com/57
유민솔(2021####66)8월12일 오전2:20
https://1992jhlee.tistory.com/m/12 1. 샘플링한 표본의 평균의 경우, 어떤 모집단이 있을 때 그 모집단은 평균치를 가지고 있을 것입니다. 이 모집단에서 랜덤으로 표본을 하나 샘플링하면 이 표본의 분포는 모집단에서 어떤 원소들이 선택되느냐에 따라 모집단과 비슷할수도, 아닐수도 있습니다. 그러나 모집단의 분포를 고려한다면 뽑힐 확률이 큰, 즉 확률밀도함수의 함숫값이 큰 원소들이 더 많이 뽑힐 것이고, 그런 원소들의 평균은 모집단의 평균과 더 가까울 것입니다. 따라서 시행 횟수를 크게 한다면(=표본을 크게 한다면) 모집단이 평균과 가까운 평균을 가지는 표본들이 많이 뽑힐 것이고 표본평균의 분포가 정규분포를 따르는 것이 자연스럽습니다. 2. 분산의 경우 표본이 많아질 수록 작아집니다. 그 이유는1번에서 언급한 내용과 밀접한 관련이 있는데, 표본을 추출해서 그 원소들을 살펴본다면 모집단의 평균과 가까운 원소들이 평균과 먼 원소보다 많을 것입니다(즉 샘플링한 표본에서는 평균과 멀리 떨어진 원소가 모집단보다 적을 것입니다.). 그렇기 때문에 표본 평균의 분포는 모집단보다 더 평균에 밀집된 형태를 가질 것이고, 따라서 분산이 더 작아집니다.
홍정명(2021####17)8월12일 오전2:27
중심극한정리에서, 표본의 크기가 커질수록 표본평균의 분포는 정규분포에 가까워지고, 이때 표본평균의 평균은 모평균이 되고 표본평균의 분산은 모분산을 표본의 크기로 나눈 것((시그마^2)/n)이 됩니다. 표본평균의 분산이 왜 모분산에 가까워지지 않고 모분산/n 이 되는지에 대해 생각해보자면, 표본의 크기가 클수록 표본평균의 분산이 작아진다는 뜻일 것입니다. 분산은 자료의 분포가 평균에 얼마나 가까이 있는가를 보여줍니다. 대부분의 값들이 평균과 큰 차이가 없게 모여 있다면 분산이 작습니다. 예를 들어 표본의 크기를2로 하고 표본평균의 분포를 만든다고 합시다. 이렇게 모집단에서 값을2개씩 뽑아 표본을 만들 때, 한 값이 극단적으로 크거나 작은 등 유별나다고 해도, 나머지 한 값이 그만큼 극단적이지 않다면 해당 표본평균은 둘의 평균이므로 상대적으로 덜 극단적이게 바뀝니다. 즉 값들이 상대적으로 평균에 모이는 정도가 커진 것입니다. 만약 표본의 크기가 너무 커져 모집단의 크기와 비슷할 정도라면 어떻게 표본을 뽑든 표본평균은 모평균과 비슷하게 되고, 즉 표본평균들이 거의 서로 비슷하게 되는(분산이 매우 작아지는) 결과가 나옵니다. 표본의 크기가 모집단과 같다면, 표본을 반복해서 뽑아도 항상 표본집단=모집단, 표본평균=모평균 이라는 같은 결과가 나와 분산은0이 될 것입니다. 이러한 생각을 해 보면 표본의 크기가 커질수록 표본평균의 분산이 작아지는 대략적인 상황을 파악할 수 있을 것 같습니다.
이상구(LEE SANGGU)8월12일 오전3:21
Good communications. 통계는 여러분들이 나보다 호기심도 많고 더 많이 아는 듯 하네요^^ Nice to see your wonderful academic activities.
권서우 학우님의 실습을 보고, 개념 요약을 추가하였으며 추가 실습도 진행하였습니다.
중심극한정리 ( central limit theorem, CLT)
- 중요한 이유 : 분석모형이 정규분포를 따른다는 가정의 근거가 됨.
+ 실용적인 면에서도 의미가 크며, 품질관리에서도 이용
- 내용 : 평균이 μ이고 분산이 σ2인 모집단으로부터 추출한 크기가 n인 확률표본의 표본평균

는 n이 증가할수록 모집단의 분포유형에 상관없이 많은 경우는 근사적으로 정규분포N(μ, σ2/n)을 따름
- 표집분포 : 연구대상이 되는 모집단에서 표본을 추출한 자료를 통해서 통계적 가설을 검증할 때 필요한 분포
실습)
결과
결과
표본이 일정 수준 이상의 크기가 되면 표본 평균의 분포를 파악할 수 있고, 이를 통해 모평균의 신뢰구간까지 쉽게 구할 수 있다는 것을 알게 되었다. 모집단의 분포가 극단적인 경우에는 더 많은 표본이 필요함을 알 수 있었으며 따라서 충분한 표본의 수를 확보하는 것이 중요하다고 생각하였다. 중심극한정리의 원리(통계)를 이용하면 데이터 과학을 위한 예측 모델링이 가능함을 배웠고 그러므로 이를 잘 이해할 필요성을 느꼈다.
[6주차] 표집분포와 중심극한정리 실습
작성자 : 권서우(2020####52)작성일 : 8월12일 오전1:08
조회수 : 13
1. 확률변수X가n = 120, p = 0.7의 이항분포를 따른다고 할 때, 이러한 확률 변수X가69 이상89 미만일 확률은?
결과: 0.813~0.814
2. 식품의약품안전청에서는 어떤 생수의 단위량당 세균의 수치를 조사하고자 한다. 임의로 선택한10개의 생수병을 검사한 결과 각 생수병에 대한 단위량당 세균의 수는 다음과 같았다.
174 192 216 199 185 201 208 194 197 182
각 생수병의 단위량당 세균의 수는 정규분포를 따른다고 가정했을 때, 해당 생수의 단위량당 평균 세균수에 대한97% 신뢰구간을 구하여라.
결과: 184.7~204.9
3. 어느 공정과정에서 나오는 제품 중150개를 임의로 추출하여 조사한 결과8개가 불량품이었다. 이 공정과정에서 나오는 제품 전체의 불량률에 대한96% 신뢰구간을 구하라.
결과: 0.01565~0.09101
이 실습을 통해 표집분포와 중심극한정리의 개념을 확립할 수 있었고, R 코드를 사용해 다양한 분야에서 이를 활용을 할 수 있다는 것을 느꼈다. 중심극한정리 같은 경우, 평균이u이고 분산이 σ2인 모집단으로부터 추출한 크기n인 확률표본의 표본 평균 ¯x는 표본의 크기가 큰 경우(보통n이30이상인 경우) 근사적으로 평균이u이고 분산이 σ2/n인 정규분포를 따르는데, 이러한 데이터를 활용하여 단위량당의 신뢰구간이나 불량률 등등 계산할 수 있었다는 점이 매우 흥미로웠다.
< 참고문헌 >
1. 이상구, MATH4AI, BigBook
2. 분산 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)
- 권서우 학우님이 중심극한정리에 대한 질문글을 올려주셔서, 표본의 증가가 분산에 미치는 영향을 정리하였습니다. 수학적으로는 관련 내용이 충분히 나와있기에 계산적인 내용보다는 분산이 변함에 따라 그래프에서는 어떤 변화가 있는지 시각적으로 보임으로써 정규분포의 모형에 대한 이해를 도모하였습니다.
39. PCA의 개념, 사용 사례, 구현 코드의 정리
[Final OK by SGLee] 큰 고유값의 고유벡터를 선택하는 이유, Re-finalized by 권서영, 류재헌, 박정현, 이시원, 이상구 교수님, 이지용, 이혜연
작성자:류재헌(2015####86)작성일:8월 13일 오전 3:03
조회수:14
저번 finalize 레포트를 수정하고, 새로이 알게 된 내용을 덧붙였습니다.
고유값이 큰 고유벡터를 PCA에서 선택하는 이유가 궁금해서 조사해봤습니다.
주된 내용은주성분 분석(PCA) - 공돌이의 수학정리노트 (angeloyeo.github.io)를 참조하여, 나름대로의 설명을 덧붙여 봤습니다.
행렬을 통해서 본 PCA가 데이터 분석에서 갖는 의의
류재헌, 박정현, 이상구 교수님, 이시원, 이지용, 이혜연
인공지능을 위한 기초수학의 핵심적인 내용을 담고 있는 주성분분석은 차원 축소를 하면서도 원 데이터의 분포를 최대한 보존한다는 특성을 가지고 있습니다. 이것이 가능한 이유는 우리가 지금까지 배운 행렬의 특성인 정규직교화를 이용했기 때문입니다. 이번 보고서를 통해서 행렬의 데이터 분석에서 ‘직교’와 ‘정규화’가 갖는 의의와 PCA의 과정을 살펴보고 예제를 통한 실습까지 해 보려 합니다.
PCA에서 정규직교화와 SVD가 갖는 의미
정규직교벡터란, 직교 벡터(orthogonal vector)이면서 단위 벡터(unit vector)인 벡터를 말합니다. 두 벡터가 90도의 각도를 이루고, 각 벡터의 길이(크기)는 1인 방향성분만을 나타내는 벡터를 정규직교벡터(orthonormal vector)라고 합니다.
<그림 1> 정규직교화 벡터의 수식, 러너게인 티스토리
이러한 정규직교벡터들은 행렬의 정규직교기저(orthonormal basis)를 이루게 됩니다. 정규직교기저를 만드는 이유는 선형대수의 행렬 연산에 있어서 좋은 결과를 보여주기 때문입니다. 벡터를 정규화하면 수치 연산을 하는 과정에서 값이 무한정으로 커지거나 작아져서 발생하는 overflow나 underflow문제에 있어서 자유롭습니다. 왜냐하면 정규화를 통해서 벡터들을 동일한 스케일로 만들었고, 이렇게 만들어진 단위 행렬은 연산에서 크기에 영향을 미치지 않기 때문입니다. 직교화는 행렬의 수식을 매우 간단하게 만드는 효과가 있습니다. 이것은 직교행렬이 가지는 성질 덕분입니다.
<그림 2> 직교행렬이 가지는 성질, 러너게인 티스토리
보시다시피 Q가 직교행렬일 경우, Q의 transpose와 Q의 inverse는 같게 됩니다. 어떤 벡터를 행렬 A에 정사영(projection) 시키고 싶을 때를 예로 들면,
<그림 3> 정사영에서 직교행렬을 이용한 연산의 예시, 러너게인 티스토리
보시다시피 직교행렬의 성질로 인해서 연산이 매우 간단해지는 것을 볼 수 있습니다. 여기까지 정리한 내용에서, 이것이 PCA에 주는 이점과 PCA의 과정을 따져봅시다.
1. PCA는 여러 차원의 변수에서, 기존의 변수를 일차 결합하여 선형 연관성이 없는 주성분을 만들고 변수를 축소한다.
2. 이렇게 차원을 축소해 원 데이터를 보존하는 3가지의 변수만 택해서 3차원 데이터로 차원을 줄이면, 11차원의 변수를 모두 고려하는 것보다 계산과 시각화가 용이해 쉬운 데이터 분석이 가능하다. (예를 들면, 두 개의 상관관계가 있는 데이터를 생각해보자. 이 데이터들은 하나가 커지면 다른 하나는 거기에 비례해서 커지는 상관관계를 가지고 있다. 이 때 이 두 데이터를 모두 가져오기보단, 하나의 데이터만 가져와도 나머지 하나의 데이터는 자동적으로 알기 때문에 하나만 가져오는 것이 낫다.)
3. 이러한 과정의 핵심은 SVD(특이값분해, singular value decomposition)이며, 일반적인 행렬의 경우에서도 고윳값 분해와 유사한 행렬 분해를 진행하여 p×p대각선 행렬의 데이터에서 k개의 데이터를 취사선택해 유의미한 데이터를 갖는 행렬을 만들 수 있다.
요약하자면, 데이터의 나열일 뿐인 n×p행렬을 유의미한 데이터를 가지는 rank가 k인 n×p 행렬로 분석하는 과정이라고 할 수 있겠습니다.
PCA과정
1. 데이터를 센터링한다.
2. 센터링된 데이터의 행렬 X의 특이값 분해(SVD)를 구한다.
3. V의 열벡터가 주축(principal axes)이 된다.
4. Z=US의 열벡터들이 원 데이터를 주축에 정사영하여 얻어진 주성분 점수(PC score)가 된다.
5. 데이터를 p차원에서 k(<<p)차원으로 줄이기 위하여, U의 처음 k개의 열벡터(U_k)와 S의 k번째 선행 주 부분행렬(leading principal submatrix)(S_k)을 U_kS_k는 처음 k개의 PC를 포함하는 n×k 행렬이 된다.
아래는 교수님께 질문한 SVD와 라그랑주 승수법의 상관관계입니다. 특이값 분해를 시행하고, 그 후 라그랑주 승수법을 이용해 PCA를 진행할 수 있습니다.
PCA에서 SVD를 이용한 계산 과정에서 질문이 있습니다.
작성자 : 류재헌(2015####86)작성일 : 8월 12일 오후 7:20
조회수 : 5
이 과정에서, k는 사용자의 마음대로 p이하의 값에서 취사선택해도 되는 것인지, 그리고 SVD를 이용한 이 과정이 라그랑주의 승수법을 이용한 PCA와 어떤 관계가 있는지 궁금합니다.
이상구(LEE SANGGU)8월 12일 오후 8:37
1. k 가 너무 작아지면 정확도가 떨어지니까 ... 답이 필요한 제한시간과 자신의 계산 능력 및 데이터 처리 능력 고려하여, 자신이 선택한 k 차원으로 줄이면 됩니다. 2. PCA 하려면 먼저 SVD 이묭하고, 이어서 라그랑주 승수법 이용 해서 PCA 하는 것 입니다.
라그랑주 승수법
라그랑주 승수법은 최대값 또는 최소값을 찾으려는 문제에서 사용되는 해결방법으로 최적화 문제에 사용되는 수학적 기법입니다..
의 과정으로 구해집니다.
(출처: http://matrix.skku.ac.kr/math4ai/part4/)
PCA의 응용사례
1. 얼굴인식
얼굴을 구성하는 n*m 크기의 이미지 파일들이 존재한다면, 이들은 n*m차원의 벡터로써 생각할 수 있다. 이때 가지고 있는 여러개의n*m차원의 점 데이터들을 토대로 PCA를 수행한다면 차원 수와 같은 주성분 벡터들을 구할 수 있고, 이를 다시 이미지로 해석한 것을 eigenface라 하며 분산이 큰 순서대로 나타내면 아래와 같아진다.
이때 뒷부분의 주성분 벡터들은 노이즈성 정보를 나타내기 떄문에 전반부 k개의 주성분 벡터들만으로 원래 데이터를 표현한다면 노이즈가 제거된 상태의 데이터를 얻을 수 있다.
출처:
https://darkpgmr.tistory.com/110
PCA 실습
본 과정은 이상구 교수님의 예제 참고 사이트 PCA example - R -- Sage (skku.ac.kr)를 참조하였습니다. 사람들이 새 컴퓨터를 선택할 때 관심을 갖는 사항에 대해 척도가 7점인 4문항의 설문조사를 실시한 경우입니다.
1. 설문조사를 통하여 얻은 데이터의 행렬 생성
2. 데이터 행렬을 센터링해서 mydata의 행렬 생성
3. Mydata 행렬에 PCA 진행
PCA 실습 (2)
2D Score Plot을 그리면 아래 그림과 같습니다. PC1, PC2 두 개만으로도 전체 데이터 분산의 95.8%를 보존하고 있기 때문에 2차원으로 시각화해도 원 데이터의 모양을 파악하는 데 문제가 없습니다.
loading plot은 아래 그림과 같습니다. PC1 기준으로는 ‘Petal.Length’, ‘Petal.Width’, ‘Sepal.Length’가 비교적 중요한 변수임을 확인할 수 있습니다. PC2 입장에서는 ‘Sepal.Width’가 중요한 변수입니다.
위 분석에 사용한 R 코드는 아래와 같습니다.
PCA 요약
주성분분석 = PCA = principal component analysis는 고차원 데이터의 차원을 줄이는 차원축소의 기법 중 하나입니다. 원래 데이터의 분포를 최대한으로 보전하면서 서로 직교하는 새 축, 기저를 찾아 전차원 공간으로 변환하여 서로 선형연관성이 없는 새로운 변수인 주성분들을 만들어냅니다. 이때 고윳값분해 또는 특이값분해 SVD를 사용합니다.
PCA는 n*p 크기의 n=표본갯수, p=확률변수인 데이터 X에서 센터링을 하는 것에서 시작합니다.
센터링은 xj평균 = 1/n*(x1j+x2j+...+xnj)
X~ = X - [x1평균, x2평균, .... ,xp평균]
[x1평균, x2평균, .... ,xp평균]
......
=[x11-x1평균, x12-x2평균, .... ,x1p-xp평균]
[x21-x1평균, x22-x2평균, .... ,x2p-xp평균]
......
그래서 공분산 행렬은 ∑=[[var(x1), corr(x1,x2), .... ,Corr(x1,xn)], ....] = 1/n *(X~)^T(X~)로 나타낼수 있습니다.
(정사각행렬의 성분을 각 변수의 분산과 공분산으로 채운 것)
확률변수 {x1,x2, ... ,xp}가 센터링이 이미 되어있다고 해봅시다.
v1=열백터[v11,v21,v31, ... ,vp1]이 λ1의 고유백터일 때 (단 v1의 크기는 1), 확률변수 {x1,x2, ... ,xp}의 일차결합으로 만든 주성분
z1=x1*v11+x2*v21+x3*v31+ ... +xp*vp1은 평균이 0입니다.
그래서 z1의 분산은 V(z1) = Var(x1*v11+x2*v21+x3*v31+ ... +xp*vp1)
=E((x1*v11+x2*v21+x3*v31+ ... +xp*vp1)²)
=E(∑(i=1->p)∑(j=1->p) vi1*vj1*xi*xj)
=∑(i=1->p)∑(j=1->p) vi1*vj1*E(xi*xj) (E(aX)=aE(X))
=∑(i=1->p)∑(j=1->p) vi1*vj1*σij (σij는 xi와 xj의 공분산)
=v1^T*∑*v1 (이차형식 xTAx)입니다.
왜 v1이 λ1의 고윳값이냐 하면 라그랑주 함수 L(x,λ)=f(x)-λg(x)를 이용하면 됩니다.
f(v1)=v1^T*∑*v1 , g(v1) = v1^T*v1-1=0 이고 L(v1,λ1)=f(v1)-λ1*g(v1)의 그래디언트가 0이므로 2*∑*v1 - 2*v1 =0, det(∑-λ1*I)=0입니다.
따라서 λ1은 고윳값, v1은 λ1의 고유벡터가 됩니다.
λk는 공분산행렬 ∑의 k번째로 큰 고윳값이 되고 Var(zk)=λk가 됩니다.
또 [z1,z2, ... ,zp]=[x1,x2, ... ,xp]*V이고
데이터 X를 SVD분해를 했을때 X=USV라고 할때 (S는 X의 특이값이 큰 순서대로 있는 대각선 성분인 대각선 행렬입니다.)
∑ = V*A*V^T =1/n*X^T*X =1/n*V*[S1^T:O]*U^T*U*[S1:O]*V^T
=V(S1²/n)V^T로 나타낼 수 있습니다.
여기서 다섯가지를 유추해 낼 수 있습니다.
1) X=USV^T이면 V의 열백터가 주축이 됩니다.
2) Z=XV=USV^T*V=US이므로 Z=US의 열백터들이 PC score(주성분점수)가 됩니다.
3) 특이값 Si는 공분산 행렬 ∑의 고윳값 λi와 관계식 λi=Si²/n 이 됩니다.(이때 λi는 대응하는 PC의 분산)
4)데이터를 p차원에서 k 차원으로 줄이기 위해 S의 k번째 선행 주 소행렬식을 택하면, Zk=UkSk=[u1,u2, ...][[s1, ...], ...]으로 처음 k개의 주성분(PC)를 포함하는 n*k행렬이 됩니다.
5) Zk에 행렬 Vk^T를 곱하면 Xk를 복원할 수 있다. 이는 truncated SVD라고 하며 X의 SVD에서 크기 순서대로 k개의 큰 특이값 s1 ≥s2≥...≥sk ≥0 과 이에 대응하는 U와 V의 처음 k개의 열벡터를 택하는 것과 같습니다.
그래서 sage에서 실습을 해 보자면 X=[[1,2,3],[6,4,5],[8,9,7],[10,11,12]]를 주성분 분석을 해보았습니다.
우선 센터링을 해주자면 x1평균=6.25, x2평균=6.5, x3평균=6.75
X~=X-[[6.25,6.5,6.75],[6.25,6.5,6.75],[6.25,6.5,6.75],[6.25,6.5,6.75]]= [[-5.25,-4.5,-3.75],[-0.25,-2.5,0.25],[1.75,2.5,0.25],[3.75,4.5,5.25]]
sage에서 공분산행렬 ∑를 구해보면
X=matrix([[-5.25,-4.5,-3.75],[-0.25,-2.5,0.25],[1.75,2.5,0.25],[3.75,4.5,5.25]])
cov_matrix= 1/3 * X.transpose() * X
그래서 ∑=[[14.9166666666667 15.1666666666667 13.2500000000000],[15.1666666666667 17.6666666666667 13.5000000000000],[13.2500000000000 13.5000000000000 13.9166666666667]] 이 나옵니다.
cov_matrix.eigenvalues()
이것의 고유값은 [43.5742232741808, 2.16260385844664, 0.763172867372549] 가 나옵니다.
그리고 cov_matrix.eigenvalues()를 해서 고윳값의 고유벡터를 구해보면 V를 구할 수 있습니다.
그리고 X=USV^T로 특이값분해를 해보면
X=matrix([[-5.25,-4.5,-3.75],[-0.25,-2.5,0.25],[1.75,2.5,0.25],[3.75,4.5,5.25]])
b= (X.transpose() * X).eigenvalues()
c=[sqrt(i) for i in b]
S=diagonal_matrix(c)
print S 하면
S=[[11.4334014983531, 0.000000000000000 0.000000000000000],[0.000000000000000 2.54711828844677 0.000000000000000],[0.000000000000000 0.000000000000000 1.51311552834461]]이 나오는데
11.4334014983531²/3=43.5742232741808, 2.54711828844677²/3=2.16260385844664, 1.51311552834461²/3=0.763172867372549이므로 λi=Si²/n인것을 알게 되었습니다.
그리고 그리고 특이값 sk를 큰 값 순서대로 몇개만 뽑으면 차원데이터를 일부만 손실하면서 차원을 축소할 수 있음을 알게 되었습니다.
그래서 정리해보면
센터링은 X~
=[x11-x1평균, x12-x2평균, .... ,x1p-xp평균]
[x21-x1평균, x22-x2평균, .... ,x2p-xp평균]
...... 입니다.
확률변수 x1의 일차결합 z1=x1*v11+x2*v21+x3*v31+ ... +xp*vp1는 평균이0, 분산이 v1^T*∑*v1 입니다.
λk는 공분산행렬 ∑의 k번째로 큰 고윳값이 되고 Var(zk)=λk입니다. 그리고 v1은 λ1의 고유벡터입니다.
데이터 X를 SVD분해를 했을때 X=USV라고 할때
∑ =1/n*X^T*X =V(S1²/n)V^T입니다. 그래서 V의 열백터가 주축이 되고 λi=Si²/n이며 Z=US의 열백터들이 PC score가 된다는 것을 알 수 있습니다.
그리고 데이터를 p차원에서 k 차원으로 줄이기 위해 S의 k번째 선행 주 소행렬식을 택하면, Zk=UkSk=[u1,u2, ...][[s1, ...], ...]으로 처음 k개의 주성분(PC)를 포함하는 n*k행렬이 되며, 거기에 Zk에 행렬 Vk^T를 곱하면 Xk를 복원할 수 있습니다. 이는 truncated SVD라고 하며 X의 SVD에서 크기 순서대로 k개의 큰 특이값 s1 ≥s2≥...≥sk ≥0 과 이에 대응하는 U와 V의 처음 k개의 열벡터를 택하는 것과 같습니다.
PCA가 유독 이해가 잘 가지 않아 하루종일 공부한 후 학우분들이 정리한 관련 파일을 보게 됐습니다.
일목요연하게 정리가 잘 되어 있어 이해하는 데 큰 도움이 되었습니다. 특히 정규직교를 할 수 있기에 차원축소를 하면서 원 데이터를 최대한 보존할 수 있다는 설명에 막혔던 부분이 뚫리는 느낌이었습니다. 제가 교안을 공부하면서 놓친 부분인가 확인해 보았습니다. 하지만 교안에서 찾아볼 수 없는 것으로 보아 제가 강의에서 놓친 것이거나 류재헌 학우가 공부하다 얻은 통찰일 것이라 생각합니다.
명석한 학우들 덕분에 하루종일 매달리며 공부한 PCA가 직관적으로 이해되서 기분이 좋았습니다.
아래 보고서를 읽다보니 저와 같이 라그랑주 승수법에 대해 잘 모르는 분들은 PCA step들이 가지는 직관적 부분이 이해가 잘 가지 않을 것 같아, 라그랑주 승수법에 대한 설명을 덧붙였습니다.
또한, 혼자서 요약하며 공부한 필기록을 첨부합니다.
이상구(LEE SANGGU)8월 13일 오전 00:16
Good job^^ 권서영씨, http://matrix.skku.ac.kr/math4ai/PCA/ 을 미리 보셨으면 더 쉽게 이해 했을 것입니다.
류재헌(2015####86)8월 13일 오전 00:45
도움이 되어서 다행입니다. 저도 PCA의 원리와 과정등이 잘 이해가 되지 않아서 교수님의 첨부자료와 인터넷 자료, 영상 강의들을 여럿 읽어봤습니다. 아직도 100퍼센트 이해가 됐다고 말할 수 없는 것 같습니다. https://www.youtube.com/watch?v=YEdscCNsinU 이 자료가 시각적으로 PCA의 원리를 이해하는데 도움이 되었습니다. 참고가 되었으면 좋겠습니다.
(추가) PCA에 대한 추가적인 이해
PCA를 공부하면서, 큰 고유값을 가지는 고유벡터를 선택하는 이유가 궁금했고, 그것에 대해서 조사했습니다. 결론은 고유값에 해당되는 분산이 클수록 데이터의 특성을 잘 나타내기 때문에, 그 고유값에 해당되는 고유벡터를 선택한다는 것이었습니다.
고유값과 고유벡터에 대해서 다시 한 번 복습해 보겠습니다.
우리는 6주동안 선형대수학에 대해 공부했기 때문에, 이 공식에 대해서는 아주 잘 알고 있다고 말할 수 있습니다. 하지만 이것이 기하학적으로 갖는 의미는 무엇일까요?
<그림 1> 선형대수학에서 행렬이 갖는 의미, 공돌이의 수학정리노트
행렬은 벡터를 변환시켜주는 역할을 합니다. 하지만 어떤 벡터의 경우에는, 이 벡터에 행렬을 곱한 값이 상수배를 곱한 값과 같은 경우가 있을 겁니다.
<그림 2> 고유값과 고유벡터의 기하학적 의미, 공돌이의 수학정리노트
이 경우 상수가 고유값을, 벡터가 고유벡터를 의미합니다. 여기서 중요한 것은, 고유벡터가 이 행렬의 축(Axis)를 담당한다는 것입니다.
<그림 3> 행렬의 주축, 공돌이의 수학정리노트
그렇다면 여러 개의 고유벡터가 있을 때, 어떤 벡터에 데이터를 정사영하는 것이 최적의 결과를 내줄까요? 그림 4를 통해 알아보겠습니다.
<그림 4> 주축의 분산, 김성범[소장/인공지능연구소] 유튜브
그림 4는 동일한 데이터에서 축을 어떻게 설정할 지에 대한 문제를 나타낸 그림입니다. 왼쪽 그림과 오른쪽 그림을 비교해 보면, 왼쪽 그림의 축에 나타난 데이터가 오른쪽 그림에 비해서 넓게 퍼져있는 것을 볼 수 있습니다. 이것은 데이터의 특성을 왼쪽의 축이 오른쪽의 축보다 잘 나타낸다고 할 수 있습니다. 동시에 왼쪽의 데이터가 더 퍼져있기 때문에 분산이 크다는 것 역시 알 수 있습니다. 정리하자면, 분산이 클수록 데이터의 특성을 더 잘 나타내는 축이며, 이것이 주성분 벡터를 찾을 때 분산이 큰(고유값이 큰) 벡터를 선택하는 이유라고 할 수 있겠습니다.
< 참고문헌 >
1. 이상구, MATH4AI, BigBook
4. Loner의 학습노트 :: 공분산 행렬과 주성분 분석(PCA) (tistory.com)
5. [핵심 머신러닝] Principal Component Analysis (PCA, 주성분 분석) - YouTube
6. 주성분 분석(PCA) - 공돌이의 수학정리노트 (angeloyeo.github.io)
- 공부하는데 있어서 제일 애를 많이 먹었던 주성분 분석입니다. 주성분 분석을 공부하면서 지금까지 배워왔던 선형대수학에 대한 이해도가 높아졌습니다. 선형대수학을 공부하면서 행렬의 고유값, 고유벡터를 구하고 분해를 구하는 이유를 제대로 이해하지 못하였다는 것을 깨달았습니다. 행렬을 기하학적으로 살펴보는 기회를 가짐으로써 그간의 내용을 다시 정리하고 주성분 분석을 이해하는데 있어서 도움을 받았습니다.
comment: 빅데이터를 다루는데 있어서 PCA의 중요성과 실제로 사용되는 사례에 대해서 알수 있었습니다. 또한, SVD와 라그랑주의 승수법을 통해서 PCA를 시행하는 과정에 대해서 학습할 수 있었으며, 이를 토대로 Python코드를 구성하고 실행시킬 수 있을것이라는 자신감을 가지게 되었습니다.
Week 7
Re-finalized by 양소혜, 이지용, 박정현, 김보민, 김석하, 임혜림, 김은진, 이혜연, 안은선, 위승연, 김수민 [빅데이터와 인공지능]
빅데이터와 인공지능
1. 인공지능(Artificial Intelligence, AI)
최근까지 우리가 필요하다고 생각한 방식으로 컴퓨터가 행동하도록 만드는 과학 및 공학
2. 기계학습(Machine Learning)
컴퓨터 프로그램이 경험을 통해 자동으로 개선될 수 있도록 하는 컴퓨터 알고리즘에 대한 연구 (Tom M. Mitchell)
인공지능을 달성하기 위한 방법론
(출처: https://wendys.tistory.com/169 )
1) 지도학습(Supervised Learning)
입력값과 대응값을 같이 줌
(일반적으로 입력 객체에 대한 속성을 벡터 형태로 포함하고 있으며 각각의 백터에 대해 원하는 결과가 무엇인지 표시되어 있다)
데이터에 대한 레이블(label)이 주어진 상태에서 컴퓨터를 학습시키는 방법
ex) MNIST 데이터셋을 활용한 손 글씨 숫자 인식
ex) 동물 사진들에 고양이가 있는 것과 없는 것을 분류하여 알려준 후 고양이 분류 프로그램을 만드는 것
- 분류(Classification)
입력 벡터가 어떤 종류의 값인지 알아내 것
이진분류문제, 다중분류문제로 나뉨
- 회귀(Regression) : 데이터들의 feature을 기준으로 연속된 값을 예측하는 문제로 어떤 패턴, 트랜드 등을 예측할 때 사용. 즉 답이 분류처럼 1,0으로 딱 떨어지는 것이 아니고 어떤 수나 실수로 예측된다.
ex) 집의 평수와 그에 따른 가격들을 입력했을 때 그에 해당하는 그래프를 만들어내는 것 -> 30평대의 가격이 얼마인지 예측
*feature : 머신러닝/딥러닝에서는 데이터의 적절한 feature을 잘 정의하는 것이 핵심. label, class, target, response, dependent variable 등으로도 불림
2) 비지도학습(Unsupervised Learning)
입력값만 줌
데이터에 대한 레이블이 주어지지 않은 상태에서 컴퓨터를 학습시키는 방법, 데이터의 숨겨진 특징이나 구조를 발견하는데 사용
ex) 동물 사진을 준 후 그룹화하도록 하는 것
ex) sns, 천문학 데이터 등에서 clustering 하는데 쓰임
ex) 주성분 분석(PCA) : 데이터의 차원을 줄임
*클러스터 분석(Cluster analysis) : 데이터 집단의 대표할 수 있는 대표점을 찾는 것, 데이터 마이닝의 한 방법
● 지도학습, 비지도학습의 대표적인 알고리즘
(출처: https://wendys.tistory.com/169 )
3) 강화학습(Reinforcement Learning)
보상이 최대가 되도록 액션을 취하는 것
환경과의 상호작용에서 수집한 관측치를 사용하여 보상을 극대화하거나 위험을 최소화하는 조치를 취하는 것을 목표로 함
행동 심리학에서 나온 이론으로 분류할 수 있는 데이터가 존재하는 것도 아니고 데이터가 있다해도 정답이 따로 정해져 있지도 않으며, 자신이 한 행동에 대해 보상을 받으며 학습하는 것
(출처: https://wendys.tistory.com/170 )
어떤 환경 안에서 정의된 에이전트(Agent)가 현재의 상태를 인식하여 선택 가능한 행동들 중 보상(Reward)을 최대화하는 행동 혹은 행동 순서를 선택하는 방법
(만약 이것을 지도학습의 분류를 통해 학습한다고 가정하면 모든 상황에 대해 어떠한 행동을 해야 하는지 예측하고 답을 설정해야 하기 때문에 엄청난 예제가 필요하게 된다. 바둑에서는 경우의 수가 10의 171제곱수 정도가 된다.)
강화학습은 이전에도 존재했지만 좋은 결과를 내지는 못했다. 하지만 딥러닝의 등장 이후 강화학습에 신경망을 적용하면서부터 바둑이나 자율주행차와 같은 복잡한 문제에 적용할 수 있게 되었다.
● 신경망 (Neural Network) (뒤에서 더 자세히 알아보자)
신경계의 기본단위인 뉴런(신경세포, Neuron)을 모델화한 것
퍼셉트론(Perceptron) : 최초로 제안된 신경망 프로그램 알고리즘(1957), 문제를 해결하는 가중치(weight)가 있는 경우에 학습 규칙이 정확한 네트워크의 가중치로 수렴, 하나의 뉴런을 사용하며 학습 데이터를 가장 잘 설명할 수 있는 최적의 패러미터 (w,b)값을 찾는다.
오차 역전파법(Back Propagation Algorithm) : 다중 신경망(Multi-layer Networks)을 학습
생산적 적대 신경망(General Adversarial Networks, GANs)
(출처: https://blogs.nvidia.co.kr/2018/09/03/supervised-unsupervised-learning/ )
cf) 퍼셉트론과 신경망의 차이는 무엇인가 (김은진 학우님 질문)
3. 딥러닝(Deep Learning)
다음 상황을 예측하는 일과 같이 인간이 하는 작업을 수행하도록 컴퓨터를 교육하는 일종의 기계학습
주어진 데이터에 초기 파라미터(parameter)를 설정 -> 여러 겹의 처리 계층을 사용하여 패턴을 인식하면서 컴퓨터가 스스로 학습하도록 훈련하는 것
(출처: https://ebbnflow.tistory.com/165 )
4. 신경망 (Neural Network)
수많은 데이터를 기반으로 기계학습을 통하여 행렬을 구하는 것으로 이 과정에서 신경망을 이용한다.
신경계의 기본 단위인 뉴런을 모델화한 것
하나의 인공 뉴런에서는 다수의 입력 신호를 받아서 하나의 신호를 출력하는데 이는 뉴런의 작동 방식과 비슷하다. 다만 뉴런의 돌기가 신호를 전달하는 역할을 인공 뉴런에서는 가중치가 하는 것이다.
기본원리는 몇 개의 층위를 만든 다음 ‘세포’들을 두고 임의의 연결강도로 연결한다. 그리고 ‘세포’에게 들어온 신호를 가중치와 곱해 더하고 역치와 비교해 다음 뉴런으로 전달한다. 그런데 이렇게만 할 경우 전송되는 신호는 그냥 입력신호의 선형 합이 될 뿐이다. 이런 문제를 해결하고자 비선형 활성 함수를 도입한다. (활성함수라고 불리게 된 이유는 ‘세포’가 임계치 이상의 자극을 받으면 활성화되어 반응을 하는 것과 유사했기 때문)
1) 활성화 함수
전 입력층의 노드로부터 입력값을 받아 가중치를 곱한 뒤 출력값을 도출하기 위한 것
① 출력값이 0 또는 1인 이진 분류 문제의 경우, 초기에는 한계값을 정하여 그 값을 넘으면 1 넘지 못하면 0으로 분류하는 아주 단순한 활성함수 사용
그런데 문제가 발생
입력층에서 계산한 입력값의 강도를 표현할 수 없음 -> 통계적인 확률 도출 불가능
② Sigmoid 함수
이 문제를 해결하고자 다층 퍼셉트론에서는 sigmoid 함수를 활성화 함수로 사용하게됨.
특징 : f’(x) =f(x)(1-f(x))
장점 : sigmoid 함수는 0과 1 사이의 확률값을 반환할 수 있고, 특정 차단값을 설정하여 0과 1로 분류하는 이진 분류 문제를 쉽고 직관적으로 해결할 수 있음. 또한 미분이 가능하여 경사하강법을 적용한 오차역전파법을 적용할 수 있음. 또한 매우 매끄러우므로 경사하강법을 시행할 때 기울기가 급격하게 변하는 기울기 폭주(Gradient Exploding)가 발생하지 않는다.
단점 :
Vanishing Gradient 문제
입력값이 아무리 크더라도 출력되는 값의 범위가 매우 좁기 때문에 (0과 1사이) 경사하강법 시행 시에 기울기가 0에 수렴하는 기울기 소실(Vanishing Gradient)이 발생할 수 있다. (도함수가 f(1-f)이므로 함수값이 0이나 1에 가까울수록 당연히 출력되는 값이 0에 가까워지게 된다 -> 수렴되는 뉴런의 기울기 값이 0이 되고 역전파시 0이 곱해져서 기울기가 소멸되는 현상이 발생. 역전파가 진행될수록 아래층에 신호가 전달되지 않음. 즉, 은닉층이 많을수록 학습이 되지 않음)
이렇게 해석도 가능.
입력층이 하나일 경우 sigmoid함수는 개체가 1일 확률과 가중치를 추정 가능하게 하여 각 변수에 대한 해석까지 가능하게 한다. (로지스틱 회귀) 그러나 이미지 분석이나 음성 분석 등 보다 복잡한 문제 해결을 위해서는 입력층과 출력층 사이에 은닉층이 여러 개가 있는 다층 퍼셉트론을 구성해야 하는데, 이때 은닉층이 많아질수록 역전파 횟수가 늘어난다. sigmoid함수의 기울기의 최댓값은 0.25로 역전파 횟수가 많아질수록 Chain rule에 의해 미분값이 0에 가까워지게 되어 가중치 업데이트가 거의 되지 않는다. 따라서 가중치 학습이 되지 않아 복잡한 문제 해결 시 모델의 성능 향상에 한계가 생기게 된다.
(출처: https://gooopy.tistory.com/52 )
이를 해결하기 위해 가중치를 적절하게 초기화할 수 있다. 만약 가중치를 표준 정규 분포(평균 0, 표준편차 1)로 초기화하면 sigmoid 함수의 출력값이 0.1에 치우치게 된다. 따라서 표준편차를 작게 설정한다면 표준편차가 1일 때보다 출력값이 0.5에 치우치게 되고, 의미있는 gradient 값을 가질 수 있다. 가중치 초기화 시 중요한 것은 출력값이 표준 정규 분포 형태를 가질 수 있도록 하는 것이다. 그래야 안정적인 학습이 가능하기 때문이다. 출력값을 정규화하는 방법은 두 가지가 있다. 하나는 sigmoid 나 tanh 등 s형태 함수의 경우 표준 정규 분포를 입력 개수의 표준편차로 나누는 Savier 초기화 방법이다. 다른 하나는 ReLU 함수의 경우에 사용하는 He 초기화 방법인데 표준 정규 분포를 입력 개수 절반의 제곱근으로 나누는 방법이다. (김보민 학우님)
또 다른 문제는 시간이 많이 걸린다는 것이다. 시그모이드 함수의 출력값은 모두 양수기 때문에 경사하강법을 진행할 때 그 기울기가 모두 양수거나 음수가 된다. 이는 기울기 업데이트가 지그재그로 변동하는 결과를 가져오고, 학습 효율성을 감소시켜 학습에 더 많은 시간이 들어가게 만든다
- 참고
인공지능에서 모델 성능 향상을 위해 Squeeze and excitation 방법을 사용한다.
말 그대로 특징을 짜냈다가(squeeaze) 증폭시키는(excitation) 방법이다. 기존 네트워크에 SE block을 붙여 사용하곤 하는데, 이를 통해 정확도를 향상시킬 수 있다.
이때 이 excitation 부분에서 sigmoid 함수가 사용된다.
squeeze 파트에서 짜낸 특징들이 sigmoid 함수를 통과하면서 0~1 사이의 값을 가지게 되는데, 이때 각각 특징들이 중요도에 따라 scaling 된다. (soft gating 기능을 제공한다고도 표현) (김보민 학우님)
③ tanh(Hyperbolic tangent) 함수
위의 Vanishing Gradient 문제를 해결하고자 사용.
도함수 최댓값을 1로 만들어 문제를 완화한다. 또한 중앙값이 0이 아닌 sigmoid 함수의 단점도 해결한다.
④ ReLU 함수
위의 Vanishing Gradient 문제를 해결하고자 사용.
ReLu 함수는 다음과 같이 0 미만의 값을 갖는 경우 0을, 0 이상의 값을 갖는 경우 해당값을 도출하는 함수이다. ReLu의 기울기는 0 또는 1 이므로 Vanishing Gradient 문제를 해결할 수 있어 실제로 딥러닝 모델 학습에 많이 사용된다.
이러한 ReLu 함수의 고안으로 딥러닝 모델은 비약적인 발전을 이루었다. Vanishing Gradient 문제에서 자유로우면서도 비선형 함수이므로 층을 깊게 쌓을 수 있기 때문에 모델 성능 향상에 제약이 거의 없고, 더 복잡한 문제를 해결 가능하게 했기 때문이다.
⑤ Softmax 함수 사용
Softmax 함수는 ReLu나 sigmoid 함수와는 달리, 다중 클래스 분류 문제에서 출력층 직전에 사용하는 활성화 함수이다. 자연지수함수를 사용하여 각 개체가 클래스 k에 속할 확률값을 반환하는데, 앞서 언급한 것처럼 이때 은닉층이 없고 입력층과 출력층만 있을 경우 다항분류 로지스틱 회귀모형과 동일하다.
식은 다음과 같다.
(박정현, 김보민, 김석하, 임혜림 학우님 참고)
2) 신경망의 원리
활성화 함수가 일차함수인 경우 (입력 x를 받아 y 출력)
y = xw + b (b는 편향(bias))
(는 임계값) 이면 1 출력
입력이 두 개라면
입력이 세 개라면

(출처 : 인공지능을 위한 기초수학)
편의상 편향을 0이라 하자. 그러면 다음과 같이 행렬의 곱으로 나타낼 수 있다.
3) 학습방법 : 학습데이터와의 오차를 최소화할 것으로 예상되는 방향으로 가중치 w와 편향 b를 업데이트한다.
오차 역전파(back propagation)법
가중치를 임의로 부여한 후 오차를 줄이는 방향으로 가중치 갱신
경사하강법(gradient descent method)을 오차함수를 최소화하는 문제에 적용한 것
(제곱오차)
(가중치 갱신하는 식)
더 자세히 알아보자.
(1) 각 계층에 전달된 오차 계산 (활성화함수는 sigmoid 함수 f(x))
제곱오차
(2) 출력층에서 얻은 오차로부터 은닉층과 출력층 사이의 가중치를 갱신한다
경사하강법을 적용하여 가중치를 갱신하기 위하여 다음과 같이 편미분을 한다.
이제 은닉층과 출력층 사이의 모든 가중치를 갱신한다.
(3) 은닉층에 전달된 오차로부터 입력층과 은닉층 사이의 가중치를 갱신한다.
출력층에서의 오차를 통해 은닉층에서의 오차를 구하자.
그러기 위해 가중치에 비례해서 오차를 역으로 전달한다
분모를 제외하면 다음과 같이 표현할 수 있다.
이때 분모를 없애면 일정 부분의 비율이 사라지게 되는데, 분모가 있는 경우와 실제로는 거의 차이가 없다.
이제 다시 원래의 목적인 입력층과 은닉층 사이의 가중치 갱신에 집중하자.
(2)에서와 같이 구하기 위하여 E를 w_ij에 대하여 편미분한 결과값을 찾자.
그리고 경사하강법을 통하여 가중치를 갱신하자.
오차 역전파법을 요약하면 이렇다.
“출력층에서의 오차를 구한 뒤, 경사하강법을 통해 앞에서의 층돌 사이의 가중치를
갱신하여 오차를 줄인다.”
(by 이지용 학우님)
4) 신경망을 제대로 예측할 때까지 많은 데이터가 필요하며, 또한 입력층과 출력층 사이에 많은 은닉층을 둘 수도 있다. 이와 같이 은닉층이 여러 개 있는 인공 신경망을 심층신경망(deep neural network)이라고 부르며, 심층신경망을 학습하기 위한 기계학습 기법을 딥러닝(deep learning)이라고 부른다. 은닉층이 여러 개 있는 경우에도 마찬가지로 오차 역전파법을 이용하여 그 이전 층에서 전파된 오차로부터 경사하강법을 적용하여 가중치를 갱신할 수 있다. (인공지능을 위한 기초수학)
5) cf) 인공신경망은 한 때 묻힐 뻔했으나 다시 부활할 수 있었던 것은 인공신경망 사전훈련, ReLU계열의 함수 등을 통해 은닉층이 많아도 학습을 잘 시킬 수 있다는 것이 밝혀졌기 떄문이다. 또한 컴퓨터의 연산속도가 빨라지면서 인공신경망의 느린 수렴속도가 덜 부각된 것도 한 몫 했다. (나무위키)
- 신경망에 대해 공부하면서 그 구조에 대해서 자세하게 알 수 있었습니다. 인공신경망이 어떤 식으로 작동하는지 알고 시그모이드 함수에 대해서 이해하였습니다. 퍼셉트론과 인공신경망에 대해서 그 개념을 자세히 이해하였고 추가적으로 인공지능에 대해서 전반적으로 정리해볼 수 있었습니다.
Re-finalized by 오혜준, 박건영, 이혜연, 김수민 [7주차]순전파, 역전파 총정리와 파이썬 구현
역전파
저는 본 강좌의 마지막 주차인 7주차에 신경망을 이해하는 것을 목표로 설정했습니다. 신경망을 이해하기 위해서는 역전파를 이해해야 했습니다. 역전파를 이해하기 위해 본 강좌의 강의를 듣고, 학우님들의 정리본을 참고했습니다. 학우님들의 정리 덕분에 역전파에 대한 이해를 완성할 수 있었습니다. 그럼 역전파에 대해 제가 이해한 내용을 정리하며 Re-Finalized 하겠습니다.
오차역전파법은 신경망에서 예측값과 관측값 사이의 오차를 최소화하기 위해 사용하는 대표적인 방법이다. 우리가 신경망 모델을 만드는 목적은 주어진 데이터 셋을 잘 판단하도록 하는 것이기 때문에 오차를 최소화해주는 과정인 오차역전파법은 굉장히 중요하다. 그럼 지금부터 오차역전파법의 알고리즘에 대해 설명하겠다.
9. 전처리 된 데이터를 학습데이터, 검증 데이터, test data로 나눈다. 이때 training data, 검증 데이터를 80%, test data를 20%로 설정한다.
10. 학습 데이터로부터 input variable, observed value를 입력한다.
11. 인공신경망의 가중치를 임의로 입력한다. 가중치는 활성화 함수인 sigmoid function를 사용하는 것이 대표적이다.
12. 입력 층에서 학습 데이터의 신호를 받으면, 가중치와 계산 후 은닉 층으로 전파되고, 다음 층으로 전파되어 출력층에서 해당하는 결과를 얻는다.
13. 예측 값과 관측 값 사이의 오차를 계산한다.
14. 오차를 최소화하기 위해 gradient descent method를 적용하여 3단계의 가중치를 update 한다.
15. 오차가 minimized 될 때까지 4~6 과정을 반복하여 신경망을 modeling 한다.
16. 남겨둔 20%의 test data를 이용하여 만든 neural network model이 잘 작동하는지 test 한다.
이것이 신경망 모델을 이해하기 위해 사용하는 오차역전파법이며, 이에 대한 구체적인 실습은 아래 오혜준, 박건영, 이혜연 학우님이 정리해주신 코드를 보면 쉽게 이해할 수 있다.
순전파(Feedforawrd)와 역전파(Backpropagation)의 개념
• 다층 퍼셉트론으로 학습을 한다는 것은, 최종 출력값과 실제값의 오차가 최소화 되도록 가중치(Weight)와 바이어스(Bias)를 계산하여 결정하는 것이다.
• 이는, 순전파(Feedforward)를 통해 최종 출력값과 실제값의 오차를 확인하고
• 역전파(Backpropagation)를 통해 최종 출력값과 실제값의 오차가 최소화 되도록 가중치(Weight)와 바이어스(Bias)를 업데이트하며 진행된다.
• 역전파 학습을 오차가 0에 가까워 질 때까지 반복한다.
• 예를 들어, 농구에서 자유투를 던지는 과정은 순전파(Feedforward)라고 할 수 있고, 던진 공이 어느 지점에 도착했는지를 확인하고 던질 위치를 수정하는 과정을 역전파(Backpropagation)이라고 할 수 있다.
예제 : 순전파
– 입력층 -> 은닉층 방향으로 이동하면서 각 입력에 해당하는 가중치 곱해짐
- 가중치 합으로 계산되어 은닉층 뉴런의 함수 값 입력, 최종 결과 출력
• 쉬운 설명을 위해 예제 신경망을 구성해보았습니다.
• Input값은 1개이고, Output 값은 2개, Hidden Layer 수는 2개인 작은 신경망입니다.
• 각 노드의 활성화함수는 Sigmoid Function을 사용했으며, Bias는 제외하였습니다.
• 초록색 값들은 처음 주어진 값들이고, 파란색 값들은 초기값을 바탕으로 계산한 값입니다.
• 처음 x1의 값은 0.5이고 W_10(0)은 0.15 이기 때문에, 둘을 곱한 0.075가 계산한 값으로 나온 것을 알 수 있습니다.
• 결과적으로 계산한 y1 값은 0.609 이지만, 실제값은 0.3 이어야하고
• y2값은 0.633이지만, 실제값은 0.9 인 것을 확인할 수 있습니다.
• y1은 감소하는 방향으로 개선해야하고, y2는 증가하는 방향으로 개선해야 한다는 것을 알 수 있습니다.
• Error 측정 방식은 MSE 방식을 사용했고, 역전파 학습 전 전체 Error(E_tot)는 0.083385 인 것을 알 수 있습니다.
•
• ((0.3-0.609)^2)/2 + ((0.9-0.633)^2)/2 = 0.083385
가중치 업데이트 공식
• 신경망의 각 가중치는 위 공식을 통해 업데이트됩니다.
• gradient는 오차를 해당 가중치로 미분한 값이며, 해당 가중치가 오차에 미치는 영향을 의미합니다.
• 따라서, 오차에 영향이 큰 가중치일수록 가중치 변화량이 커지게 됩니다.
예제 : 역전파
- 초기 가중치, weight 값은 주어지고 각각의 노드를 지날때마다 활성함수 적용
01
• 역전파 알고리즘을 적용할 때, 신경망의 파라미터들은 Output으로부터 가장 가까운 층부터 계산되며 업데이트 됩니다.
• 업데이트하고자 하는 파라미터가 오차에 미치는 영향은, 다음층의 파라미터가 오차에 미치는 영향을 사용하면서 진행되기 때문입니다.
• Output으로부터 가장 가까운 층에 위치한 weight는 w_10(1), w_11(1), w_20(1), w_21(1) 이며
• 아래 그램을 통해, w_10(1)이 전체 Error(E_tot)에 미치는 영향부터 계산해보겠습니다.
•
• w_10(1)이 E_tot에 미치는 영향은, E_tot를 w_10(1)로 미분한 값과 동일하며, 총 3개의 편미분 식으로 나타낼 수 있고, 각 편미분을 계산해 해당 가중치를 얼마나 변경해야 하는지 구할 수 있습니다.
• w_10(1)이 E_tot에 미치는 영향
• 
• a_20이 E_tot에 미치는 영향 : (0.3 - 0.609) * -1
•
•
• z_20이 a_20에 미치는 영향 : 0.609 * (1 – 0.609)
•
•
• w_10(1)이 z_20에 미치는 영향 : 0.518
• 
• 전체 계산 결과
•
• 계산 결과 w_10(1)이 E_tot에 미치는 영향은 0.0381이라는 것을 알 수 있습니다.
• 이 값을 아래 학습식에 넣으면 우리가 원하는 학습된 w_10(1) 값을 구할 수 있습니다.
• 학습률은 0.5로 지정했습니다.
• 
위 결과를 통해 결과에 영향을 많이 미치는 노드는 더 많은 오차를 받게 된다는 것을 알 수 있습니다.
위와 같은 방법으로 나머지 가중치 w_11(1), w_20(1), w_21(1) 가 E_tot에 미치는 영향을 계산할 수 있으며, 업데이트 할 수 있습니다.
02
• 위 예제에서는 Output으로부터 가장 가까운 층의 weight들을 계산해보았습니다.
• Output으로부터 두 번째 층에 위치한 weight는 w_10(0), w_11(0) 이며
• 아래 그림을 통해, w_10(0)이 전체 Error(E_tot)에 미치는 영향부터 계산해보겠습니다.
•
• w_10(0)이 E_tot에 미치는 영향은, E_tot를 w_10(0)로 미분한 값과 동일하며, 총 4개의 편미분 식으로 나타낼 수 있고, 각 편미분을 계산해 해당 가중치를 얼마나 변경해야 하는지 구할 수 있습니다.
• w_10(0)이 E_tot에 미치는 영향
• 
• a_10이 E_1 에 미치는 영향 : 0.0294
• 
•
•
• a_10이 E_2 에 미치는 영향 : -0.0328
• 

•
• z_10이 a_10에 미치는 영향 : 0.249
• 
• w_10(0)이 z_10에 미치는 영향 : 0.5
• 전체 계산 결과
• 
• 계산 결과 w_10(0)이 E_tot에 미치는 영향은 -0.00042이라는 것을 알 수 있습니다.
• 이 값을 아래 학습식에 넣으면 우리가 원하는 학습된 w_10(0) 값을 구할 수 있습니다.
• 학습률은 0.5로 지정했습니다.
• 
위와 같은 방법으로 나머지 가중치 w_11(0)가 E_tot에 미치는 영향을 계산할 수 있으며, 업데이트 할 수 있습니다.
위와 같은 역전파를 한 번 돌리는 것을 1 epoch라고 하며
epoch를 늘릴 수록 가중치가 계속 업데이트(학습)되면서 오차가 줄어들게 됩니다.
단순한 계층 구현하기
사과 쇼핑 예를 파이썬으로 구현하겠습니다. 여기에서 계산 그래프의 곱셈 노드를 'MulLayer', 덧셈 노드를 'AddLayer'라는 이름으로 구현하겠습니다.
1. 곱셈 계층
모든 계층은 forward()와 backward()라는 공통의 메서드를 갖도록 구현하겠습니다. forward()는 순전파, backward()는 역전파를 처리합니다.
곱셈 계층 구현
class MulLayer:
def __init__(self):
# 변수 x와 y초기화
self.x = None
self.y = None
def forward(self, x, y):
self.x = x
self.y = y
out = x * y
return out
def backward(self, dout):
# dout은 상류에서 넘어온 미분(dout)
dx = dout * self.y
# x와 y를 바꾼다.
dy = dout * self.x
return dx, dy
이 MulLayer를 사용해서 앞에서 본'사과 쇼핑'을 구현해보겠습니다
apple = 100
apple_num = 2
tax = 1.1
# 계층들
mul_apple_layer = MulLayer()
mul_tax_layer = MulLayer()
# 순전파
apple_price = mul_apple_layer.forward(apple, apple_num)
price = mul_tax_layer.forward(apple_price, tax)
#역전파
dprice = 1
dapple_price, dtax = mul_tax_layer.backward(dprice)
dapple, dapple_num = mul_apple_layer.backward(dapple_price)
2. 덧셈 계층
덧셈 계층 구현
class AddLayer:
def __init__(self):
pass # 덧셈 계층에서는 초기화가 필요 없습니다
def forward(self, x, y):
out = x + y
return out
def backward(self, dout):
dx = dout * 1 # 상류에서 내려온 미분을 그대로 하류로 흘립니다.
dy = dout * 1
return dx, dy
덧셈 계층과 곱셈 계층을 사용하여 사과 2개와 귤 3개를 사는 상황을 구현하겠습니다.
apple = 100
apple_num = 2
orange = 150
orange_num = 3
tax = 1.1
# 계층들
mul_apple_layer = MulLayer()
mul_orange_layer = MulLayer()
add_apple_orange_layer = AddLayer()
mul_tax_layer = MulLayer()
# 순전파
apple_price = mul_apple_layer.forward(apple, apple_num) # (1)
orange_price = mul_orange_layer.forward(orange, orange_num) #(2)
all_price = add_apple_orange_layer.forward(apple_price, orange_price) # (3)
price = mul_tax_layer.forward(all_price, tax) # (4)
# 역전파
dprice = 1
dall_price, dtax = mul_tax_layer.backward(dprice) # (4)
dapple_price, dorange_price = add_apple_orange_layer.backward(dall_price) # (3)
dorange, dorange_num = mul_orange_layer.backward(dorange_price) # (2)
dapple, dapple_num = mul_apple_layer.backward(dapple_price) # (1)
print(price) # 715
print(dapple_num, dapple, dorange, dorange_num, dtax) # 110, 2.2, 3.3, 165, 650
필요한 계층을 만들어 순전파 메서드인 forward()를 적절한 순서로 호출합니다. 그런 다음 순전파와 반대 순서로 역전파 메서드인 backward()를 호출하면 원하는 미분이 나옵니다.
-순전파 코딩과정
0단계 - 환경설정 - import
1단계 - 데이터 불러오기 및 구분하기 - pd.read_csv
2단계 - 대이터 탐색 및 전처리 - X_train / 255.0
3단계 - 모델 생성하기 - model = Sequential()
4단계 - 컴파일 생성 및 설정하기 - model.compile()
5단계 - 훈련 및 검증하기 - model.fit
6단계 - 예측하기 - model.prediction
7단계 - 결과 확인하기 - np.argmax
8단계 - 그래프 표현하기 – plt.imshow()
# 0. 환경설정
# 0-1. tensorflow 및 keras 라이브러리 불러오기
import tensorflow as tf
from tensorflow import keras
# 0-2. 기타 라이브러리 불러오기
import numpy as np
import matplotlib.pyplot as plt
# 0-3. 버전 확인하기
print(f"version of tensorflow: {tf.__version__}")
# 1. 데이터 불러오기 및 구분하기
# 참고: MNIST 패션 자료를 불러옵니다.
# 1-1. 데이터 불러오기
fashion_mnist = keras.datasets.fashion_mnist
# 1-2. 데이터 구분하기
(train_images, train_labels), (test_images, test_labels)= fashion_mnist.load_data()
# 1-3. 정답 이름 설정하기
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
# 2. 데이터 탐색 및 전처리
# 2-1. 데이터 탐색
# 2-1-1. 형태
train_images.shape, test_images.shape
# (60000, 28, 28), (10000, 28, 28)
train_labels.shape, test_labels.shape
# (60000,), (10000,)
# 2-1-2. 내용
train_images # 그림을 숫자로 표현함. 0~255 숫자가 담긴 28 × 28 개 픽셀 list.
train_labels # 정답을 의미함. 0~9 숫자가 담긴 배열 list.
# 2-1-3. 그림으로 보기
plt.figure()
plt.imshow(train_images[0])
plt.colorbar()
plt.grid(False)
plt.show()
# 2-2. 데이터 전처리
"""
목적: 배열 값 범위를 0~1 사이로 조정
"""
# 학습 이미지
train_images = train_images / 255.0
# 예측 이미지
test_images = test_images / 255.0
# 2-3. 데이터 포맷 확인
plt.figure(figsize=(10,10))
for i in range(25):
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(train_images[i], cmap=plt.cm.binary) # cmap: 흑백(binary)을 넣으라는
의미
plt.xlabel(class_names[train_labels[i]])
plt.show()
# 3. 모델 생성하기
"""
총 3개의 층을 생성합니다.
input layer는 28 × 28 픽셀 이미지를 일렬로 나열할 수 있도록 노드를 형성합니다.
hidden layer는 128개의 노드로 구성됩니다.
output layer는 10개 노드로 구성됩니다.
"""
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
# input layer: 28 × 28 픽셀 이미지를 일렬로 나열
keras.layers.Dense(128, activation="relu"),
# hidden layer: 28개의 노드 생성
keras.layers.Dense(10, activation="softmax")
# output layer: 10개 노드 생성
])
# 4. 컴파일 생성 및 설정하기
"""
목적: 모델 설정
"""
model.compile(
optimizer="adam", # 모델 업데이트 방법 설정
loss="sparse_categorical_crossentropy", # 오차 측정 방법 설정
metrics=["accuracy"] # 정확도 측정 방법 설정
)
# 5. 모델 훈련 및 검증하기
# 5-1. 모델 훈련하기
model.fit(train_images, train_labels, epochs=5) # 이미지, 정답, 반복
# 5-2. 검증하기
test_loss, test_accu = model.evaluate(test_images, test_labels, verbose=2)
print(f"테스트 정확도: \n {test_accu}")
# 6. 예측하기
predictions = model.predict(test_images)
# 7. 테스트 결과 확인하기
predictions[0] # 10개 list 배열이 나타남. 이미지가 9개 정답이 될 확률을 나타냄
prediction_result = np.argmax(predictions[0]) # 확률이 최대인 수를 나타냄.
class_names와 대응하여 결과를 표현함.
label_result = test_labels[0]
if prediction_result == label_result:
print("예측 성공")
else:
print("예측 실패")
# 8. 그림 표현하기(왼쪽 그림)
def plot_image(i, predictions_array, true_label, img):
# 8-1. 표 만들기
predictions_array, true_label, img = predictions_array[i], true_label[i], img[i]
plt.grid(False)
plt.xticks([])
plt.yticks([])
# 8-2. 이미지 생성하기
plt.imshow(img, cmap=plt.cm.binary)
# 8-3. 최대 예측값 뽑기
predicted_label = np.argmax(predictions_array)
# 8-4. 색상 넣기
if predicted_label == true_label:
color = "blue"
else:
color = "red"
# 8-5. xlabel 설정하기
plt.xlabel("{} {:2.0f}% ({})".format(class_names[predicted_label],
100*np.max(predictions_array),
class_names[true_label]),
color=color)
# 9. 그래프 표현하기(오른쪽 그림)
def plot_value_array(i, predictions_array, true_label):
predictions_array, true_label = predictions_array[i], true_label[i]
plt.grid(False)
plt.xticks([])
plt.yticks([])
thisplot = plt.bar(range(10), predictions_array, color="#777777")
plt.ylim([0,1])
predicted_label = np.argmax(predictions_array)
thisplot[predicted_label].set_color('red')
thisplot[true_label].set_color('blue')
참고자료
https://blog.naver.com/jevida/221854140581
- 역전파의 개념과 그 원리에 대해서 자세히 이해할 수 있었습니다. 추가로 순전파에 대해서도 공부할 수 있었습니다. 두 개념을 이해한 후 이를 실습으로 진행해보는 것에 대해 어려움을 느꼈고 막막했었는데 학우분들께서 정리해주신 것을 보고 그 순서와 활용을 이해할 수 있었습니다. 다만 아직 제 스스로 코드를 작성하는 단계까진 도달하지 못한 것 같습니다.
40. Tensorflow의 fashion_MNIST 데이터셋을 이용한 실습
[7주차] Tensoflow의 fashion_mnist를 이용한 실습
작성자 : 이시원(2021####15)작성일 : 8월 18일 오후 3:25조회수 : 23
tensorflow에서 제공해주는 다양한 MNIST들 중에서 fashion_mnist를 이용하여 실습을 진행해보았습니다.
실습을 진행하면서 어떠한 방식으로 layer를 구성할지에 대해서 3개의 층으로 구성하여, 28*28개의 노드를 가진 입력층 128개의 노드를 가진 hidden층, 나올 수 있는 10개의 결과값으로 구성된 output 노드를 구성하였습니다.
이를 토대로 MNIST에서 Batch_size를 지정하여주고 model을 몇 번 반복 학습시킬지에 대해서 epochs=5로 값을 주었고, 학습 결과에서의 손실과 정확도는 아래와 같이 구해졌습니다.
Loss 0.3591095805168152 and Accuracy 0.8715999722480774 on the dataset
이후 epochs=10으로 횟수를 올리고 model을 학습시킨후에 결과는 아래와 같이 구해졌습니다.
Loss 0.3340727686882019 and Accuracy 0.8823000192642212 on the dataset
이 과정에서 실제로 데이터를 통해서 간단하게 나마 model를 구축해봄으로써, 제대로 인공지능과 머신런닝과 같은 학문에서 출발점에 서게 되었다는 느낌을 받게 되었습니다.
tensorflow 튜토리얼과 udacity에서 간략하게 들었었던 인공신경망과 관련된 강의에서 다루어진 코드를 참고하여 수정을 거쳐 model을 구성하였고, udacity에서 작성되었던 코드에 표시되어있던 MIT License 등을 지키고자 하단에 라이센스 출처를 표기하였습니다.
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import PIL.Image as Image
import pandas as pd
import tensorflow as tf
import tensorflow_hub as hub
from tensorflow.keras import layers
import tensorflow_datasets as tfds
from tensorflow.keras.preprocessing.image import ImageDataGenerator
tfds.disable_progress_bar()
import math
import matplotlib.pyplot as plt
import numpy as np
import logging
#model=load_model("")
logger = tf.get_logger()
logger.setLevel(logging.ERROR)
tf.debugging.set_log_device_placement(True)
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
tf.config.experimental.set_memory_growth(gpus[0], True)
except RuntimeError as e:
# 프로그램 시작시에 메모리 증가가 설정되어야만 합니다
print(e)
def normalize(images, labels):
images=tf.cast(images, tf.float32)
images/=256
return images,labels
Batch_size = 32
epochs = 10#원하는 값을 지정해주세요
fashion_dataset, output = tfds.load('fashion_mnist',as_supervised=True,with_info=True)
train_dataset, test_dataset = fashion_dataset['train'], fashion_dataset['test']
num_train_example = output.splits['train'].num_examples
num_test_example = output.splits['test'].num_examples
output_names = ['T-shirt/top','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot'];
train_dataset = train_dataset.map(normalize)
test_dataset = test_dataset.map(normalize)
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28,28,1)),
tf.keras.layers.Dense(128,activation=tf.nn.relu),
tf.keras.layers.Dense(10,activation=tf.nn.softmax)
])
model.compile(
optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(),
metrics=['accuracy']
)
train_dataset = train_dataset.cache().shuffle(num_train_example).batch(Batch_size)
test_dataset = test_dataset.cache().batch(Batch_size)
model.fit(train_dataset,epochs=epochs)
test_loss, test_accuracy = model.evaluate(test_dataset)
print("Loss {} and Accuracy {} on the dataset".format(test_loss,test_accuracy))
참고자료: https://www.tensorflow.org/tutorials/keras/classification?hl=ko
https://colab.research.google.com/github/tensorflow/examples/blob/master/courses/udacity_intro_to_tensorflow_for_deep_learning/l03c01_classifying_images_of_clothing.ipynb#scrollTo=_ckMIh7O7s6D
Licensed under the Apache License, Version 2.0 (the "License");
#@title Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#@title MIT License
#
# Copyright (c) 2017 François Chollet
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
이전다음
2개의 댓글
이상구(LEE SANGGU)8월 18일 오후 3:30
1학년 이시원 씨 (2021), 이제 실제로 데이터를 통해서 model를 구축해봄으로써, 인공지능과 머신런닝과 같은 학문의 출발점에 서게 되었다는 느낌을 가지게 되었다니 자랑스럽습니다^^
이상구(LEE SANGGU)8월 19일 오후 5:42
[Final OK by SGLee]
Comment: 이 실습을 진행하면서 스스로가 모델을 구성해볼 수 있다는 자신감을 가지게 되었습니다. 이와 더불어 인공지능과 머신런닝 알고리즘의 기초 부분에 대해서 학습하였다는 확인을 거치는 과정이 되었다고 생각하며, 위 학문의 출발점에 위치하게 되었다는 확신을 받았습니다.
41. 제곱오차에서 y_i와 y_i^의 차이에 대한 질의응답
Re-Finalized by 이상원,김석하, 임혜림, 이시원, 이지용, 박정현, 안은선 ([7주차] 오차역전파법 정리 및 질문)
작성자 : 이상원(2016####99)작성일 : 8월 18일 오후 6:54조회수 : 43
[7주차] 오차역전파법 정리 및 질문, 정답 과 comment
작성자 : 임혜림(2021####86)작성일 : 8월 17일 오후 6:06
조회수 : 33
제곱 오차에서 y_i에서 빼는 y_i^는 뭐를 뜻하는건가요?
E43C4F09-72CC-4363-AFFA-17BF6BCEE8B7.png
이전
다음
5개의 댓글
이시원(2021####15)8월 17일 오후 6:23
"예를 들어, 각 계층에서 입력신호 x_i(i=1,2,3...,N)를 받아 미리 부여된 가중치와 계산 후 주어진 활성화 함수로부터 출력된 값을 y_i^라 하고, 실제 정답은 y_i라 하자. 그러면 제곱 오차(squared error)는 다음과 같이 주어진다."위 문장을 보면, y_i^는 입력신호 x_i에 대해서 출력된 값을 의미하는 것 같습니다.문장 발췌: http://matrix.skku.ac.kr/math4ai/part4/
이지용(2021####83)8월 17일 오후 6:33
y_i-y_i^는 출력값의 편차이며 y_i는 원래 의도했던 정답인 관측값, y_i^는 오차역전파법 하기 전에 출력층으로 계산괴어 나온 값인 예측값을 의미합니다. 그래서 제곱오차는 편차의 제곱을 다 더하고 둘로나눈것이므로 E=∑e_i²=∑||y_i-y_i^||²로 나타내는 듯 합니다.
박정현(2018####21)8월 17일 오후 6:53
y_i^ 은 Y hat이라고 불리는데 ML/DL/Statistical learning 등에서 모델에 의해 예측된 예측값을 뜻하는 기호입니다.참고로 통계적으로는 모수에 hat이 붙으면 모수에 대한 추정량을 말합니다. 보통 모델 학습 시 모델 적합도를 보기 위해 Train set 에 대하여 training error를 구하곤 하는데 이때 자주 쓰이는 지표가 편차제곱합입니다. 다시말해 Training error 는 train data로 모델학습을 시킬 때 train_X과 train_Y로 나누어 학습시킨 후 train_X에 대해 적합된 값(Y hat)과 train_Y간 편차제곱의 합을 구한 것이 되겠네요. Y hat 자체는 training set의 X와 test set의 X에 대한 예측값에 모두 적용가능한 기호입니다.
김석하(2017####02)8월 18일 오전 00:44
확통에서 나오는 개념인데, 실험과목을 들어보셨는지 모르겠지만 제곱오차에서 y_i는 저희가 실제로 측정한 값이고, y_i^ (y hat이라고 부릅니다)는 이론값을 원합니다. 이렇게 생각하시면 이해가 편할거 같네요. 오차율=|이론값 - 실험값|/이론값 *100%에서 나오는 변수들과 대응됩니다
안은선(2020####19)8월 18일 오전 00:46
강의를 참고하면 y_i^은 미리 부여된 가중치와 계산 후 주어진 활성화 함수로부터 출력된 값이라고 합니다.쉽게 말해서 y_i은 실제 정답을 의미하고 y_i^은 신경망의 출력값, 추정값이라고 생각하시면 됩니다!
finalized by 이상원; 제가 이해한 큰틀과 세부적인걸 받아들이는 과정을 설명하려고 합니다. 먼저 해당 답변은 이시원 학우님이 말씀하신 y_i^는 출력된 값이고 y_i는 실제 정답 (예측값)입니다.
저는 결국 오차역전파 과정이 딥러닝의 한 과정임으로 이해하면 쉽다고 생각합니다. 딥러닝은 말그대로 ‘학습’, 즉 코드를 학습시켜 다른 데이터에 같은 코드(과정)을 적용했을 때
올바른 예측값을 산출할 수 있게 하는 일종의 함수를 코드가 스스로 만들어가는 과정이라 이해했습니다. 질문의 y_i^와 y_i는 제곱 오차(squared error)를 위해 존재하고
곧 경사하강법(오차역전파)과 연결되어 함수로 치면 정의역과 치역이 올바르게 대응되도록 조정해가는 과정입니다. 저번에 PCA실습에서 설명했던 야구통계 데이터로 승률을
예측하는 과정을 추후 올려 딥러닝의 개념과 함께 한번 더 정리 해보겠습니다.
이전다음
1개의 댓글
이상구(LEE SANGGU)8월 18일 오후 11:40
[Final OK by SGLee]
Comment: 제곱오차에 대해서 어떻게 정의되어져 있고, 그 구성요소들이 뜻하고 있는 바가 무엇인지 정확히 알게 되었으며, 제곱오차가 어느 경우에 쓰이게 되는 것인지 학우분들의 질의응답 과정을 통해서 학습할 수 있었습니다.
42. 신경망에 대한 요약과 경사하강법을 구현하는 과정에서의 시행착오 정리
[7주차] Re-finalized by 이지용, 김석하, 김민서, 류재헌, 권서우, 이혜연, 장지원, 이시원, 김은진 ([7주차] 신경망 요약과 실습)
작성자 : 김은진(2020####41)작성일 : 8월 19일 오후 4:02조회수 : 19
이상구(LEE SANGGU)8월 19일 오후 5:33
[Final OK by SGLee]
정현목(2016####80)8월 20일 오전 11:44
학우님들의 글을 통해서 인공신경망과 오차전역법에 대해서 잘 이해할 수 있었습니다. 감사합니다!
인공신경망과 오차역전파법
2015311986 류재헌
본 수업의 마지막 주제가 될 인공신경망과 오차역전파법에 대한 보고서입니다. 인공신경망의 개요는 다음과 같습니다. 우리가 지금까지 프로그래밍을 통해서 정답(결과가 되는 벡터)를 찾아냈다면, 인공신경망은 정답과 데이터를 이용한 학습을 통해 규칙(연산의 기반이 되는 행렬)을 찾아내는 것입니다. 예를 들어서, (y1, y2) = (x1, x2) * ([w11, w12], [w21, w22])라는 공식이 있을 때, 기존에는 (y1, y2)를 찾기 위해 프로그래밍을 하였지만 인공신경망에서는 ([w11, w12], [w21, w22])라는 결과를 얻어내기 위한 과정을 역으로 찾는다는 뜻입니다.
<그림 1> 인공신경망의 원리, MATH4AI
사람의 신경이 역치 이상의 자극이 주어져야 반응하는 것처럼, 인공신경망 역시 다수의 입력신호에 가중치를 곱한 값을 모두 더해서 그 총합이 정해진 임계값(역치)를 넘어야 1을 출력(반응)합니다. 그렇지 않을 경우에는 0을 출력하는데, 이러한 출력을 결정하는 함수를 활성화 함수라고 합니다. 강의에서는 Heviside function과 sigmoid function이 소개되었는데, Heviside function의 경우 x=0인 구간에서 미분이 불가하여 값을 업데이트하는데 문제가 생겨 잘 쓰이지 않습니다. 활성화 함수에는 여러 종류가 있는 것을 조사하였지만, 본 수업에서는 둘 중 sigmoid fuction을 더 자주 사용한다는 정도에서 내용을 마치겠습니다.
+ 최적의 가중치를 사람이 일일히 짜고 입력한다는 것은 대단히 비효율적이고, 비현실적입니다. 하지만 인공신경망 (이하 신경망)은 입력값이 주어지면 최적의 가중치를 컴퓨터 스스로 찾아냅니다.
[신경망에서의 활성화 함수]
융합생명공학과 2020 김은진
그림1. 인공신경망
- 신경망을 구성하는 은닉층(Hidden Layer)은 필요에 따라 인간이 임의로 늘릴 수 있는 노드층이다. 은닉층의 깊이, 즉 개수와 같은 은닉층의 노드 수는 인간이 직접 정해주어야 한다.
- 편향 : 가중치의 일종으로 각각의 노드가 얼마나 쉽게 임계값을 넘기느냐를 좌지우지하는 변수
- 활성화 함수 : 입력신호의 총합을 입력받아 출력신호로 변환해주는 함수
- 신경망에서 활용하는 활성화 함수는 시그모이드 (sigmoid) 함수. ‘S자 모양’이라는 뜻
실행하게 되면 아래 장지원 학우님께서 첨부하신 그래프를 확인할 수 있다. Simoid는 x축에 대입되는 값 하나하나의 y 출력값이 달라진다. 0을 기준으로 출력값이 0 또는 1로 정해지는 계단함수와는 매우 다름을 볼 수 있다.
+ 신경망에서 사용하는 활성함수에는 ReLu 함수가 있다. 렐루함수는 0 이하의 값은 0으로 출력하고, 이상의 값은 x값 그대로 출력이 된다. 아래의 그림이 바로 렐루함수를 시각화 한 것이다.
- 간단한 신경망 구현 (흐름 이해)
#
def init_network(): ###빈 딕셔너리 생성, 3개의 가중치, 편향 배열
network={}
network['w1']=np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
network['b1']=np.array([0.1,0.2,0.3])
network['w2']=np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
network['b2']=np.array([0.1,0.2])
network['w3']=np.array([[0.1,0.3],[0.2,0.4]])
network['b3']=np.array([0.1,0.2])
return network ### 채워진 딕셔너리는 리턴
def forward(network,x): ### 생성된 딕셔너리를 변수로 활용, 가중치와 편향의 총합을 구함
w1,w2,w3=network['w1'],network['w2'],network['w3']
b1,b2,b3=network['b1'],network['b2'],network['b3']
neuron1=np.dot(x,w1)+b1
activation1=sigmoid(neuron1)
neuron2=np.dot(activation1,w2)+b2
activation2=sigmoid(neuron2)
neuron3=np.dot(activation2,w3)+b3
print_result=neuron3 ### 3번 반복->총 3층 신경망이 쌓임
return print_result
network=init_network() ###init_network함수를 network 변수에 할당, x에 입력값 배열 할당
x=np.array([1.0,0.5])
y=forward(network,x)
print(y)
[활성화 함수]
컴퓨터교육과 장지원
- 경사 하강법이 잘 작동할 수 있도록 다층 퍼셉트론 구조에 중요한 변화를 주는데, 이를 활성화 함수라 한다.
- 활성화 함수의 주 목적은, 문제 해결을 위해 도입된 것
- 선형 변환을 해도 비선형 문제는 해결하지 못함, (예: 선형회귀와 로지스틱회귀의 차이점)
- 선형변환에 비선형을 주는 것이 활성화 함수이며, 다만 어떻게 줄 것인지에 따라 종류가 나눠짐
def sigmoid(z):
return 1 / (1 + np.exp(-z))
def relu(z):
return np.maximum(0, z)
def derivative(f, z, eps=0.000001):
return (f(z + eps) - f(z - eps))/(2 * eps)
z = np.linspace(-5, 5, 200)
plt.figure(figsize=(11,4))
plt.subplot(121)
plt.plot(z, np.sign(z), "r-", linewidth=1, label="Step")
plt.plot(z, sigmoid(z), "g--", linewidth=2, label="Sigmoid")
plt.plot(z, np.tanh(z), "b-", linewidth=2, label="Tanh")
plt.plot(z, relu(z), "m-.", linewidth=2, label="ReLU")
plt.grid(True)
plt.legend(loc="center right", fontsize=14)
plt.title("Activation functions", fontsize=14)
plt.axis([-5, 5, -1.2, 1.2])
plt.subplot(122)
plt.plot(z, derivative(np.sign, z), "r-", linewidth=1, label="Step")
plt.plot(0, 0, "ro", markersize=5)
plt.plot(0, 0, "rx", markersize=10)
plt.plot(z, derivative(sigmoid, z), "g--", linewidth=2, label="Sigmoid")
plt.plot(z, derivative(np.tanh, z), "b-", linewidth=2, label="Tanh")
plt.plot(z, derivative(relu, z), "m-.", linewidth=2, label="ReLU")
plt.grid(True)
#plt.legend(loc="center right", fontsize=14)
plt.title("Derivatives", fontsize=14)
plt.axis([-5, 5, -0.2, 1.2])
save_fig("activation_functions_plot")
plt.show()
- 하이퍼폴릭 탄젠트 함수 : tanh(z)=2σ(2z)−1tanh(z)=2σ(2z)−1. 로지스틱 함수와 같은0~1사이이고, 출력 범위는-1~1사이임
- ReLU 함수 : ReLU(z)=max(0,z)ReLU(z)=max(0,z). 연속적이지만,z=0z=0에서 미분 가능하지 않음.z<0z<0일 경우에는 0이다. 그러나, 실제로 잘 작동하고 계산 속도가 빠르다는 장점이 있어 기본 활성화 함수가 됨.
<그림 2> sigmoid fuction의 성질, 후에 제곱오차를 편미분 할 때 쓰이게 된다. MATH4AI
앞에서도 언급했듯이, 우리는 입력값과 정답을 알고 있는 데이터셋에서 행렬에 해당하는 신경망의 가중치를 찾을 것입니다. 이 때 가중치가 얼마인지 모르기 때문에, 임의로 가중치를 부여한 후 예측값-정답간의 오차, 입력값-예측값의 오차를 줄이는 방향으로 가중치를 갱신해 나갑니다. 이러한 방법을 오차 역전파법이라고 합니다. 오차 역전파법은 Part2에서 배운 경사하강법을 이용합니다.
<그림 3> 경사하강법의 공식, MATH4AI
경사하강법을 이용한 가중치를 구하는 과정은 아래와 같습니다.
1. 임의의 가중치로 계산된 출력과 정답과의 차이인 출력층과 은닉층 사이의 오차를 구함
2. 제곱오차를 편미분해 경사하강법을 적용하면, 은닉층-출력층 사이의 가중치가 갱신되고 모든 가중치를 갱신(행렬 w를 갱신)할 수 있음
3. 오차로부터 가중에 비례한 오차인 error_H를 계산하여, 은닉층과 입력층 사이의 오차를 추정
4. 경사하강법을 적용해 입력층과 은닉층 사이의 모든 가중치를 갱신
이지용 학우님이 열린게시판에 올리신 신경망 요약과 실습을 읽고, 은닉망의 에러를보충하여 Sage 코드를 작성하고자 하였으나 sigmoid fuction의 기능인 임계값을 넘어서는 값에 대한 값의 출력 유무를 설정하지 못해 제대로 된 코드 구현에 실패했습니다.
<그림 4, 5> Sage 코드를 통해 구현해본 인공신경망의 알고리즘
결과값을 보시면 알겠지만, 은닉망 – 결과값의 오차까지는 구하는 것에 성공했으나 이것을 통해서 올바른 입력값 – 은닉망의 가중치를 구하는 데 실패하여 후 10번의 시도에는 이런 값이 나오게 되었습니다. 의심하는 부분은 아래와 같습니다.
1. 정확한 공식을 대입하지 않았다
공식을 보면, 편미분의 공식에 -가 붙어있는 것을 확인하실 수 있으며, 경사 하강법의 공식에 이것을 대입하면 w_new = w_old + α(t1-y1)y1(1-y1)x1인 것을 확인할 수 있습니다. 하지만 -가 아닌 +를 대입하는 경우에 결과가 전혀 다르게 나와서, 이것에 대해서 제가 잘못 알고 있는 것은 아닌지에 대해서 의심했습니다.
2. 오차를 구하는 과정에서 문제가 있었다
오차를 구하는 알고리즘이 잘못되었을 가능성이 있습니다. 은닉망의 오차를 구하고 그 오차를 활용해서 가중치를 구한 뒤, 입력값에 가중치를 곱해 검산 과정을 거쳤습니다. 오차가 잘못되었기에 두 번째의 반복문에 오류가 생겼을 수 있습니다.
3. 임의의 가중치를 제대로 설정하지 못했다
이지용 학우님도 언급하신 부분이지만, 결과값의 벡터가 초기 예측값과 너무 멀리 두면 에러가 나온다고 하셨습니다. 임의의 가중치를 제대로 설정했지 못하여서 이러한 값이 나왔을 수 있습니다.
이렇게 3가지의 가능성을 두고, 오류를 수정하려 했지만 해결하지 못하였습니다. 아래는 원본 코드와, 이지용 학우님의 아이캠퍼스의 게시글을 첨부하겠습니다.
input_size = 3 #입력값 개수
hide_size = 3 #은닉층 개수
output_size = 3 #결과값 개수
error_hide_size = 3 #은닉층 에러 개수
times = 10
input = vector([-2, 3, 1])
hide = vector([1.25091098249, -0.156363872811, 1.87636647373])
A = vector([1,0,2]) #의도할 관측값
w = matrix([[1.0, 0.0 ,0.0],[0.0, 1.0, 0.0],[0.0, 0.0, 1.0]])
output = hide*w
for k in range(0,times):
for i in range(0,hide_size):
for j in range(0,output_size):
w[i,j] = w[i,j] - 0.1*hide[i]*(A[j]-output[j])*output[j]*(1 - output[j])
output=hide*w
print (k,'times: ', output)
error_0 = w[0,0]*(A[0]-output[0])+w[0,1]*(A[1]-output[1])+w[0,2]*(A[2]-output[2])
error_1 = w[1,0]*(A[0]-output[0])+w[1,1]*(A[1]-output[1])+w[1,2]*(A[2]-output[2])
error_2 = w[2,0]*(A[0]-output[0])+w[2,1]*(A[1]-output[1])+w[2,2]*(A[2]-output[2])
print(error_0, error_1, error_2)
error_hide = vector([error_0, error_1, error_2])
for k in range(0,times):
for i in range(0,input_size):
for j in range(0,hide_size):
w[i,j] = w[i,j] - 0.1*input[i]*error_hide[i]*hide[j]*(1 - hide[j])
hide=input*w
print (k,'times: ', hide)
hide = input * w
output = hide * w
print(output)
코드 해결 시도 및 새로 발견한 문제점
이시원
먼저 학우님이 실습하셨던 코드를 보고 수정을 해 나가고자 시도하였으나, 실패하여 그동안 시도하였던 방안과 그 결과들을 기록하겠습니다.
1. 말씀해주셨던 의심되는 요인 중 1번에 해당하는 -가 아닌 +를 대입하는 방안에 대해서는 앞서서 이지용 학우님이 실습해주신 내용에서 변경하여도 값이 아래와 같이 변하는 점을 보아 -로 유지하는 것이 맞다고 판단하였습니다.
0 times: (1.36116483742133, -0.156363872811000, 1.87636647373200)
1 times: (1.60973539119611, -0.156363872811000, 1.87636647373200)
2 times: (2.44758358081284, -0.156363872811000, 1.87636647373200)
3 times: (9.62805344424904, -0.156363872811000, 1.87636647373200)
4 times: (1013.06983686480, -0.156363872811000, 1.87636647373200)
5 times: (1.45274264912235e9, -0.156363872811000, 1.87636647373200)
6 times: (4.29233979578479e27, -0.156363872811000, 1.87636647373200)
7 times: (1.10715982969607e83, -0.156363872811000, 1.87636647373200)
8 times: (1.90002360417023e249, -0.156363872811000, 1.87636647373200)
9 times: (9.60295789087521e747, -0.156363872811000, 1.87636647373200)
2. error-hide을 곱해주는 과정에서 입력층의 i번째 노드로부터 hidden층의 j번째 노드로 간다고 할때 j번째 노드에서 전파된 오차이므로 j가 입력되어야 된다고 판단하였고, 이 부분에 대하여 수정을 거쳤습니다.
3. input층의 노드와 hidden층의 노드를 이어주는 가중치와 hidden층과 output층을 이어주는 노드의 가중치가 분리되지 않고 연산되고 있었습니다. 때문에 이 부분을 수정하였습니다.
input_size = 3 #입력값 개수
hide_size = 3 #은닉층 개수
output_size = 3 #결과값 개수
error_hide_size = 3 #은닉층 에러 개수
times = 10
input = vector([-2, 3, 1])
hide = vector([1.25091098249, -0.156363872811, 1.87636647373])
A = vector([1,0,2]) #의도할 관측값
w = matrix([[1.0, 0.0 ,0.0],[0.0, 1.0, 0.0],[0.0, 0.0, 1.0]])
w2 = matrix([[1.0, 0.0 ,0.0],[0.0, 1.0, 0.0],[0.0, 0.0, 1.0]])
output = hide*w
for k in range(0,times):
for i in range(0,hide_size):
for j in range(0,output_size):
w[i,j] = w[i,j] - 0.1*hide[i]*(A[j]-output[j])*output[j]*(1 - output[j])
output=hide*w
print (k,'times: ', output)
error_0 = w[0,0]*(A[0]-output[0])+w[0,1]*(A[1]-output[1])+w[0,2]*(A[2]-output[2])
error_1 = w[1,0]*(A[0]-output[0])+w[1,1]*(A[1]-output[1])+w[1,2]*(A[2]-output[2])
error_2 = w[2,0]*(A[0]-output[0])+w[2,1]*(A[1]-output[1])+w[2,2]*(A[2]-output[2])
print(error_0, error_1, error_2)
error_hide = vector([error_0, error_1, error_2])
for k in range(0,times):
for i in range(0,input_size):
for j in range(0,hide_size):
w2[i,j] = w2[i,j] - 0.1*input[i]*error_hide[i]*hide[j]*(1 - hide[j])
hide=input*w2
print (k,'times: ', hide)
hide = input * w2
output = hide * w
print(output)하지만 이 경우에도 마찬가지로 답이 엉뚱한 방향으로 계산되기 시작했습니다.
4. step-size부분에서 오류가 발생하고 있을 수도 있다는 생각에 step-size를 0.05, 0.01로 수정하여 계산해보았습니다. 해당 경우에는 값이 변화하는 속도는 느려졌지만, 정답을 향해가지 않는다는 점은 동일하였습니다.
5. 입력층에서 hidden층 사이의 가중치, hidden층에서 출력층 사이의 가중치를 번갈아가며 계산해보고자 했습니다.
input_size = 3 #입력값 개수
hide_size = 3 #은닉층 개수
output_size = 3 #결과값 개수
error_hide_size = 3 #은닉층 에러 개수
times = 10
data = vector([-2, 3, 1])
A = vector([1.0,0.0,2.0]) #의도할 관측값
w = matrix([[1.0, 0.0 ,0.0],[0.0, 1.0, 0.0],[0.0, 0.0, 1.0]])
w2 = matrix([[1.0, 0.0 ,0.0],[0.0, 1.0, 0.0],[0.0, 0.0, 1.0]])
learning_rate = 0
for k in range(0,times):
hide = data*w2
print(hide)
output = hide*w
error=vector([A[0]-output[0],A[1]-output[1],A[2]-output[2]])
error_hide = w*error
print(error_hide)
learning_rate = output.norm()
for i in range(0,hide_size):
for j in range(0,output_size):
w[i,j] = w[i,j] + learning_rate*hide[i]*(A[j]-output[j])*output[j]*(1 - output[j])
learning_rate = hide.norm()
for i in range(0,input_size):
for j in range(0,hide_size):
w2[i,j] = w2[i,j] + learning_rate *data[i]*error_hide[j]*hide[j]*(1 - hide[j])
print(w)
print(w2)
print(hide)
print (k,'times: ', output)
hide = data*w2
output = hide*w
print(output)
하지만 마찬가지로 결과값은 정답으로 향하지 않았습니다.
하여 종합적으로 여러가지 시도를 해보았으나, 오류를 발견하지는 못하였으나, 가중치를 설정하고 계산하는 과정에서 오류를 범하였을 것으로 예상하게 되었습니다. 정확한 오류를 해결하지 못하였더라도, 다양한 방법으로 오류를 잡아내기위해 인공신경망에 대해서 이해도를 높여갈 수 있었습니다.
[7주차] 신경망 요약과 실습
작성자 : 이지용(2021####83)작성일 : 8월 17일 오후 9:07
조회수 : 34
신경망은 정답과 데이터를 이용해 컴퓨터가 규칙을 도출하도록 하는 것입니다.
신경망은 입력층, 중간층 (또는 은닉층), 출력층으로 구성됩니다. 입력층에 데이터를 넣으면 입력된 값에 가중치가 곱해지고 합산되어 결과값이 출력됩니다. 예를 들어 입력층에 데이터 [x1,x2,x3,x4]가 입력되고 은닉층에 [y1,y2]라는 값이 나오면 이는 데이터의 가중치가 곱해지고 합산된 값입니다. 행렬로 표현하면 다음과 같습니다.
[y1,y2] =[x1,x2,x3,x4]*[[w11,w21],[w12,w22],[w13,w23],[w14,w24]]
활성화함수는 뉴런에서 임게값 이상의 자극을 줘야만 반응하는 것처럼 노드(입력신호와 가중치의 총합)가 임계값을 넘으면 1, 아니면 0을 출력하는 함수입니다.
활성화함수는 대표적으로 sigmond 함수 f(x)=1/(1+e^(-x))가 있는데 이는 f'(x)=f(x)(1-f(x))라 컴퓨터 계산이 편하기 때문입니다. 이 함수를 이용하면 출력되는 heaviside function(step function) 은 H(x)={0 (x<0), 1 (x≥0) 입니다.
활성화함수가 일차함수인 경우에는 y=wx+b로 나타낼수 있는데, 여기서 wx>θ(지정된입계값)이면 1을 출력합니다.
신경망에서 오차를 줄이기 위해서는 가중치를 갱신해야 하는데 이때 오차역전파법을 이용합니다.
오차역전파법은 여덟단계로 나눌수 있습니다.
우선 처리전 데이터를 학습데이터와 검증데이터(80%), 테스트데이터(20%)로 나눕니다.
두번째로 입력값과 의도할 결과값인 관측값을 입력합니다.
세번째로 가중치를 임의로 설정합니다.
네번째로 입력값과 가중치를 곱해 합산하여 출력층에 나오는 값인 예측값을 얻습니다.
다섯번째로 예측값과 관측값사이 오차를 계산합니다.
여섯번째로 경사하강법(wij=wij - a*ϑE/ϑwij)을 이용해 가중치를 업데이트합니다.
일곱번째는오차가 최소화 되겠끔 위 단계를 반복하는 것입니다.
마지막으로는 남겨둔 테스트데이터로 신경망을 테스트하는 것입니다.
이 오차 역전파법으로 제곱오차 E=1/2*∑(i=1->n) ei² = 1/2*∑(i=1->n) ||yi-yi^||²를 줄여나갑니다. yi는 예측값, yi^는 관측값입니다.
그리고 wij(새로운값)=wij(이전값) - a*ϑE/ϑwij를 반복하며 오차가 최소가 되겠끔 하는것이 오차역전파법입니다.
예를 들어 [[w11,w21],[w12,w22]]*[x1,x2]=[y1,y2]에서 f가 sigmond 함수이면 ϑE/ϑw11= ⊿1/2*{(y1_의도한값 - f(x1w11+x2w12))² + (y2_의도한값 - f(x1w21+x2w22))²}/⊿w11 = -{f(x1w11+x2w12)}' {y1_의도한값 - f(x1w11+x2w12)} = -x1*f(x1w11+x2w12)(1-f(x1w11+x2w12))(y1_의도한값 - f(x1w11+x2w12)) = -x1(y1_의도한값 - y1)y1(1 - y1)입니다.
마찬가지로 ϑE/ϑw12=-x2(y1_의도한값 - y1)y1(1 - y1), ϑE/ϑw21=-x1(y2_의도한값 - y2)y2(1 - y2), ϑE/ϑw22=-x2(y2_의도한값 - y2)y2(1 - y2) 됩니다.
그리고 나서 인공신경망 실습을 해보았습니다. 아래 코드를 이용해서 sage에서 랜덤으로 입력값과 초기 가중치값, 예측값을 산출했습니다.
input_size=3 #입력값 개수
output_size=3 #은닉층(중간층) 노드 개수
input_x=random_vector(input_size) #입력값
forw=random_matrix(ZZ,input_size,output_size)
w=forw/forw.norm() #초기 가중치
output_y=input_x*w #예측값
print w,input_x,output_y
w=[ 0.156363872811 0.0 0.312727745622]
[ 0.469091618433 0.0 0.781819364055]
[ 0.156363872811 -0.156363872811 0.156363872811],x= (-2, 3, 1), y=(1.25091098249, -0.156363872811, 1.87636647373)
이 나왔습니다.
여기서 의도할 관측값을 A=[1,0,2], step size를 a=0.1로 놓고 gradient method 10번을 돌린다고 코드를 짜서 돌려보면
times=10
input_x=vector([-2, 3, 1])
output_y=vector([1.25091098249, -0.156363872811, 1.87636647373])
A=vector([1,0,2]) #의도할 관측값
w=matrix([[ 0.156363872811,0.0,0.312727745622],[ 0.469091618433 ,0.0,0.781819364055],[0.156363872811,-0.156363872811,0.156363872811]])
for k in range(0,times):
for i in range(0,input_size):
for j in range(0,output_size):
w[i,j]=w[i,j] - 0.1*input_x[i]*(A[j]-output_y[j])*output_y[j]*(1 - output_y[j])
output_y=input_x*w
print k,'times: ', output_y
그래서 이 코드를 돌리면 다음과 같은 결과가 나왔습니다.
1 times: (1.14065712755467, -0.116782086707532, 2.16098797914838)
2 times: (1.10906297996423, -0.0954590557644818, 1.59552840911652)
3 times: (1.09059416779707, -0.0814838421797253, 2.13357896475442)
4 times: (1.07806299593319, -0.0714309489764299, 1.68127894337143)
5 times: (1.06886564824259, -0.0637773612853046, 2.19237617927170)
6 times: (1.06176894842857, -0.0577196039376909, 1.48831938026190)
7 times: (1.05609744143988, -0.0527862159259185, 2.00894687704508)
8 times: (1.05144460127417, -0.0486793617192298, 1.98355842292760)
9 times: (1.04754882469655, -0.0452003130275097, 2.02846569422004)
10 times: (1.04423307389875, -0.0422107311533758, 1.94532621638136)
하지만 이 코드를 짜면서 관측값(A)를 초기 예측값과 너무 멀리 두면 infinity 가 뜨면서 ERROR가 나옴도 확인했습니다.
Newton's method 실습에서도 산출하려는 값에서 너무 멀리 떨어진 점에서 시작하면 답이 산으로 갔는데 경사하강법에도 newton's method이 사용되므로 마찬가지인 듯 합니다.
그래서 이 코드를 이용해서 입력값과 은닉층 노드 갯수를 얼마인지에 상관없이 신경망에서 오차역전파법을 사용해 오차를 줄이는 방법을 알았습니다.
김석하(2017####02)8월 18일 오전 1:18
혹시 계산을 하는데 불편한점은 없으셨나요? 오차역전파법이 실제 응용 단계에서 running time이 얼마나 걸리는지 확인하고 싶습니다
이지용(2021####83)8월 18일 오전 1:59
불편한 점 꽤 있었지요. 뉴턴방법은 정답 근처에서 시작되어야 하는것처럼 얘도 의도할 값을 초기값 근처에서 설정해야 되요.의도할 관측값 A를 미리 설정해두면 구하려는 값과 처음값 간의 간격이 커질 경우 infinity가 뜨며 답이 산으로 가거나 에러가 떴어요. 그래서 위에코드랑 아래 코드부분을 합칠수가 없어서 띄워났어요. 그리고 random_vector 명령어 친 다음에 노름(norm.())dmfh 나눠주어야지, 아니면 정수로 구성된 백터에 나중에 계산되어 들어가는 숫자가 정수가 아니라는 이유로 또 에러가 떠요. 그래서 정수로 구성된 백터가 아니라는 것을 입력하기위해 w=forw/forw.norm()을 입력한 거에요. 계산시간은 제 집 인터넷 사정을 반영해서 기본 2초에 input_size, output_size를 1씩 늘릴때마다 1초씩 늘어나요. 그리고 계산시간이 20초가 넘어가면 제 컴퓨터에서 알아서 error를 띄워요.
김민서(2021####02)8월 18일 오전 2:25
관측값(A)를 초기 예측값과 너무 멀리 두면 infinity 가 뜨면서 ERROR가 나온다고 하셨습니다. 뉴턴's method에서 그랬던 것처럼 시작점이 너무 멀어져서 값을 못찾는 거라고 하셨는데 그럼 이를 해결할 수 있는 방법도 또 있나요 ? 덕분에 실습 코드 참고해서 실습해볼 수 있었습니다 감사합니다 !
이지용(2021####83)8월 18일 오전 11:50
저도 해결 못해서 코드를 생성부분(윗부분)과 계산부분(아랫부분)으로 나누고, 초기예상값(output_y)이 뭐가 나오나 확인한 후에 관측값 A를 가까운 값으로 설정했습니다.
류재헌(2015####86)8월 18일 오후 3:18
은닉층에서 입력층으로 전파된 오차 error_H 를 반영할 방법은 없을까요? 저도 본 코드 참고해서 실습중입니다. 감사합니다!
권서우 학우님 추가 답변
류재헌 학우님은 은닉층에서 입력층으로 전파된 오차 error_H를 반영하는 방법에 대해서 질문하셨습니다.
신경망의 각 계층에 전달된 오차로부터 가중치를 갱신하는 방법에는 여러가지가 있으나, 그 중 하나는 각 계층에 전달된 오차를 계산하는 방법입니다. 출력층에서의 오차를 계산하기 위해 은닉층에서 입력 신호 x1과 x2를 받아 가중치 w11, w12, w21, w22와 계산한 후, sigmoid 함수 f(x)를 거쳐 출력 y1과 y2를 얻습니다. 그러면 출력층에서의 제곱오차는
입니다.
은닉층에서의 오차를 계산할 때는, 은닉층에는 출력층과 달리 목표하고자 하는 정답이 따로 없어서 출력층에서의 오차에 해당하는 것이 없습니다. 이때 오차역전파법을 사용합니다. 신경망에서 오차가 일어났다는 것은 입력신호가 입력층으로부터 은닉층을 걸쳐 최종 출력층으로 전파될 때, 은닉층에서의 오차가 반영된 결과라고 볼 수 있습니다. 그래서 가중치에 비례해서 오차를 역으로 전달해주면 됩니다.
< 참고문헌 >
1. 이상구, MATH4AI, BigBook
- 인공지능, 인공신경망에 대해서 이해할 수 있었습니다. 이를 이용하기 위해서 사용하는 활성화 함수의 종류에 대해서 알고 그 원리를 알 수 있었습니다. 추가로 경사하강법을 이용하여 오차역전파법을 발전시키는 방법에 대해서 그 단계를 이해하였습니다. 오차역전파법을 활용하는 코드에 대해서 실습을 하는 것에 어려움을 겪었습니다. 완전한 코드를 실행해보는데 많은 시간이 소요되었고 오류도 발생하여 문제가 무엇인지 찾기 힘들었으나 학우분들께서 추가로 남겨서 토론해주신 것을 보고 오류의 원인에 대한 여러 가지 가능성과 해결방법을 고민해볼 수 있었습니다. 하지만 코드 실습 부분에 있어서 완벽하게 이해하지는 못하였습니다.
[7주차] 신경망 요약과 실습
작성자 : 이지용(2021####83)작성일 : 8월 17일 오후 9:07
조회수 : 34
신경망은 정답과 데이터를 이용해 컴퓨터가 규칙을 도출하도록 하는 것입니다.
신경망은 입력층, 중간층 (또는 은닉층), 출력층으로 구성됩니다. 입력층에 데이터를 넣으면 입력된 값에 가중치가 곱해지고 합산되어 결과값이 출력됩니다. 예를 들어 입력층에 데이터 [x1,x2,x3,x4]가 입력되고 은닉층에 [y1,y2]라는 값이 나오면 이는 데이터의 가중치가 곱해지고 합산된 값입니다. 행렬로 표현하면 다음과 같습니다.
[y1,y2] =[x1,x2,x3,x4]*[[w11,w21],[w12,w22],[w13,w23],[w14,w24]]
활성화함수는 뉴런에서 임게값 이상의 자극을 줘야만 반응하는 것처럼 노드(입력신호와 가중치의 총합)가 임계값을 넘으면 1, 아니면 0을 출력하는 함수입니다.
활성화함수는 대표적으로 sigmond 함수 f(x)=1/(1+e^(-x))가 있는데 이는 f'(x)=f(x)(1-f(x))라 컴퓨터 계산이 편하기 때문입니다. 이 함수를 이용하면 출력되는 heaviside function(step function) 은 H(x)={0 (x<0), 1 (x≥0) 입니다.
활성화함수가 일차함수인 경우에는 y=wx+b로 나타낼수 있는데, 여기서 wx>θ(지정된입계값)이면 1을 출력합니다.
신경망에서 오차를 줄이기 위해서는 가중치를 갱신해야 하는데 이때 오차역전파법을 이용합니다.
오차역전파법은 여덟단계로 나눌수 있습니다.
우선 처리전 데이터를 학습데이터와 검증데이터(80%), 테스트데이터(20%)로 나눕니다.
두번째로 입력값과 의도할 결과값인 관측값을 입력합니다.
세번째로 가중치를 임의로 설정합니다.
네번째로 입력값과 가중치를 곱해 합산하여 출력층에 나오는 값인 예측값을 얻습니다.
다섯번째로 예측값과 관측값사이 오차를 계산합니다.
여섯번째로 경사하강법(wij=wij - a*ϑE/ϑwij)을 이용해 가중치를 업데이트합니다.
일곱번째는오차가 최소화 되겠끔 위 단계를 반복하는 것입니다.
마지막으로는 남겨둔 테스트데이터로 신경망을 테스트하는 것입니다.
이 오차 역전파법으로 제곱오차 E=1/2*∑(i=1->n) ei² = 1/2*∑(i=1->n) ||yi-yi^||²를 줄여나갑니다. yi는 예측값, yi^는 관측값입니다.
그리고 wij(새로운값)=wij(이전값) - a*ϑE/ϑwij를 반복하며 오차가 최소가 되겠끔 하는것이 오차역전파법입니다.
예를 들어 [[w11,w21],[w12,w22]]*[x1,x2]=[y1,y2]에서 f가 sigmond 함수이면 ϑE/ϑw11= ⊿1/2*{(y1_의도한값 - f(x1w11+x2w12))² + (y2_의도한값 - f(x1w21+x2w22))²}/⊿w11 = -{f(x1w11+x2w12)}' {y1_의도한값 - f(x1w11+x2w12)} = -x1*f(x1w11+x2w12)(1-f(x1w11+x2w12))(y1_의도한값 - f(x1w11+x2w12)) = -x1(y1_의도한값 - y1)y1(1 - y1)입니다.
마찬가지로 ϑE/ϑw12=-x2(y1_의도한값 - y1)y1(1 - y1), ϑE/ϑw21=-x1(y2_의도한값 - y2)y2(1 - y2), ϑE/ϑw22=-x2(y2_의도한값 - y2)y2(1 - y2) 됩니다.
그리고 나서 인공신경망 실습을 해보았습니다. 아래 코드를 이용해서 sage에서 랜덤으로 입력값과 초기 가중치값, 예측값을 산출했습니다.
input_size=3 #입력값 개수
output_size=3 #은닉층(중간층) 노드 개수
input_x=random_vector(input_size) #입력값
forw=random_matrix(ZZ,input_size,output_size)
w=forw/forw.norm() #초기 가중치
output_y=input_x*w #예측값
print w,input_x,output_y
w=[ 0.156363872811 0.0 0.312727745622]
[ 0.469091618433 0.0 0.781819364055]
[ 0.156363872811 -0.156363872811 0.156363872811],x= (-2, 3, 1),
y=(1.25091098249, -0.156363872811, 1.87636647373)
이 나왔습니다.
여기서 의도할 관측값을 A=[1,0,2], step size를 a=0.1로 놓고 gradient method 10번을 돌린다고 코드를 짜서 돌려보면
times=10
input_x=vector([-2, 3, 1])
output_y=vector([1.25091098249, -0.156363872811, 1.87636647373])
A=vector([1,0,2]) #의도할 관측값
w=matrix([[ 0.156363872811,0.0,0.312727745622],[ 0.469091618433 ,0.0,0.781819364055],[0.156363872811,-0.156363872811,0.156363872811]])
for k in range(0,times):
for i in range(0,input_size):
for j in range(0,output_size):
w[i,j]=w[i,j] - 0.1*input_x[i]*(A[j]-output_y[j])*output_y[j]*(1 - output_y[j])
output_y=input_x*w
print k,'times: ', output_y
그래서 이 코드를 돌리면 다음과 같은 결과가 나왔습니다.
1 times: (1.14065712755467, -0.116782086707532, 2.16098797914838)
2 times: (1.10906297996423, -0.0954590557644818, 1.59552840911652)
3 times: (1.09059416779707, -0.0814838421797253, 2.13357896475442)
4 times: (1.07806299593319, -0.0714309489764299, 1.68127894337143)
5 times: (1.06886564824259, -0.0637773612853046, 2.19237617927170)
6 times: (1.06176894842857, -0.0577196039376909, 1.48831938026190)
7 times: (1.05609744143988, -0.0527862159259185, 2.00894687704508)
8 times: (1.05144460127417, -0.0486793617192298, 1.98355842292760)
9 times: (1.04754882469655, -0.0452003130275097, 2.02846569422004)
10 times: (1.04423307389875, -0.0422107311533758, 1.94532621638136)
하지만 이 코드를 짜면서 관측값(A)를 초기 예측값과 너무 멀리 두면 infinity 가 뜨면서 ERROR가 나옴도 확인했습니다.
Newton's method 실습에서도 산출하려는 값에서 너무 멀리 떨어진 점에서 시작하면 답이 산으로 갔는데 경사하강법에도 newton's method이 사용되므로 마찬가지인 듯 합니다.
그래서 이 코드를 이용해서 입력값과 은닉층 노드 갯수를 얼마인지에 상관없이 신경망에서 오차역전파법을 사용해 오차를 줄이는 방법을 알았습니다.
김석하(2017####02)8월 18일 오전 1:18
혹시 계산을 하는데 불편한점은 없으셨나요? 오차역전파법이 실제 응용 단계에서 running time이 얼마나 걸리는지 확인하고 싶습니다
이지용(2021####83)8월 18일 오전 1:59
불편한 점 꽤 있었지요. 뉴턴방법은 정답 근처에서 시작되어야 하는것처럼 얘도 의도할 값을 초기값 근처에서 설정해야 되요.의도할 관측값 A를 미리 설정해두면 구하려는 값과 처음값 간의 간격이 커질 경우 infinity가 뜨며 답이 산으로 가거나 에러가 떴어요. 그래서 위에코드랑 아래 코드부분을 합칠수가 없어서 띄워났어요. 그리고 random_vector 명령어 친 다음에 노름(norm.())dmfh 나눠주어야지, 아니면 정수로 구성된 백터에 나중에 계산되어 들어가는 숫자가 정수가 아니라는 이유로 또 에러가 떠요. 그래서 정수로 구성된 백터가 아니라는 것을 입력하기위해 w=forw/forw.norm()을 입력한 거에요. 계산시간은 제 집 인터넷 사정을 반영해서 기본 2초에 input_size, output_size를 1씩 늘릴때마다 1초씩 늘어나요. 그리고 계산시간이 20초가 넘어가면 제 컴퓨터에서 알아서 error를 띄워요.
김민서(2021####02)8월 18일 오전 2:25
관측값(A)를 초기 예측값과 너무 멀리 두면 infinity 가 뜨면서 ERROR가 나온다고 하셨습니다. 뉴턴's method에서 그랬던 것처럼 시작점이 너무 멀어져서 값을 못찾는 거라고 하셨는데 그럼 이를 해결할 수 있는 방법도 또 있나요 ? 덕분에 실습 코드 참고해서 실습해볼 수 있었습니다 감사합니다 !
이지용(2021####83)8월 18일 오전 11:50
저도 해결 못해서 코드를 생성부분(윗부분)과 계산부분(아랫부분)으로 나누고, 초기예상값(output_y)이 뭐가 나오나 확인한 후에 관측값 A를 가까운 값으로 설정했습니다.
류재헌(2015####86)8월 18일 오후 3:18
은닉층에서 입력층으로 전파된 오차 error_H 를 반영할 방법은 없을까요? 저도 본 코드 참고해서 실습중입니다. 감사합니다!
권서우 학우님 추가 답변
류재헌 학우님은 은닉층에서 입력층으로 전파된 오차 error_H를 반영하는 방법에 대해서 질문하셨습니다.
신경망의 각 계층에 전달된 오차로부터 가중치를 갱신하는 방법에는 여러가지가 있으나, 그 중 하나는 각 계층에 전달된 오차를 계산하는 방법입니다. 출력층에서의 오차를 계산하기 위해 은닉층에서 입력 신호 x1과 x2를 받아 가중치 w11, w12, w21, w22와 계산한 후, sigmoid 함수 f(x)를 거쳐 출력 y1과 y2를 얻습니다. 그러면 출력층에서의 제곱오차는
입니다.
은닉층에서의 오차를 계산할 때는, 은닉층에는 출력층과 달리 목표하고자 하는 정답이 따로 없어서 출력층에서의 오차에 해당하는 것이 없습니다. 이때 오차역전파법을 사용합니다. 신경망에서 오차가 일어났다는 것은 입력신호가 입력층으로부터 은닉층을 걸쳐 최종 출력층으로 전파될 때, 은닉층에서의 오차가 반영된 결과라고 볼 수 있습니다. 그래서 가중치에 비례해서 오차를 역으로 전달해주면 됩니다.
< 참고문헌 >
1. 이상구, MATH4AI, BigBook
- 이지용 학우님이 게시한 Sage코드를 보고, 개선을 꾀하고자 finalize한 레포트입니다. 결과적으론 코드를 개선하는데 실패했고, 그 원인을 분석하여 레포트에 게시했습니다. 신경망에 대한 이해를 높이는데 코드를 읽고 분석하는 것이 도움이 되었습니다.
- 인공지능, 인공신경망에 대해서 이해할 수 있었습니다. 이를 이용하기 위해서 사용하는 활성화 함수의 종류에 대해서 알고 그 원리를 알 수 있었습니다. 추가로 경사하강법을 이용하여 오차역전파법을 발전시키는 방법에 대해서 그 단계를 이해하였습니다. 오차역전파법을 활용하는 코드에 대해서 실습을 하는 것에 어려움을 겪었습니다. 완전한 코드를 실행해보는데 많은 시간이 소요되었고 오류도 발생하여 문제가 무엇인지 찾기 힘들었으나 학우분들께서 추가로 남겨서 토론해주신 것을 보고 오류의 원인에 대한 여러 가지 가능성과 해결방법을 고민해볼 수 있었습니다. 하지만 코드 실습 부분에 있어서 완벽하게 이해하지는 못하였습니다.
-
Comment: 활성화 함수 sigmoid에 대해서 학습하고 이를 이용하여 오차 역전파법을 시도하였습니다. 다른 학우분께서 시도해보신 Sage코드와 오차가 생기는 이유에 대해서 제시해주신 가능성들을 토대로 코드를 재수정하였습니다. 코드를 재수정하는 과정에서, 오차 역전파법을 할 때, 변수들의 설정이나 계산의 순서, 조건 등에 대해서 찾아보면서 학습하게 되었습니다. 이러한 과정을 통해서 제곱 오차가 어떠한 방식으로 적용되는지 그곳에서 sigmoid함수가 어떻게 미분되는지에 대해서 보다 자세하게 이해하는 시간이 되었습니다. 이를 통해서 다른 학우분들과 코드에 대해서 평가해보고 오류를 고쳐보는 시간을 가질 수 있었고, 활동을 통해서 글로써 소통하는 방법에 대해서도 학습할 수 있었습니다.
Ch 5장. [Project 제안서(only)] Your possible Team Project 제목, 동기, 방법론, 참고문헌 [아이디어와 Draft] (10점)
모든 학생이 <인공지능을 위한 기초수학 입문>을 수강하면서 자신의 전공과 연계하여 제안하고 싶은 프로젝트를 구상하여 부담없이 제안서만 작성합니다.
(선정된 일부 학생의 경우 진행을 도와주고, 결과물을 기말에 발표할 기회와 가산점을 줍니다.)
[Team Project 제안서 only] - 중간고사의 10점 부분
Team Project Proposal/Final Report (Form)
인공지능을 위한 기초수학 입문
Prof : Sang-Gu LEE
Due day : 2021.08.21
(in HW box in LMS)
Name / e-mail (이름과 이-메일): 류재헌
Team Project Title (Tentative, just idea now): 선형 회귀 직선을 통한 반도체 공정 신제품의 불량률 판별
초록: 신 제품의 불량률은 미리 쌓여있는 데이터가 없는 관계로, 초기 데이터를 수집하고 그 안에서 불량품을 검수해야만 합니다. 우리는 여기서 선형 회귀 직선의 아이디어를 적용해, 직선과의 오차가 일정 이상 되는 경우 이것을 불량품으로 간주할 수 있습니다. 그 중에서도 저는 저의 전공인 전자전기공학과 관련하여, 반도체 제품의 불량률을 판정할 수 있는 프로젝트를 개설해 보려 합니다.
연구방법 개요: 현재 제일 널리 쓰이고 있는 반도체 소자인 MOSFET의 경우, 게이트 전압을 인가함으로써 그것에 대한 출력값을 취하는 방식을 택하고 있습니다. channel length 가 기존의 제품과는 완전히 다른 경우의 반도체 공정을 설계했다고 합시다. 연구를 통해서 현저한 불량률의 제품을 검수할 수 있겠지만, 실제의 데이터와 상이한 경우가 나올 경우를 대비해서 실제 제품들의 데이터를 받아 선형 회귀 직선을 그림으로써, 연구 데이터에 이은 실제 데이터의 군집을 형성해 재검수를 함으로써 불량률을 더욱이 감소시킬 수 있을 것입니다.
5-6주차 : 실제 산업 현장에서는 어떤 방식으로 인공지능을 활용한 불량률 검수를 하는지 조사해봤습니다. 현재 산업 현장에서는 QMS(Quality Management System), 품질 관리 시스템에 AI 솔루션 AutoML(오토 머신러닝)을 결합해 불량품의 검수에서 혁신을 도모하고 있습니다. AutoML은 AI를 만드는 AI로써, 예측 가능성이 가장 높은 규칙을 찾기 위해서 모델 평가 지표를 수립, 알고리즘 선택, 모델링, 평가 및 보완에 이르는 작업을 반복적으로 수행합니다. 그 과정은 다음과 같습니다. 학습률, 배치 크기 등 학습에 큰 영향을 주는 파라미터를 학습을 통해 추정합니다. 그리고 학습을 통하여 유의미한 특징을 추출해 입력으로 사용한 후, 최적의 아키텍쳐를 학습을 통해 설계합니다.
PCA에 대해 공부한 후, 일변수 함수뿐이 아닌 다변수 함수에 대해서도 주성분 분석을 통해 데이터 마이닝을 할 수 있다는 것을 알게 되었습니다. 정전기 방전, 게이트 서지, 마모 등 여러 장애 요소들 중 어떤 것이 고장에 직접적인 영향을 미치는지 알 수 있다는 것을 뜻합니다.
7주차 : 논문을 읽고 분석하여, 레포트의 형식으로 review해 봤습니다. 선행 연구 결과를 통해 빅데이터를 이용한 불량률 검수의 효율성 증가를 꾀하고 있다는 것을 파악할 수 있었습니다. 여러 개의 테스트중 주 성분이 되는 테스트만을 선별하여 다른 테스트에 들어가는 비용과 시간을 절감하는 방법을 채택하는 것을 알 수 있었습니다.
참고문헌/웹주소:
Creative and Smart! LG CNS :: 보상을 통해 학습하는 머신러닝 기술 1편
Creative and Smart! LG CNS :: 보상을 통해 학습하는 머신러닝 기술 2편
자동화된 ML(AutoML)이란? AutoML - Azure Machine Learning | Microsoft Docs
[BIG DATA] AutoML특집 (1부)- AutoML이란 무엇인가 (kolonbenits-time.com)
모바일 PMU의 전력 MOSFET 장애 원인과 설계 예방법 (hellot.net)
장수열. "기계학습 알고리즘을 이용한 반도체 테스트공정의 불량 예측." 국내석사학위논문 고려대학교 대학원, 2019. 서울
조윤상, 김성범. "반도체 제조라인 불량공정순서 탐지 및 혐의설비 탐색." 대한산업공학회 추계학술대회 논문집 . (2017): 599-606.
이상구, Math4AI, BigBook
Name / e-mail (이름과 이-메일): 이시원 / lsw**
Team Project Title (Tentative, just idea now):
GDP 잠재성장률을 예측해보자
초록:
현재 글로벌경제학과에서 경제를 전공하고 학술제에 참여를 해보면서 GDP라는 요소가 다른 식을 세우는 경우에도 다양한 방식으로 사용될 수 있음을 체감하게 되었습니다. 이러한 GDP가 GDP디플레이터와 같이 물가를 측정하는 자료 등으로 다양하게 사용됨을 알 수 있었습니다. 때문에, 이런 중요한 GDP에 대해서 다음년도에 GDP가 얼마나 성장할지에 대해서 예측해 보는 GDP 잠재성장률에 대해서 GDP = C + I + G + (X – M) 식을 기반으로 하여 C, I, G, X, M을 예측해볼 수 있는 변수들을 4개에서 5개를 선정하여 각 수치에 예상치를 도출해내고 GDP를 계산해냄으로써 올해 GDP와 비교하여 GDP의 잠재성장률을 예측해보는 식을 도출해내고자 한다. 이 때, C,I,G,X,M에 계산에 사용될 데이터들을 경기를 선행하여 반영한다는 경기선행지표를 통해서 식을 도출해낼 수 있을 것이다.
연구방법 개요:
C,I,G,X,M에 대해서 e-나라지표에서 분기별로 데이터를 수집하고 선행연구들을 통해서 높은 상관관계를 가진 경기선행지수들을 추려내어 해당 경기지수들의 데이터를 마찬가지로 e-나라지표를 통해서 수집해준다. 이 때의 데이터들을 e-나라지표에서 excel로 다운받아서 사용할 수 있을 것이며, tensorflow에서 모델을 설정해줌으로써, 각 변수들 사이의 가중치를 조절해나가면서 인공신경망을 구성할 수 있을 것으로 기대합니다. 이러한 변수들을 토대로 C,I,G,X,M에 대해 각각의 식을 세우고 해당 분기 혹은 연도의 데이터를 연산을 진행해 얻은 값들을 통해서 다음 분기 혹은 연도의 GDP를 예측하고 이를 현재의 GDP와 비교하여 GDP 잠재성장률을 예측해낸다.
기존 연구 사례 및 모델에 포함되는 변수 소개
잠재성장률 추정방법에는 생산함수모형, 다변량필터모형, 준구조모형 등이 존재한다.
생산함수모형을 따를 경우에는 한 경제의 생산함수가 특정 형태의 생산함수를 따른다고 가정하게 된다. 이 경우 실질GDP의 경우에는 총요소생산, 노동투입, 자본투입에 의해 결정되게 되며, 잠재GDP는 각 투입요소의 잠재수준의 값을 합하여 도출해내게 된다. 이 경우에는 경기요인을 포함하여 계산을 진행하게 되며, 잠재노동을 추정해내는 식에는 15세이상인구, 경제활동참가율 추세, 자연실업률, 평균 근로시간, 노동의 질 추세가 사용되며, 잠재자본을 추정해 내극 과정에서는 부문별 생산자본소득, 부문별 감가상각률, 부문별 투자 변수가 사용된다. 또한 총요소생산성을 추정해내는 부분에서는 가동률지수와 같은 변수들이 사용되게 된다.
다변량필터모형은 이러한 생산함수모형에 대하여 필립스곡선과 오쿤의 관계식 등을 함계 고려하여 잠재성장률을 측정하는 방식으로, 근원물가상승률, 전문가 5년 기대인플레이션, 평균 근로시간, 노동의 질과 같은 변수가 추가적으로 고려되게 된다.
준구조모형의 경우에는 실질GDP외에 오쿤의 관계식, IS방정식 등의 GDP갭률과 다른 거시변수와의 관계를 모형화하여 잠재GDP를측정한다. 이 경우에는 앞서 소개되었던 변수들 중 전문가 5년 기대 인플레이션과 근원인플레이션 그리고 추가적으로 실질기준금리, 중립금리 등의 변수가 사용된다.
이러한 연구 사례를 살펴보았을 때, 실업률, 자연실업률, 중립금리, 실질기준금리, 근원인플레이션, 감가상각률, 부문별 투자 변수 등을 입력층에서 입력되는 값으로 설정한 후 은닉층의 노드를 5개로 구성하여 C,I,G,X,M에 미칠 영향을 추정해내고 이 값들을 통해서 최종적으로 출력층에서 잠재GDP를 추정해내는 모델을 구상해볼 수 있다.
참고문헌/웹주소: 우리나라의 잠재성장률 추정. 한국은행(2019). p.1~13
Name / e-mail (이름과 이-메일): 이혜연
Team Project Title (Tentative, just idea now): 인공지능을 통한 생체재료 공학
초록: 현재 의료산업에 인공 생체재료를 통한 치료, 재활 등의 연구가 활발히 이루어지고 있습니다. 인공지능 프로그램을 사용하여 다양한 생체재료 중 당사자에게 적절한 생체재료를 골라내고 이를 이용하고자 하는 부위에 맞게끔 공학하는 프로젝트를 생각해보았습니다.
연구방법 개요: 신체의 여러부위와 많은 생체재료, 제작에 사용되는 여러 기법들에 관한 초기 데이터를 입력하고 함수를 설정하게 합니다. 개개인의 특징을 설정하고 이를 표본들과 비교해보았을 때 함수상으로 점점 근삿값에 가까워지는 정확한 생체재료와 공정방법을 도출할 수 있을 것입니다. 그 예로 어떤 생체재료를 써야 하는지, 어떤 크기의 구조로 제작되어야 하는지, 어떤 기법을 사용해서 환자에게 적용될 수 있는지가 있을 것입니다. 이런 프로그램을 사용하면 여러번의 시험을 거치지 않아도 개인에게 맞는 치료방법을 찾을 수 있을 것이고 시간과 돈을 절약할 수 있을 것입니다.
참고문헌/웹주소:
이형진, 바이오시스템설계, 생체모방
https://www.cheric.org/PDF/PST/PT05/PT05-6-0566.pdf
https://www.kist.re.kr/kist_web/?sub_num=191&state=view&idx=3673&ord=0
https://www.cheric.org/PDF/PIC/PC23/PC23-6-0044.pdf
https://www.ksbm.or.kr/pub/16%20(3)%20108-111.pdf
https://m.blog.naver.com/es760/221712439862
Ch 6장. ◆ Final comment after your report ◆ (10점)
(PBL보고서/Project를 마치고 ...)
*중간 PBL (검은 글씨):
1주차: 처음에는 생전 본 적 없는 개념들이 소개되는 선형대수학을 배우게 되면서 수학적인 내용들을 따라가기가 어려웠습니다. 또한, 다른 학우분들과 질문을 하고 토론을 하면서 강의를 진행해본 경험이 없어 강의에서 목표로 하는 바를 달성하기가 어렵다는 생각을 가지고 있었습니다. 하지만 이후 예제들을 차근차근 풀어나가고, 코드를 통해서 실습을 진행해나가면서 수학에 대한 이해를 높일 수 있었고, 다른 학우분들이 게시판에서 진행하는 활동들을 보면서 답변을 달거나 스스로의 활동을 요약해보는 활동들을 통해서 강의의 커리큘럼에서 뒤쳐지지 않고 따라갈 수 있었습니다.
2주차: 앞서서 배웠던 선형대수학과 관련된 개념들과 본격적으로 SVD와 같은 인공지능과 관련된 알고리즘을 배우기 시작했습니다. Sage를 다루는 방법에 대해서도 익숙해지기 시작하면서 1주차에 주로 진행하였던 python과 Sage를 동시에 진행하기보다는 Sage를 통해서 본 강의에서 주로 다루는 코드들을 더욱 이해하고자 노력하였습니다. 또한, 1주차에 선형대수학에 대한 내용을 학습한 것을 토대로 다른 수학 개념을 이해하기 편해지면서 다른 학우분들과의 토론 등에 적극적으로 참여하고자 생각하게 되는 주였던 것 같습니다.
3주차: 고등학교 때 간략하게나마 배웠던 미분과 적분과 관련된 미분적분학에 관한 내용이어서 선형대수학보다 처음 접근하기가 용이하였습니다. 또한 Sage를 통해서 함수들을 보다 편리하게 입력할 수 있다는 점 등, Sage에 장점을 느끼게 되는 주였습니다. 다른 학우분들과의 질의 응답을 Finalize로 작성하고, Office Hour에 참석하여 학우분들의 질의응답을 요약하는 활동들을 많이 진행했던 주였습니다.
4주차: 저번 주차에 배웠던 그래디언트와 같은 개념들을 바탕으로 경사하강법을 실습해나가면서 인공지능을 위한 기초를 하나 더 다지는 시간이 되었으며, 중간고사 PBL보고서를 작성하고 project제안서를 작성하는 등의 앞선 3주차를 정리하는 시간을 주로 보냈습니다.
5주차: 현대 경제학의 중요한 학문 갈래 중 하나인 계량경제학의 기초가 되는 통계에 대해서 공부할 수 있는 시간이었습니다. 이 시간을 통해서 확률과 통계의 기초, 통계 분석에 자주 사용되는 R을 통한 실습을 진행할 수 있었습니다. 또한, Office Hour시간을 통해서 앞선 4주 동안의 활동을 되돌아보고 PBL보고서를 수정해나가는 활동을 진행하였습니다. 지금까지 강의에서 해왔던 활동들이 올바른 방향으로 활동을 진행하고 있었다는 생각을 가질 수 있었던 한주였으며, PCA를 위한 토대를 갖추고 경제학에서 필요로 하는 통계란 무엇인지를 생각해 볼 수 있는 한주였습니다. 포아송 분포를 배우는 과정에서 고등학교 당시 확률과 통계에서 단순히 답을 내기 위해 사용하였던 방식이 포아송 분포의 개념을 포함한다는 점을 알게되었습니다.
6주차: PCA의 대한 학습을 진행하고 공분산과 상관관계에 대하여 학습하였습니다. 또한, 정규분포의 값을 구하는 방법에 대해서도 학습할 수 있었습니다. PCA를 통해서 학습된 모델들이나 다른 학우분들의 학습 내용을 읽어보면서 PCA를 이해하는 시간이 되었습니다.
6주에 대한 총평: 초반에는 강의 방식에 대한 이해도 부족 등의 이유로 강의 참여에 어려움을 느꼈었지만, 이후 다른 학우분들의 게시글들을 보면서 이러한 부분을 고칠 수 있었다고 생각합니다. 단순히 현대 사회가 빅데이터화 되어가고 있다, 4차 산업혁명이 발생하고 AI가 모든 일자리가 대체해 나갈 것이다와 같은 이야기들을 듣고 가지고 있던 AI에 대한 생각이 다양한 머신런닝에 적용되는 수학 내용을 보고서 지금까지 수없이 많은 수학자들의 생각이 집약되어진 결정체라는 생각을 추가로 가지게 되었습니다. 또한, 앞으로의 사회를 살아감에 있어서 기존에는 문과와 이과라는 테두리로 나뉘어져 수학에 대한 필요성이 구분되었다면, 앞으로는 통계와 선형대수학에 대한 기본적인 수학의 필요성은 계열과 학과를 구분하지 않고 필요하게 될 것이라는 생각을 가지게 되었습니다.
7주차: 신경망과 다양한 활성화함수 그리고 오차 역전파법에 대해서 학습을 진행하였습니다. 학습을 진행하는 과정에서 오차 역전파법에 대한 Sage코드를 수정하는 활동을 진행하였으며, 해당 활동에서 다른 학우분들이 실습 하시고 제시해주신 가능성에 대하여 검증을 진행하였고, 저 또한 해결하지 못한 문제에 대해서 가능성을 제시하고 다른 학우분이 다시 그 코드를 재구성하는 학습활동을 거치면서 많은 사람의 손을 거쳐서 하나의 글과 하나의 코드가 완성되는 체험을 할 수 있었습니다. 해당 체험을 진행하면서 글로써 토의하는 방법에 대해서 학습해 나갈 수 있었으며, 오차 역전파법과 sigmoid함수의 특징에 대해서 보다 자세하게 탐구해보는 시간이 되어주었습니다.
인공지능을 위한 기초수학(2021 여름 도전학기) 총평:
아쉬운 부분이 전혀 없다고는 말할 수 없겠지만 스스로 최선에 가까운 노력을 쏟아부었다고 확신하며 수학과 인공지능에 대한 지식 뿐만이 아니라 학습법과 질문을 하는 방식, 타인과의 의사소통을 진행하는 방식, 문제를 바라보는 태도, 학습활동 혹은 자료를 정리하는 활동을 진행할 때 지켜야되는 예의범절과 윤리 등 다양한 분야에서 많은 지식을 습득해 나갔던 2달여 였다고 생각합니다.
수업에 참여하여 Finalize하고 Re-Finalize를 진행하며 학습을 수행하면서 한글과 Word를 다루는 실력에서의 향상을 가져올 수 있었으며, 지식들을 문서화하여 보관하는 습관을 들일 수 있었습니다. 또한 이번 발표 동영상과 PBL 보고서를 작성하면서 스스로가 학습했던 내용에 대해서 다시 한번 훑어볼 수 있었던만큼 향후 PBL보고서를 다시 확인하면서 학습했던 내용들을 re-mind할 수 있을 것이라고 생각합니다.
마지막으로, 2달여 동안 같이 학습해 오신 학우분들께서도 마지막 남은 1주차까지 꾸준하고 성실하게 활동을 진행해주시는 모습을 통해서 스스로를 몰아붙일 수 있었으며, 다양한 분야에서의 수학과의 접목을 확인할 수 있었습니다. 같이 토론을 진행하고 학습 활동을 진행했던 학우분들에게 감사하다는 마음을 가지게 되었으며, 꼭 다른 수업에서도 뵙고 싶다는 생각을 가지게 되었습니다.
*중간 PBL (검은 글씨): 인공지능은 전반적인 미래를 크게 바꿔놓을 것입니다. 인공지능에 대해서 무지한 채로 인공지능이 우리에게서 앗아갈 것들을 걱정하기 보다는, 인공지능이 가져다 줄 혜택과 그것이 어떻게 작동하는지를 앎으로써 이해를 높이는 것이 더 현명한 선택일 것이라고 판단해 인공지능을 위한 기초수학 강의를 수강하게 되었습니다. 선형대수학과 미적분학은 이미 배웠던 내용이기 때문에 쉬울 것이라고 생각했지만, 오히려 잊어버린 내용도 많고 제대로 이해하지 못한 채 혼동되는 내용도 많아 다시 정리하고 제대로 된 지식으로 가공하기까지 많은 시간이 걸렸습니다. 학우분들 중에는 저보다 훨씬 뛰어나신 분들도, 저와 같이 약간은 헤매시는 분들도 있을 것이라 생각합니다. 본 강좌에서 좋은 점은, 우리가 문의게시판을 통해 모르는 것들을 서로 공유하며 심도깊은 이해를 해나갈 수 있다는 점입니다. 질문을 주고받기도 하고, 자신의 전문분야와 같은 강점을 인공지능에 적용해 보기도 하며 서로의 지식을 공유하는 과정으로 인해 인공지능 전반에 대한 식견을 높일 수 있다는 점이 이 수업의 백미라고 생각합니다. 본 보고서를 쓰면서, 그동안의 finalize report를 쭉 읽어보았습니다. 많은 학우분들이 저의 글에 답변을 달아주시고 re-finalize를 해주신 걸 보고, 서로의 지식을 공유하는 허브가 얼마나 중요한지를 다시금 깨달았습니다. 인공지능을 위한 기초수학 종강까지는 4주의 시간이 더 남았습니다. 남은 기간동안 확률과 빅데이터, 그리고 인공신경망과 같은 더 심화된 내용에 대해서 배우게 될 것입니다. 앞으로도 학우분들과의 질의응답을 통해서 인공지능에 대한 깊은 이해를 하게 될 것을 기대하고 있습니다. 마지막으로는 모든 글에 댓글을 달아주시고 질문글에 답변해주시는 이상구 교수님에게 감사드리면서 중간고사 report를 마치도록 하겠습니다.
*중간 5-6주차 PBL (빨간 글씨): 5-6주차에서는 통계에 대한 내용과 주성분 분석에 대해서 배웠습니다. 확률과 통계를 이해하는데는 큰 문제가 없었으나, 6주차 3차시에 배운 내용인 주성분 분석의 내용을 이해하는데는 오랜 시간이 걸렸습니다. 행렬과 벡터, 그리고 라그랑주 승수에 이용되는 미적분과 공분산의 내용에 대한 전반적인 이해가 필요했고, MATH4AI를 읽으며 전반적인 과정을 이해하려 했으나 쉽지 않았습니다. 하지만 다른 학우들이 열린게시판에 게시한 주성분 분석의 과정을 따라가며 조금이나마 공식을 이해할 수 있게 되었습니다. 저도 다른 학우분들의 글에서 이렇게 도움을 얻는 편이기에, 제가 이해한 바를 최대한 쉽게 풀어서 report에 써내려고 하는 편입니다. 그렇게 쓴 글이 또 다른 학우분들께 도움이 되고, 이런 선순환을 반복함으로써 앞서 중간 PBL에서 언급했던 것처럼 짧은 기간에도 수학적 내용에 대한 이해를 높일 수 있었습니다.
*최종 PBL (파란 글씨): 7주간의 과정을 거쳐 인공신경망을 마지막으로, 인공지능을 위한 기초 수학을 마무리하게 되었습니다. 인공지능을 진정으로 이해하고자 본 수업을 정말로 열심히 참여했고, 덕분에 후회없는 도전학기를 보냈다고 자부합니다. 인공지능을 위한 기초 수학은 선형대수학, 미적분학, 통계, 그리고 빅데이터라는 4개의 주제를 담고 있으며, 이것이 절대로 쉬운 내용이 아닙니다. 요약된 내용이라고는 하지만 각자의 주제는 보통의 공대생이 하나의 과목으로써 듣는 비중있는 과목입니다. 이 내용들을 모두 공부해봤다고는 하지만 저도 이것들을 공부한지 꽤 많은 시간이 지나서 대부분의 내용을 잊어먹었고 다시 공부하는 시간을 가졌습니다. 더욱이 이 네 개의 내용을 머릿속에서 유기적으로 연결하는 과정이 너무 어려웠습니다. 이 어려운 내용을 유기적으로 연결하는 과정에서 수학적 응용이 무엇인지 깨달았고, 레포트를 쓰면서 그것이 구체화되는 과정을 거쳤습니다. ‘수학적 알고리즘의 코딩을 이용한 공학적 응용’이라는 수업의 내용이 저에게는 공부의 목적이 되는 소중한 경험이었습니다. 지금까지의 과정을 옆에서 도와주신 도전학기를 수강하신 학우분들과 교수님께 다시 한 번 감사하다는 말씀을 드리면서 보고서를 마치겠습니다.
*중간 PBL (검은 글씨): 미적분, 선형대수학 등의 수학 과목을 학습하기 때문에 수학을 복습하고 예습하기 위해서가 이 강의를 들은 가장 큰 이유였습니다. 본 강의를 들으면서 원래 목적이었던 수학과목에 대한 공부는 물론 평소 자신이 없었던 코드 실습에 대해서도 학습할 수 있었습니다. 또한 여러 사람들과 학습하는 과정에서, 코드를 실습하는 과정에서 생각했던 것만큼 인공지능이 어렵게 느껴지지 않았기 때문에 점점 학습을 하는 것에 있어 의욕이 생겼던 것 같습니다.
처음에는 낯설었던 문의게시판 작성이 여러 학우분들이 작성한 것을 보고 배우게 되고 간간이 읽을거리나 전공에 관련된 글들이 올라오면서 제 전공에는 어떻게 활용할 수 있을까 생각을 해보게 되었습니다. 아직까지고 코딩에 대해서 많이 알지 못하지만 그래도 어렴풋이 프로젝트에 대해서 생각해보게 된 것이 큰 발전이라고 생각합니다. 아직까지 진로에 확신이 없고 막연했는데 ‘이런 분야로도 나아갈 수 있겠구나’라고 생각해보게 되었습니다.
본 강의를 들으면서 제가 가장 많이 바뀌었다고 생각하는 점은 문의게시판 참여에 관한 생각입니다. 단순히 참여 점수를 위해서, pbl report를 작성하기 위해서 수행해오던 것들이 여러 주차를 통해 다른 학우분들께서 작성한 것을 읽어보고 생각을 공유하고 서로 배우게 되면서 질문/답변하고 의견을 내는 것에 두려움이 덜어진 것 같습니다. 같이 공부해나가면서 지식을 습득해간다는 것이 얼마나 가치있는 것인지 알게 되었습니다. 뿐만 아니라 집 안에만 있으면서 도전학기를 듣고 있는데 같이 공부하는 학우분들이 있다는 것이 현재의 삶에 큰 위안이 되기도 했습니다. 아직까지 저는 스스로 질문하고 답변하는 것이 부족하다고 생각하는데 남은 주차들에는 qna 활동에 노력을 기울여서 다른 학우분들게 도움이 되는 참여를 하고 싶습니다.
PBL report를 작성하는 것 또한 단순히 복사, 붙여넣기를 하는 것이 아니라 4주동안 어떤 공부를 했는지 다시 짚고 넘어갈 수 있는 기회가 되었습니다. 처음 시작은 당황했었고 어려워했었지만 점차 익숙해졌고 긍정적으로 생각하게 되었으니 남은 4주는 report를 작성하면서 깨달았던 아쉬운점과 부족한 점을 보완하고 더 발전할 수 있는 기간이 되도록 노력하겠습니다.
*중간(보충)PBL: 첫 PBL report를 작성하고 나서 4주간의 활동이 어떤 식으로 이루어졌었는지 돌아볼 수 있었습니다. 이를 바탕으로 5주차부턴 요약, 실습 뿐만 아니라 답변을 다는 빈도도 높이기 위해서 노력하였습니다. 달았던 답변이 혹시나 틀리진 않았을지, 이것을 보고 누군가가 이상하다고 생각하진 않을지, 나로 인해서 질문자가 더 혼란스러워하지는 않을지 항상 고민을 했었는데 그런 걱정을 뒤로하고 활동을 하다 보니 저에 대한 자신감도 조금은 길러졌다고 생각합니다. 6주차에 답변을 남겼을 때는 실제로 짚고 넘어가지 못한 부분에 대해서 학우분께서 다시 답변을 남겨주셨는데 예전같이 소심해지는 것이 아니라 새롭게 배우고 넘어갈 수 있는 기회가 되어서 다행이라고 생각이 들었습니다. 인공지능을 위한 기초수학을 배우려고 수강하였는데 저 스스로의 많은 부분을 변화시키는 수업이 된 것 같습니다.
5주차부터 수강한 내용이 전에 비해 더 어렵게 느껴졌고 이를 실습에 연관시키는데 시간이 오래 걸렸던 것 같습니다. 특히 PCA 분석과 실습에 관한 내용은 더 애를 먹었던 것 같습니다. 다만 이것이 정보를 단순화하고 처리를 더 쉽게 한다는 점에 꼭 익혀야 하는 내용이라고 생각이 들었습니다. 아직 수학적으로 많이 아는 것이 없지만 남은 주차도 성실히 참여하고 후에 코딩 실력을 더 발전시키게 된다면 꼭 다시 확인해서 익히려고 합니다. 이번 여름 내내 기초수학을 전반적으로 익힐 수 있었고 이와 더불어 코딩 또한 응용해볼 수 있어서 보람찼다고 느꼈습니다. 이 느낌을 계속 가져가서 남은 도전학기를 잘 마무리하고 학교를 다니면서 수학적, 프로그래밍 지식을 더 쌓아 보려고 합니다.
*최종 PBL (파란 글씨): 도전학기로 본 강의를 수강하는 동안 많은 것을 배운 것 같습니다. 특히 다른 수업과의 차별점으로 게시판 활동이 정말 많은 것을 느끼게 하였습니다. 다른 전공의 학생들이 모여 배운 내용을 공유하고 qna 활동을 하면서 다양한 관점으로 본 수업을 수강하고 있는 것을 알 수 있었습니다. 자유롭게 게시판 활동을 하면서 궁금한 점, 따라가기 어려웠던 부분을 해결하기 수월했던 것 같습니다. 또 제가 도움을 받았으니 다른 학우들에게 도움이 되어야겠다는 생각도 들면서 더 적극적으로 활동을 하고 수업을 들을 수 있었던 것 같습니다. 이런 생각을 갖게 되어서 본 강의를 수강하고 방학을 마무리하는 것이 더 뿌듯하다고 생각되었습니다. 추가로 인공지능을 위해서 필요한 수학적 개념들을 전반적으로 알아볼 수 있었고 이를 활용해서 실습해볼 수도 있었습니다. 막연하게 어렵다고만 생각되었던 인공지능을 더 이상 두려워하지 않게 된 것 같습니다. 혼자서는 배워보지 못했을 것을 강의를 듣고 활동을 해면서 많이 이해하고 원리를 깨달을 수 있었습니다. PCA 방법과 더불어서 오차역분석법은 정말로 실습을 진행하면서 애를 많이 먹었는데 그 부분에 대한 고민을 게시판 활동을 통해서 조금이나마 해소할 수 있었습니다. 이렇게 어려운 부분을 다같이 고민하면서 해결하는 방법을 익혔기 때문에 앞으로도 어려운 부분에 대한 두려움을 조금 내려놓고 질문하고 답변하면서 공부해나갈 수 있을 것 같습니다. 본 수업에서 배우고 발전시킨 것을 바탕으로 전공에서도 인공지능을 적용시킨 프로그램을 사용할 수 있을 때까지 추가적으로 공부해보려 합니다. 이렇게 많은 것을 느끼도록 강의를 진행해주신 교수님과 조교님, 많은 학우분께 감사의 마음을 느끼면서 본 final PBL 보고서를 마칩니다. 감사합니다.
[The End]
참고자료: [Midterm Exam에 대하여]
1. 매주 QnA에서 아래의 [열린 문제 (중간 1, 중간 2, 기말 1, 기말2)]에 제시된 문제를 스스로 풀어보고, 막히거나 궁금한 부분을 QnA에 질문하고, 답하는 등 토론 과정을 거친다.
2. 1의 과정을 통하여 그 질문과 답이 온전히 이해되면, 본인이 그 글에 또는 다른 학생이 새 글로, 제목에 <Finalized by (본인의 이름) + 코멘트 준 학생들 이름 + 질문의 Key Word>을 달아서, 질문과 답변 그리고 주요 논의 내용을 요약 또는 정리하여 QnA에 공유한다.
3. TA 또는 담당교수가 그 글을 채점하고 교정이 필요한 부분을 윤문하면서, [Final OK by TA] or [Final OK by SGLee]으로 확정해준다.
4. 정기적으로 본인의 이름 또는 ‘Final OK’로 검색하여, ‘Final OK’ 받은 것들에 본인이 기여한 것들을 모두 모아서, PBL 보고서의 <참여기록> 부분에 담고, 각각의 주제에 Final Comment를 달고 제출하여 평가 받는다.
5. 위와 같은 학습 활동을 한 것에 대하여 (간단한 문제 몇 개와 함께) 온라인 시험 and/or PBL 중간/기말 보고서 시험으로 치른다. Final PBL은 학생 각자의 이번학기 포트폴리오가 될 것이다. Good luck!!
6. <온라인 시험과 PBL 보고서는 아래 샘플이 이용될 수 있다.>
1. 2020년 여름 Math4AI- Final PBL 보고서 발표 0 박0아
2. 2020년 여름 Math4AI- Final PBL 보고서 발표 1 by 나0진-김0준-이0현-안0진
3. Math4AI-PBL-발표-2020학번-1학년-신입생-김0훈 발표
4. Math4AI PBL 보고서 발표 2학년 김0훈 https://youtu.be/kNFxp8SP5Rc
5. Tensorflow (텐서플로우) 학생 발표 https://youtu.be/BJuk3RaJeuA
6. GitHub(깃허브) 학생 발표 https://youtu.be/4A2sdsQyPKM
[Sample Online Exam]
Math4AI Online Midterm Exam (60점) +
Midtetrm PBL Report (40 점) = Total : 100점
[ 중간고사 ]
[열린문제 1] 다른 교재에서 찾은 몇 가지 다항함수의 개형을 그리시오.
[ Hint : plot ( -x^9 -5*x^4 -130*x^3 -53*x^2 +542*x +3 , (x, -10, 10)) ]
1)
2)
[열린문제 2]
그래프의 개형을 그리시오.
[열린문제 3] 앞에서 배운 함수들 중 학습한 함수의 합성함수를 만들고, 그래프를 그리시오.
[열린문제 4] 다음 학생들의 문제풀이를 참고하여 다양한 방정식의 (근사)해를 구하시오.
[열린문제 5] 행렬에 대해 학습한 다른 교재의 행렬 연산을 시행해 보시오.
http://matrix.skku.ac.kr/KOFAC/ 에서 실습하시오




[열린문제 6] 인터넷이나 다른 교재에서 5차 (이상) 행렬을 찾아서, 전치행렬과 역행렬이 존재하는지를 확인하고, 존재하면 찾아보시오.
A는 비가역행렬로 역행렬이 존재하지 않습니다.
[열린문제 7] 거리 척도를 사용하여 유사도를 계산할 수 있는 데이터의 종류에는 어떤 것이 있는지 생각해보시오.
2차원인 지도를 생각해볼 수 있습니다. 지도 내의 한 위치(데이터)는 위도와 경도라는 2차원 데이터로 표현되고, 지도 상의 두 개의 점이 가까이 있다는 것은 같은 국가, 같은 지역, 같은 동네와 같이 유사성이 높다는 것을 의미하고 반대로 멀리 있다는 것은 다른 국가, 다른 지역, 다른 지역과 같이 두 위치의 유사성이 낮다는 것을 의미합니다. 또한, 이를 3차원으로 확장해도 마찬가지 입니다.
[열린문제 8] 위의 거리 척도로 유사도를 판단하기가 용이하지 않은 데이터의 경우에 유사도를 판단하는데 사용이 가능한 다른 척도는 무엇이 있을지 생각해보시오. (Hint: 방향이 같은 데이터/벡터들의 경우)
데이터 분석가가 단지 데이터의 패턴(방향)에만 관심이 있는 경우, 이런 (거리)척도는 적합하지 않다. 예를 들어, 아래와 같이 좌표평면 상에 벡터로 표현된 두 데이터 와 는 패턴(방향)은 유사하지만 거리는 매우 큰 값을 갖게 되어, 이러한 (거리)척도로는 “두 데이터가 관계가 없다”라고 판단하게 되기 때문이다. 따라서 이러한 경우에는 두 데이터(벡터)가 이루는 사잇각 θ로 유사도를 측정할 수 있을 것이다. 두 예를 들어, θ가 작으면 데이터의 유사도가 높고, θ가 크면 데이터의 유사도가 낮다고 판단할 수 있다. 그러나 사잇각은 벡터의 내적으로부터 정의되므로, θ를 직접 계산하기 보다는 벡터의 내적을 이용하여 θ의 코사인 값으로 유사도를 측정한다. 이를 코사인 유사도라고 한다.
[열린문제 9] 두 개의 7차원 벡터(데이터) 사이의 거리(distance)를 직접 구하시오.
[열린문제 10] 어떤 데이터들이 코사인 유사도를 사용하여 분석 가능할지 생각해보시오.
‘단어(키워드)’입니다. BoW나 BoW에 기반한 단어 표현 방법인 DTM, TF-IDF, 또는 워드투벡터(Word2Vec) 등과 같이 단어를 수치화할 수 있는 방법이 있습니다. 따라서 이러한 표현 방법에 대해서 코사인 유사도를 이용하여 문서의 유사도를 구하는 게 가능합니다.
[열린문제 11] 두 개의 5차원 데이터(벡터) 사이의 내적과 사잇각
를 구하시오.
[열린문제 12] 다른 교재의 선형 연립방적식의 해를 위의 명령어로 구하시오.
[열린문제 13] 주어진 선형연립방정식이 유일해를 갖는지, 무수히 많은 해를 갖는지, 해가 존재하지 않는지를 판단하는 것은 첨가행렬
의 RREE를 구하여 이것만 자세히 보면 바로 판단이 가능한 이유를 설명하시오.
RREF의 마지막 행이 0이면 무수히 많은 해가 존재하고 A.solve_right(b)에서 에러가 뜬다면 이는 해가 없음을 나타내기 때문입니다.
[열린문제 14] 앞서 구한 방법으로
평면의 6개의 점에 (best fit 하는) 3차의 최소제곱곡선
을 구할 수 있음에 대하여 토론하시오.
x와 y의 관계를 가장 잘 보여주는(best fit 하는) 삼차식도 찾을 수 있습니다.
따라서 곡선 y=2-3x^2+x^3임을 구할 수 있습니다.
[열린문제 15] 예제4와 같은 방법으로 다른 교재에서 찾은 선형연립방정식의 최소제곱해를 구하시오. (Hint: http://matrix.skku.ac.kr/2018-album/LS-QR-decom.html 활용)
[열린문제 16] 예제 6과 같은 방법으로 다른 교재에서 찾은 행렬의 특잇값 분해(SVD)를 구하시오.
A=UΣVT 인지 확인해본다. (여기서는 ∥A−UΣVT∥2을 계산해본다.)
인공지능을 위한 기초 수학 강의 공부하면서 필기 올려보도록 하겠습니다~~~







[ 중간고사 과제 ]
[열린문제 1] 다른 교재에서 찾은 (연속) 미분가능한 함수의 3계 도함수(3rd derivative)를 구하시오.
따라서 72x + 48이 3계 도함수임을 알 수 있습니다.
[열린문제 2] 주어진 구간에서 두 번 미분가능한 함수를 골라서 그 함수의 극댓값, 극솟값 및 그 구간에서의 최댓값, 최솟값을 찾아보시오.
따라서 극값은 x=1/3일 때 256/27, x=3일 때 0이며, 최솟값은 x=-2일 때 –25, 최댓값은 x=5일때 24이다.
[열린문제 3] 함수
의 최솟값을 구하시오. 단
,
,
으로 한다.
[열린문제 4] 위의 그림과 같이 다양한 미분가능 함수인 경우, 일단 그래프의 개형을 그리고, 눈으로 확인되는 극솟값을 포함하는 작은 구간들을 정한다. 그 후, 각각의 구간에서 시작점을 잡아 경사하강법을 적용한다. 결과값(output)에 대하여 토론하시오.
Sample [예시] (학생들의 질문/답변/활동 기록:
도전학기 7주차 기말보고서 http://matrix.skku.ac.kr/2020-Math4AI-Final-pbl2/
도전학기 7주차 기말보고서 http://matrix.skku.ac.kr/2020-math4ai-final-pbl/
도전학기 4주차 중간보고서 http://matrix.skku.ac.kr/2020-Mid-PBL-2/
도전학기 4주차 중간보고서 http://matrix.skku.ac.kr/2020-Mid-PBL-1/
(영어) http://matrix.skku.ac.kr/2018-album/LA-PBL.htm (선형대수학)
http://matrix.skku.ac.kr/2015-album/2015-F-LA-Sep-Record.pdf
http://matrix.skku.ac.kr/Cal-Book1/Calculus-1/ (미적분학 1)
http://matrix.skku.ac.kr/Cal-Book1/Calculus-2/ (미적분학 2)
학생들의 질문/답변/활동 기록: http://matrix.skku.ac.kr/2020-Math4AI-PBL/ Basic Math for AI)
2021년 여름 도전학기 <인공지능을 위한 기초수학> Midterm and Final PBL 발표
Math4AI, 이시원 (1학년) Final PBL발표 (2021/08/21) https://youtu.be/DZWkpKHBEa8
Math4AI, 장지원 (2학년) Final PBL발표 (2021/08/21) https://youtu.be/8JCfSgpblFA
Math4AI, 권서영 Final PBL 발표 (2021/08/21) https://youtu.be/rHDmAidVlWE
Math4AI, 이지용 (1학년) Final PBL발표 (2021/08/21) https://youtu.be/sBAgbES_dtI
Math4AI, 김수민 (2학년) Final PBL발표 (2021/08/21) https://youtu.be/o4a53BXx3yU
Math4AI, 홍정명 (1학년) Final PBL발표 (2021/08/21) https://youtu.be/4ies3d0ZN-c
Math4AI, 손재민 (2019) Final PBL발표 (2021/08/21) https://youtu.be/NHbMi1126_A
Math4AI, 문가은 (2020) Final PBL발표 (2021/08/21) https://youtu.be/Ej2GZtEvRbs
MidTerm PBL 보고서 학생 발표 ...
Math4AI Midterm PBL 발표 1학년 이지용 (자연과학, 식품생명) https://youtu.be/vMwnFm_z-Rc
Math4AI 도전학기 Midterm PBL 발표 박정현 (통계) https://youtu.be/0Fi7ANwt9EU
Math4AI 도전학기 Midterm PBL 발표 유민솔 (PPT 발표) https://youtu.be/VK7KS4clrIY
Math4AI Midterm PBL 동나-DongNa-2017-Economics https://youtu.be/vz3smLY0Ehk
Math4AI 도전학기 Midterm PBL 발표 2학년 김은진(생명공학) https://youtu.be/lEgSP55j3Q4
Math4AI 도전학기 Midterm PBL 발표 1학년 이시원(글로벌경제) https://youtu.be/_mXXGsGtmms
Math4AI 도전학기 Midterm PBL 발표 1학년 김민서 (컴퓨터교육) https://youtu.be/LnzgTkN79pw
Math4AI 도전학기 Midterm PBL 발표 2학년 이혜연 https://youtu.be/YPA4LUBaoJ4
Math4AI 도전학기 Midterm PBL 발표 2학년 김보민(컴퓨터교육) https://youtu.be/rrz9W9bXggw
[보고서 양식 다운로드/PBL report Form Download]
Korean (HWP) : http://matrix.skku.ac.kr/PBL/PBL-Report-Form-Korean.hwp
English (MS Word) : http://matrix.skku.ac.kr/PBL/PBL-Report-Form-English.docx