np.linalg을 이용해 행렬 계산을 해보겠습니다. 1. 행렬식(np.linalg.det(x))행렬식을 구하는 방법입니다. 보통 행렬식이 0이 아니면 역행렬이 존재하므로 확인용으로 하거나 지금은 파이썬으로 할 것이라 역행렬을 구할 때 행렬식을 구하고 계산해서 쓰진 않을 거지만 실제 수학계산에서는 행렬식을 반드시 사용해주어야 합니다. 예로 2x2 행렬을 해보겠습니다. 2x2 행렬식이면 $ \begin{vmatrix} a & b \\ c & d \end{vmatrix} $ = ad-bc 로 계산이 됩니다. 만약 $ \begin{pmatrix} 1 & 2 \\ 3 & 2 \end{pmatrix} $ 라면 행렬식은 -4가 나옵니다. import numpy as nparray = np.array([[1,2..
이어서 회귀를 하겠습니다. 이전 포스팅에서는 메커니즘을 설명하기 위해 이미 알려진 데이터로 했는데요. 이번에는 데이터가 3차원인 경우에 대해 회귀를 진행해보겠습니다. 행렬을 이용해 구성할 수 있습니다. 실제로 회귀는 아는 데이터가 아니라 잘 모르는 데이터의 모양을 보고 진행을 합니다. 하지만 메커니즘을 위해 데이터의 모형을 다 안다는 전제하에 연습용으로 그려내겠습니다. 셋팅 먼저 데이터 값인 f(z)를 정의하겠습니다. 그리고 x, y 를 meshgrid를 이용해 격자로 펼치겠습니다. def f(z): x, y =z return np.sin(x)+0.25*x+np.sqrt(y) x = np.linspace(0,10,20) y = np.linspace(0,10,20) X, Y = np.meshgrid(x,y..
회귀 분석을 파이썬으로 구현(?)해보겠습니다. 회귀분석을 통해서 데이터 분석을 많이 하게 되는데요. 보통 선형 회귀 모델을 많이 쓰고 있는데 이번 포스팅에서는 일반적인 모형을 통해 전체적인 메커니즘을 정리해볼까 합니다. 오차에 대한 얘기는 빼겠습니다. 추후에 오차체크종류나 선형 회귀나 로지스틱 회귀에 대해 포스팅하겠습니다. 기회가 있다면요 ㅎㅎ 회귀 분석 회귀 분석이란 어떤 실험에 의해서 모여진 데이터(x,y 변수)에 대해 두 변수 사이의 모형을 구해 적합도를 측정하는 것이라 볼 수 있습니다. x에 따라 y값을 정할 수 있는 경우에 회귀분석을 쓰고 이런 관계에서 x는 독립변수, y는 종속변수라고 합니다. 적합한 모형의 선택은 분석자의 판단에 따라 달라지고 그에 따른 결과 또한 달라지게 됩니다. 회귀 분석..
회귀 분석에서 많이 쓰이는 최소 제곱 오차에 대한 수학적 설명입니다. 회귀 분석은 분포된 데이터 값을 한줄로 표현할 수 있는 적절한 함수를 찾아내는 것인데 최소 제곱 오차를 쓰면 괜찮은 함수를 찾아낼 수 있습니다. 가장 직관적인 접근을 적어놓겠습니다. Linear case 어떤 곡선을 넣을 것인가에 따라 방향이 달라질 수 있는데 가장 쉬운 방법인 최적의 직선을 만들어 보겠습니다. 즉, 직선은 $ y= a+bx $ 로 표현되는데 적절한 a와 b를 잘 찾아내어 최적의 함수를 구해보는 것입니다. 최적의 함수를 찾아내기 위해 최소 제곱 방법을 사용합니다. 최적의 직선을 $ y = a+bx $ 라고 합시다. 데이터 $ (x_i,f_i), \ \ i = 0,...,n $ 에 대해서, 각 데이터와 함수간의 에러를 $..
티스토리 썸네일을 어떻게 해야하는지 몰랐는데 최근에 그림판으로 썸네일 하는 방법을 배웠습니다. 업자가 아니라서 엄청 쉬운 글씨 쓰기 정도이지만 간단하게 할 수 있어서 방법을 기록겸 공유겸 포스팅하고자 합니다. 제동생이 그림을 간단히 만들어주어서 이 그림을 가지고 해보도록 하겠습니다. 썸네일 만들기 1. 그림을 그림판으로 엽니다. 선택을 누른 후 그림 아무데서 오른쪽 마우스 클릭해 크기 조정을 누릅니다. 크기는 정사각형을 만듭니다. 크기 조정에 들어가면 픽셀이 있는데 가로세로 비율유지를 해제하고 자신이 원하는 픽셀 크기를 써 넣습니다. 보통 250으로 한다고 합니다. (저는 잘몰라요..) 300, 400도 될지는 모르겠네요. 아무튼 정사각형으로 크기조정을 해야한다고 합니다. 자신의 그림보다 크게하면 그림이..
컴퓨터로 보간법을 사용한다고 할 때 코딩짜기 편한게 스플라인 보간법이 아닌가 싶습니다. 스플라인도 마찬가지로 주어진 데이터에 대한 다항식을 찾아내는 작업인데 piecewise 방법으로 접근한다는 게 다릅니다. 즉, 두점 사이의 다항식을 만들고 구한 각각을 함수가 연속되게 이어주는 작업을 하는 방법입니다. 다항식을 구하면서 동시에 다항식간 연속이 가능하도록 해야하기 때문에 수학적 지식이 조금 요구되지만 원리를 알기만 하면 됩니다. 실제로 구하는것은 컴퓨터고 워낙 유명해서 스플라인보간법에 대한 라이브러리가 이미 잘 갖추어져 있기 때문에 표준 라이브러리를 쓰면 됩니다. 물론 라이브러리가 맘에 들지 않아 커스텀하게 바꿀려고 한다면 당연히 원리를 알고 그에 맞게 코딩을 다시 짜야 할겁니다. 가장 쉬운 접근법 가장..
간격이 h로 같은 $ x_0, ..., x_n $ 인 경우의 보간법입니다. 즉 $ x_k = x_0 + kh $ 인 경우입니다. 특별한 케이스라고 볼 수 있습니다. 기존에 설명했던 여러가지 보간법에서 크게 벗어나지 않고 수학적으로 정리하고 수식 변형과 편리한 계산을 할 수 있어서 따로 정리한 경우입니다. 데이터의 시간이 일정한 경우 equispaced interpolation에 해당한다고 볼 수 있습니다. Prerequisites 내용 이해는 어렵지 않으나 일반적인 경우를 살펴보고 싶다면 아래 내용을 보시는 것을 추천드립니다. Divided difference interpolation Difference operators divided difference 와 역할이 비슷하지만 같은 간격의 데이터라는 전제..
vscode(Visual studio2019) 에서 Github 연동 방법입니다. 1. Visual studio 2019를 켭니다. 2. 위에 탭에서 확장 - 확장관리로 들어갑니다. 3. 온라인 탭에서 GitHub Extension for Visual Studio 를 눌러 다운로드를 클릭합니다. 저는 이미 다운을 받아놔서 체크표시로 나옵니다. 4. 보기 - 팀 탐색기를 클릭합니다. 맨 오른쪽에 팀탐색기-홈이 뜹니다. Github 탭에서 연결.. 을 누릅니다. 5. 브라우저로 로그인을 누릅니다. 계정이 없다면 등록을 누릅니다. 로그인을 하면 Authrize github 을 누릅니다. 6. 새 리포리지를 만들려면 파일 - 새로만들기 - 리포지토리를 클릭합니다. 리포지토리를 누르면 다음과 같이 나옵니다. 경로..
Largrange interpolation 을 컴퓨터로 실행하게 되면 $x_i-x_j$ 를 일일히 계산해야 해서 계산량이 많아져서 비효율적입니다. 이에 대한 계산비용을 줄이고 다양한 방식을 접목하기 위해 기호를 정의해서 계산량을 개선하는 시도입니다. Divided differences 미분을 보면 다음과 같습니다. $$ \frac{df(x)}{dx} = f'(x) = \lim_{h \to 0} {\frac{f(x+h)-f(x)}{h}} $$ 이 식을 해석을 해보면 x와 x+h 사이의 기울기를 h를 줄여가면서 순간 기울기를 구하겠다는 얘기입니다. f'(x)를 그림으로 그려보면 다음과 같습니다. 즉, tangent line을 그리는 것입니다. 미적분을 공부하면 다 아는 내용이지만 다시 정리를 해보았습니다. ..
이전에 쓴 포스팅인 Polynomial interpolation 을 연결하는 내용입니다. 이번 포스팅은 Lagrange interpolation 에 대한 내용입니다. 이전 포스팅에서는 세 점의 데이터를 가지고 quadratic polynomial로 보간함수를 만드는 작업을 했었습니다. 이번에는 점이 n+1개인 경우입니다. 사실상 많은 숫자를 의미하는데 계산편의를 위해 n+1개로 하겠습니다. $ (x_0,f_0),...,(x_n,f_n) $ 의 데이터에서 보간함수 $P_n(x)$ 를 만들려고 합니다. 당연히 같은 값의 점은 하나도 없습니다. 만들어야 하는 보간함수 $P_n(x)$ 는 $P_n(x)$ 의 차수(degree)는 n보다 작았으면 좋겠고 지금 사용할 데이터 $ (x_0,f_0),...,(x_n,f..
보간(interpolation)을 할 때 누구나 생각할 수 있는 방법이 다항식을 이용한 방법입니다. 점으로 데이터를 가져올 것이라서 그걸 잇는 방법으로 직선이나 곡선으로 이을것인데 다항식은 직선이나 곡선을 만드는 식이니깐 심플하게 시도해 볼 수 있습니다. 수학적으로 어느정도까지 만들어낼 수 있는지 살펴보겠습니다. Linear interpolation 먼저 두점부터 생각해봅시다. 두 점을 잇는 건 다항식으로는 직선으로만 할 수 있습니다. 어떤 선(y=ax+b)이 두 점 $ (x_{0},f_{0}), (x_{1},f_{1}) $을 지난다고 하면 다음과 같이 쓸 수 있습니다. $$ f_{0} = a+bx_{0} $$ $$ f_{1} = a+bx_{1} $$ 목적은 직선을 생성하는것이니 적절한 a와 b를 만들어..
cx 파일 탐색기를 쓰면 한글이 깨져서 그걸 대체하거나 해결할 수 있는 방안이 있나 찾아보았습니다. 역시나 있더군요. 파일질라라는 프로그램을 pc에 설치하고 파일질라를 통해서 파일전송을 하면 한글이 깨지지 않았습니다. 파일질라(FileZilla) 다운로드 설치는 쉬운데 파일 다운로드할때 광고가 뜨니 구별을 잘 해야하는 것 같습니다. 어쨋든 아래 사이트가 파일질라 다운로드 사이트입니다. https://filezilla.softonic.kr/ FileZilla 신난다 무료 FTP 클라이언트 filezilla.softonic.kr 사이트에 들어가면 다음과 같이 다운로드 버튼을 볼 수 있습니다. mac - 갤럭시으로 쓰시는 분도 계실지는 잘 모르겠지만 mac용은 스크롤을 밑으로 내리면 있습니다. 아무튼 위 그림..
수학 카테고리에서는 수학내용은 코딩은 하지 않고 지식만 정리하겠습니다. 수치해석을 하려면 미적분학과 선형대수의 지식이 어느정도 알아야 하긴 하는데 일일히 다 설명하기가 어려우니 어느정도 다 안다고 가정하고 정리를 하겠습니다. 다항식 $ p_{n} $을 표현해보겠습니다. 미적분학에서는 멱급수과 테일러 급수로 다항식을 무한 차수에 대해 표현하는데 데이터는 무한으로 갈 수 없으니 유한한 차원에 대해서 설명하겠습니다. Power form 먼저 power form 부터 보면, 식이 $ 1,x,x^2,...,x^n $ 으로 이루어진 linear combination으로 나타내게 됩니다. 가장 큰 차수가 n이니 degree가 n이 되겠습니다. $$ p_{n} = a_{0} + a_{1}x + a_{2}x^{2} + ..
보간법은 데이터만으로 그래프를 만들어갈 때 쓰는 방법입니다. 생각해보면 얻어낸 데이터 연속적일 수 없습니다. 왜냐하면 x축을 시간이라고 보면 시간은 연속이지만 저는 특정 시간마다 데이터를 추출해오기 때문이죠. 그렇지 않다면 규칙이 확실히 이미 정해진 데이터라고 볼 수 있습니다. 규칙이 있으니 함수로 수식으로 나타낼 수 있기 때문에 데이터를 굳이 받아올 필요가 없습니다. 어쨋든 늘 빈 곳이 존재합니다. 한정된 데이터를 가지고 연속적인 그래프로 나타내야 하는데 사이사이를 나름의 규칙을 정해서 메꾸는 작업을 하는게 보간법입니다. 사실 보간법 전체로 보면 머신러닝에 가깝진 않습니다. 보간법도 근사하는 방식으로 접근을 하기 때문에 그 부분만 강조해서 보고 regression 기반인 머신러닝과 비교를 위해서 포스팅..
수치계산을 하다보면 반올림을 하거나 소수점 제한을 줘서 출력해야 하는데 numpy에서 그런 역할을 하는 메쏘드가 있습니다. np.set_printoptions라는 것인데요. 정밀화 과정을 하거나 표현을 쉽게 하기 위해서 값의 설정을 변경할 수 있습니다. 쥬피터로 작업을 하면 한번만 설정해놓으면 밑의 작업들 전체가 설정에 따르게 됩니다. np.set_printoptions의 많은 파라미터가 있지만 주요로 쓰는 파라미터만 포스팅하고 나머지는 가이드 사이트에서 확인하시기 바랍니다. 제가 쓸 파마리터는 precision, threshold, formatter 입니다. 소수점 반올림하기(precision) 소수점 반올림합시다. 이게 한번 설정하면 처음처럼 자연스레 돌릴수가 없어서 먼저 처음으로 돌아갈 곳을 알고 ..