기본 콘텐츠로 건너뛰기

라벨이 math인 게시물 표시

통계관련 함수와 메서드 사전

A B C d E F G H I K L M N O P Q R S T U V W Z A statsmodels.ap.stats.anova_lm(x) statsmodels.formula.api.ols 에 의해 생성되는 모형 즉, 클래스 인스턴스(x)를 인수로 받아 anova를 실행합니다. np.argsort(x, axis=-1, kind=None) 객체 x를 정렬할 경우 각 값에 대응하는 인덱스를 반환합니다. Axis는 기준 축을 지정하기 위한 매개변수로서 정렬의 방향을 조정할 수 있음(-1은 기본값으로 마지막 축) pandas.Series.autocorr(lag=1) lag에 전달한 지연수에 따른 값들 사이의 자기상관을 계산 B scipy.stats.bernoulli(x, p) 베르누이분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 p: 단일 시행에서의 확률 scipy.stats.binom(x, n, p) 이항분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 n: 총 시행횟수 p: 단일 시행에서의 확률 C scipy.stats.chi2.pdf(x, df, loc=0, scale=1) 카이제곱분포의 확률밀도함수를 계산 $$f(x, k) =\frac{1}{2^{\frac{k}{2}−1}Γ(\frac{k}{2})}x^{k−1}\exp\left(−\frac{x^2}{2}\right)$$ x: 확률변수 df: 자유도 pd.concat(objs, axis=0, join=’outer’, …) 두 개이상의 객체를 결합한 새로운 객체를 반환. objs: Series, DataFrame 객체. Axis=0은 행단위 즉, 열 방향으로 결합, Axis=1은 열단위 즉, 행 방향으

R 수학과 통계등의 내장함수들

내용 함수들 수학함수 통계함수 확률함수 문자함수 유용한 함수들 데이터 관리를 위한 함수들과 제어문 함수들 수학함수 수학함수 함수 설명 abs(x) 절대값반환 abs(-4) → 4. sqrt(x) 제곱근, sqrt(25) → 5 &eqiv; 25^(0.5). ceiling(x) x보다 작지않은 가장 작은 정수 ceiling(3.21) → 4 floor(x) x보다 크지않은 가장 큰 정수 floor(3.21) → 3 trunc(x) x의 값 중 숫점 이하의 값을 버림으로서 형성된 정수 trunc(3.21) → 3 round(x, digits=n) x의 지정한 자릿수+1 에서 반올림 round(3.475, digits=2) → 3.48. signif(x, digits=n ) x를 지정된 유효 자릿수로 반올림 signif(3.475, digits=2) → 3.5. cos(x) , sin(x) , tan(x) Cosine, sine, and tangent cos(2) → -0.416. acos(x) , asin(x) , atan(x) 삼각함수의 역함수, arc-cosine, arc-sine, and arc-tangent acos(-0.416) → 2. cosh(x) , sinh(x) , tanh(x) 쌍곡선 함수인 hyperbolic cosine, sine, and tangent sinh(2) → 3.627. acosh(x) , asinh(x) , atanh(x) Hyperbolic arc-cosine, arc-sine, and arc-tangent asinh(3.627) → 2. log(x, base=n) 밑수가 a인 로그함수 log(10, 2) = log(10)/log(2) \→ 3.321928

결측치와 무한값찾기

내용 결측값과 무한값 생성 결측값과 무한값 결정 무한값 결정 Nan 결정 결측치와 무한값찾기 이터 처리 과정에서 누락된 값이나 계산과정에서 무한값을 얻게되는 경우가 있는데 이러한 값들은 이어진 계산과정에서 에러를 발생하는 경우가 많습니다. 그러므로 분석 전 또는 분석 동안 이들의 처리 과정이 중요하며 그 일환으로 먼저 그들의 인식과정을 먼저 살펴봅니다. 결측값과 무한값 생성 numpy의 속성값인 np.nan 으로 결측치(nan(Not Any Number))를 인위적으로 생성할 수 있습니다.또한 무한값은 내장함수인 float() 를 사용하여 생성할 수 있습니다. import math import numpy as np import pandas as pd x=np.random.rand(20) x array([0.44245459, 0.8178457 , 0.19687037, 0.54456459, 0.2971784 , 0.9188978 , 0.37880048, 0.10845443, 0.84552398, 0.73500799, 0.8996776 , 0.38032666, 0.15925506, 0.70421241, 0.46348431, 0.76245393, 0.25619259, 0.92892586, 0.11489276, 0.51422256]) # 특정한 요소들을 nan 또는 infinity로 치환 x[3]=np.nan #nan x[9]=np.nan x[7]=float('inf') #inifinity x[16]=float('-inf') #-infintiy np.around(x, 4) array([0.4425, 0.8178, 0.1969, nan , 0.2972, 0.9189, 0.3788, inf , 0.8455, nan , 0.8997, 0.3803, 0.1593, 0.7042, 0.4635, 0.7625,

Machine learning을 위한 수학_pytorch

목차 Norms Autograd Probability Random Variables Norms 비공식적으로 벡터의 노름은 벡터의 크기를 알려줍니다. 여기에서 고려되는 크기의 개념은 차원이 아니라 구성요소의 크기와 관련이 있습니다. 선형 대수학에서 벡터 노름은 벡터를 스칼라에 매핑하여 일단의 속성을 만족시키는 함수 f입니다. 임의의 벡터 x가 주어지면 첫 번째 속성은 벡터의 모든 요소를 상수 인자 α로 스케일링하면 그 노름도 동일한 상수 인자의 절대값으로 스케일링된다는 것을 나타냅니다. $$f(\alpha x) = |\alpha|f(x)$$ 두 번째 속성은 친숙한 삼각형 부등식입니다. $$f(x+y) \lt f(x)+f(y) $$ 세 번째 속성은 norm은 음이 아니어야 합니다. f(x) ≥ 0 대부분의 상황에서 가장 작은 크기는 0이므로 의미가 있습니다. 최종 속성은 가장 작은 놈이 달성되어야 하고 모두 0으로 구성된 벡터에 의해서만 달성되어야 합니다. ∀ i , [x] i =0 ↔ f(x) = 0 유클리드 거리(Euclidean distance) 는 norm입니다. 특히 L2 norm입니다. n차원 벡터 x의 요소가 x 1 , … , x n . x의 L2 노름은 벡터 요소의 제곱합의 제곱근입니다. $$\Vert x \Vert_2 = \sqrt{\sum^n_{i=1} x^2_i}$$ 위 식에서 아래첨자 2는 L2 norm을 의미하며 생략하여 나타내기도 합니다. 즉, $\Vert x \Vert_2$는 $\Vert x \Vert$와 같습니다. import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch u=torch.tensor([3.0, -4.0]) L2=torch.norm(u) L2 tensor(5.) 또한 벡터 요소의 절대값의 합으로 표현되는 L1 규범도 자주 사용합니다

Palindrome(회문) 결정하기

palindrome(회문) 순서를 역으로 해도 동일한 단어, 숫자, 문장을 나타내는 객체  첫번째와 마지막 원소가 동일    안쪽으로 하나씩 좁혔을 때 동일함 palindrome을 판단하기 위한 프로그램 def isPalindromeS(x):     target=str(x)     is_palindrome=True     for i in range(len(target)//2):         if target[i] != target[-1 -i]:             is_palindrome=False             break     return(is_palindrome) x=[121, "level", 12314] [isPalindromeS(i) for i in x] [True, True, False] 지정한 범위에서 palindrome를 발견 re=np.array([]) for i in range(10, 1001):     if isPalindromeS(i):         re=np.append(re, i) re array([ 11.,  22.,  33.,  44.,  55.,  66.,  77.,  88.,  99., 101., 111.,        121., 131., 141., 151., 161., 171., 181., 191., 202., 212., 222.,        232., 242., 252., 262., 272., 282., 292., 303., 313., 323., 333.,        343., 353., 363., 373., 383., 393., 404., 414., 424., 434., 444.,        454., 464., 474., 484., 494., 505., 515., 525., 535., 545., 555.,        565., 575., 585., 595., 606., 616., 626., 636., 646., 656.

솟수와 소인수 (Prime, Prime Factor)

솟수 1과 자신외의 값으로 나누어질 수 없는 수 def isPrimeS(x):     if x<=1:         return False     for i in range(2, x):         if x % i ==0:             return False     return True isPrimeS(7) True 위 프로그램을 사용하여 [1, 100] 사이의 솟수는 다음과 같습니다. re=np.array([]) for i in range(1, 101):     if isPrimeS(i)==True:         re=np.append(re, i) re array([ 2.,  3.,  5.,  7., 11., 13., 17., 19., 23., 29., 31., 37., 41.,        43., 47., 53., 59., 61., 67., 71., 73., 79., 83., 89., 97.]) 소인수  (Prime Factor) 소인수: 어떤 수를 얻기 위해 곱해지는 수들중 솟수들 6=2×3의 경우 2, 3은 6의 인수(factor) Prime Factorization(소인수 분해): 어떤수를 만들기 곱해진 수들 중에 소수들 12=2×6  12의 인수들은 2, 6으로 나타낼 수 있지만 6은 소수가 아니다. 즉, 별도의 인수를 가진다. 6=2×3 그러므로 12=2×2×3=2 2 *3 결과적으로 12의 소인수는 2, 3 입니다. 인수를 찾는 프로그램    factorS(x) 와 솟수인지를 검사하는 프로그램 isPrimeS() 를 사용하여 작성할 수 있습니다.  x=factorS(13195) re=np.array([]) for i in x:     if isPrimeS(i):         re=np.append(re, i) re array([ 5.,  7., 13., 29.]) 위 프로그램을 함수로 작성하면 다음과 같습니다. def primeFacto

피보나치 수열 생성(Fibonacci Sequence)

피보나치 수열은 앞의 두 수를 더하여 다음 수를 생성하는 수열로서 다음과 같이 코드를 작성할 수 있습니다. def fiboS(n):     #n=피보나치 수열의 갯수     fiboseq=np.array([1, 2])     for i in range(2, n+1):         fiboseq=np.append(fiboseq, fiboseq[i-2]+fiboseq[i-1])     return(fiboseq) fiboS(10) array([  1,   2,   3,   5,   8,  13,  21,  34,  55,  89, 144]) 위 결과는 numpy array로서 이들의 합을 위해서는 np객체.sum()을 적용합니다. fiboS(10).sum() 375 위 프로그램의 n은 수열의 갯수로서 정수입니다. 이것은 range() 함수의 인수이기 때문입니다. 정수형은 자릿수등의 한계가 존재하므로 얼마 이상의 값에서는 예기치 못한 값을 반환합니다. fiboS(50) array([          1,           2,           3,           5,           8,                 13,          21,          34,          55,          89,                ...          267914296,   433494437,   701408733,  1134903170,  1836311903,        -1323752223,   512559680,  -811192543,  -298632863, -1109825406,        -1408458269]) 그러므로 피보나치 수열을 생성할 경우 원소의 갯수가 아닌 그 합을 기준으로 하여 프로그램을 수정할 수 있습니다. 수정된 프로그램 역시 자료형의 크기에 한계가 있으므로 첫번째 프로그램보다 약간 개선된 결과를 보이지만 한계가 존재합니다. def fiboS(n):    

공배수와 공약수 (Common Multiple and Factor)

공배수의 합 Sum of Common Multiple 3 또는 5의 배수 자연수 10이하의 3 또는 5의 배수는 3, 5, 6, 9. 이들의 합은 23 re=0 for n in range(1, 1001):     if n%3==0 or n%5==0:         re=re+n re 234168 위 프로그램과 같이 1000이하의 3, 5 공배수의 합? re=0 n=0 while n<=1001:     if n%3==0 or n%5==0:         re=re+n     n += 1 re 234168 최소공배수 (Least Common Multiple) 두 수의 최소공배수 def lcmS(x, y):     re=[]     n=1     while len(re)<1:         if n%x==0 and n%y==0:             re.append(n)         n+=1     return(re)     lcmS(14, 215) [3010]  2 수 이상에서의 최소공배수는 numpy 배열을 사용합니다. def lcm_arrayS(x):     re=[]     n=2     while len(re)<1:         y=np.repeat(n, len(x))         z=n%x         if all(z==0):             re.append(n)         n+=1     return(re) x=np.array([3, 5, 9]) lcm_arrayS(x) [45] 약수(Factor) def factorS(x):     re=[]     for i in range(1, x+1):         if (x % i == 0):             re.append(i)     return(re) factorS(1219) [1, 23, 53, 1219] 공약수와 최대공약수

부분적분

미분의 곱 법칙과 연관 (fg)'=f'g+fg' $\int (fg)'dx=\int f'g dx+\int fg'dx \rightarrow fg=\int  f'g dx+\int fg'dx $ 위 식을 다음과 같이 다시 정렬할 수 있습니다. $\int fg' dx=fg-\int f'g dx $  Eq(1) 부분적분 위 식에서 f(x), g(x)를 각각 u, v로 치환하면 다음과 같이 정리됩니다. f(x)=u, g(x)=v → f'(x)dx=du, g'(x)dx=dv Eq(1)에 치환을 적용하면 $\int u dv=uv - \int v du$ 위 식을 지정한 구간 [a, b]의 정적분은 다음과 같이 계산됩니다. $\int^b_a u dv=uv|^b_a - \int^b_a v du$ 위 부분 적분의 절차를 프로그램 함수로 작성하면 다음과 같습니다. def partIntegralS(u, dv, Symbolvar, loup=0):     du=diff(u, Symbolvar)     v=integrate(dv, Symbolvar)     uv=u*v     vdu=integrate(v*du, Symbolvar)     if loup==0:         re=uv-vdu         return(re)     else:         re=uv-vdu         re1=re.subs(Symbolvar, loup[1])-re.subs(Symbolvar, loup[0])         return(re1) 예) 다음을 적분? 1) $\int xe^{6x}dx=x\frac{1}{6}e^{6x}-\int\frac{1}{6}e^{6x} dx\\=\frac{x}{6}e^{6x}-\frac{1}{36}e^{6x}+c\\ \because u=x, \;dv=e^{6x} \;\rightarrow\; du=dx,\; v=\frac{1}{6}e^{6x}$

Newton's Method

Newton's Method 모든 방정식이 정확한 해를 가지지는 않습니다. 이러한 경우 근사해(approximate solution)을 계산할 필요가 있습니다. 이러한 근사해를 계산하는 다양한 방법들 중에 가장 많이 사용되는 방법이 뉴턴의 방법입니다.  위 그림에서 파란선의 경우 x_0에서의 접선, 초록선의 경우는 x_1에서의 접선을 나타냅니다. 이 접선이 x축과 만나는 점을 기준으로 함수f(x)와의 점에서의 접선의 기울기는 f'(x_1)이 됩니다. 함수 f(x)의 해를  x_n이라고 하면 다음과 같이 초기 임의의 점 x_0에서 시작하여 x_n까지의 근사시킬 수 있습니다.  tangent line at x_0 : y=f(x_0)+f'(x_0)(x-x_0) x_1: 0=f(x_0)+f'(x_1)(x_1-x_0) → x_1=x_0-\frac{f(x_0)}{f'(x_1)} tangent line at x_1: y=f(x_1)+f'(x1)(x-x_1) 위 식을 적용하여 x_2는 다음과 같이 계산됩니다.  0=f(x_1)+f'(x1)(x_2-x_1)→ x_2=x_1-\frac{f(x_1)}{f'(x_2)} 위 과정은 x_n을 계산할 수 있을 때까지 반복할 수 있습니다.  위 과정을 다음과 같이 일반화 할 수 있습니다.  x_n이 f(x)=0의 근사해이고 f'(x_n) ≠ 0 이 아니면 다음식이 성립됩ㄴ다.  $x_{n+1}=x_n -\frac{f(x_n)}{f'(x_n)} 근사해를 계산하기 위해 위의 식을 적용할 경우 위 과정의 반복정도를 결정해야 합니다. 이 식은 근해를 계산하는 것으로서 반복수에 대한 일반적인 기준을 설정할 수는 없지만 각 반복의 결과의 차이가 매우 작을 경우까지 반복 계산을 합니다.  예) 뉴턴방법을 적용하여 구간 [0, 2] 에서  f(x)=cos(x)-x의 근사해를 계산합니다.  >>> i

삼각함수 미분공식

1. $ f(x)=x^n → f′(x)=nxn-1 or  \frac{d}{dx}(x^n)=nx^{n-1}$ 위 식을 증명하기 위해서는  n이 양수라고 가정합니다. 또한 이항정리를 사용합니다.  <이항정리>  $(a+b)^n=\sum^n_{k=0}\left(^n_k \right) a^{n-k}b^{k}\\=a^n+\left(^n_1 \right)a^{n-1}b+\left(^n_2 \right)a^{n-2}b^2+ \cdots +\left(^n_{n-1} \right)ab^{n-1}+\left(^n_n \right)ab^n\\=a^n+na^{n-1}b+\frac{n(n-1)}{2!}a^{n-2}b^2+\frac{n(n-1)(n-2)}{3!}a^{n-3}b^3+\cdots+nab^{n-1}+b^n$ 위 식의 전개에서  $\left( \begin{matrix} n \\k  \end{matrix} \right) =\frac { n! }{ k!(n-k)! } ,\quad n!=n\cdot (n-1)\cdot \cdots \cdot 2\cdot 1$ f(x)=xn 이라고 하면  $f^\prime(x)=\lim_{h \to 0}\frac{(x+h)^n-x^n}{h} \\=\lim_{h \to 0}\frac{(x^n+nx^{n-1}h+\frac{n(n-1)}{2!}x^{n-2}h^2+\frac{n(n-1)(n-2)}{3!}x^{n-3}h^3+\cdots+nxh^{n-1}+h^n)-x^n}{h} \\=\lim_{h \to 0} \; nx^{n-1}+\frac{n(n-1)}{2!}x^{n-2}h+\frac{n(n-1)(n-2)}{3!}x^{n-3}h^2+\cdots+nxh^{n-2}+h^{n-1} \\=nx^{n-1}$ 2. $\lim_{\theta \to 0} \frac{sin \theta}{\theta}=1$    위 그림은 원위의 두 접선을 기준으로 작성된 것으로 다음을 유도 할 수 있습니다. 증명과정을 간단히

무한대와 극한

1. 무한 극한  x=a 점으로 충분히 근접할 경우 극한값이 양(positive)의 무한대로 증가하면 또는 음(negative)의 무한대로 확장되는 것을 다음과 같이 나타냅니다. $\lim_{x \to a}f(x) = \infty \, \;  \lim_{x \to a}f(x) = -\infty$ 이러한 경우 그 함수에 의해 x=a는 정의되지 않습니다. 1. $ f(x)=\frac{1}{x}$함수의 그래프를 그려보면 다음과 같습니다. 이 함수는 x가 0에 접근할 수록 값이 양의 무한대와 음의 무한대로 확장됩니다. 즉. $\lim_{x \to 0^+}\frac{1}{x} = +\infty, \; \lim_{x \to 0^-}\frac{1}{x} = -\infty$ 위의 결과와 같이 0에 대해 오른쪽 극한과 왼쪽 극한이 일치하지 않습니다. 즉, 그 점에서는 불연속이므로 x=0에서의 극한 값은 존재하지 않습니다. $\lim_{x \to 0^+}\frac{1}{x} \; \text{doesn't exist}$ 2. $ f(x)=\frac{1}{x^2}$? 위 함수는 극한은 다음과 같이 나타낼 수 있습니다. $\lim_{x \to 0^+}\frac{1}{x} = \infty, \; \lim_{x \to 0^-}\frac{1}{x} = \infty$ 위 결과와 같이 x=0에 대해 왼쪽극한과 오른쪽 극한은 같습니다. 그러므로 0에 대한 극한은 $ \infty$입니다.  $\lim_{x \to 0^+}\frac{1}{x} = \infty$ 위 두 문제로 부터 다음을 정의할 수 있습니다. x=a에서 다음이 성립하면 함수 f(x)는 x=a를 기준으로 대칭입니다. $\lim_{x \to a^-} f(x) = \pm \infty, \;  \lim_{x \to a^+} f(x) = \pm \infty, \;  \lim_{x \to a} f(x) = \pm \infty$ 3. 함수 $f(x) = \frac{3}{(4-x)^3}$에 대

극한(Limit)의 개념

내용 접선과 외선 극한(limit) 1. 접선과 외선 한 점 x에서의 함수 f(x)의 접선 (tangent line)은 그 점에서 함수의 그래프를 스쳐지나가는 직선으로 그 점과 평행입니다. 그림 1. 위 그림에서 직선 y는 곡선 f(x)위의 점 A(0.3, f(0.3))에 대한 접선입니다. 이 접선은 곡선의 다른 점 B를 통과합니다. 이와같이 어떤 점의 접선이 동일한 함수의 다른 점과 교점을 이루는 선을 외선 (scant line)이라고 합니다. 위의 경우 직선 y의 식은 접점(점A)과 외선을 이루는 점B를 알 수 있으므로 쉽게 계산할 수 있습니다. 예 1)   x=1에서 $f(x)=15-2x^2$의 접선? 그림 2. 위 그림에서 f(x) 위의 접점 A를 지나는 접선 a의 식을 계산하기 위해서는 a를 지나는 다른 점을 알거나 그 직선의 기울기를 알아야 합니다. 위 그림에서는 두 가지 모두 미지수입니다. 그러나 함수 f(x)위의 두 점 A와 B를 지나는 직선을 계산할 수 있습니다. 이 직선을 이용하여 접선을 추정할 수 있습니다. 위 그림에서 b의 기울기는 다음과 같이 계산할 수 있습니다. $$\frac{f(0.5)-f(1.32)}{0.5-1.32}$$ import numpy as np import pandas as pd from sympy import * x=symbols("x") f=5-2*x**2 s1=(f.subs(x,0.5)-f.subs(x, 1.32))/(0.5-1.32) N(s1, 2) −3.6 그림 2의 점 B가 점 A쪽으로 근접할수록 직선 b는 직선 a와 근사해질 것입니다.(그림 3) A로 수렴하는 여러 점들에 대한 기울기를 계산하면 다음과 같습니다. x_p=np.linspace(0.51, 1, 5) np.around(x_p, 2) array([0.51, 0.63, 0.76, 0.88, 1. ]) slope=[] bias=[] for j, i in enumerate(

sympy와 미분

미분 sympy 에서 미분은  diff()  함수를 사용합니다 . diff( 식 ,  기준이 되는 변수 ) >>> from sympy import * >>> x, y, z = symbols('x y z') >>>  diff(cos(x),x) -sin(x) >>>  diff(exp(x**2), x) 2*x*exp(x**2) 위의  diff() 에 의한 미분은  1 차 미분을 나타낸 것이고 다중 미분역시 이 함수를 사용하여 수행할 수 있습니다 .  다중 미분을 위해서 미분을 위한 변수를 여러차례 전달해야 한다 .  즉 ,  변수를 전달하는 횟수만큼 미분이 실행됩니다 .  다음은  4 제곱인  x 를  4 번 미분한 것으로 결과는  24 입니다 . >>>  diff(x**4, x) 4*x**3 >>>  diff(x**4, x,x,x,x) 24 즉, 위의 경우는$((((x^4)^{\prime})^{\prime})^{\prime})^{\prime})$과 같습니다. 이와같은 다중 미분은 다음과 같이  diff(식, 변수, 미분횟수) 로 사용할 수 있습니다.  >>>  diff(x**4, x,4) 24 미분을 여러번 시행할 경우 횟수만큼 변수를 전달하는 대신 대상이 되는 변수와 함께 미분의 횟수를 전달하는 것으로 동일한 효과를 나타낼 수 있습니다 . 이 방법으로 다중의 변수에 대해 미분을 실행할 수 있습니다. 즉,  함수에 전달하는 변수의 순서에 따라 미분이 실행됩니다 .  예를들어 다음을 실행합니다 . >>> eq=exp(x*y*z) >>> diff(eq, x) y*z*exp(x*y*z) $eq1=frac{d(e^{xyz})}{dx}=yz e^{xyz}$ >>> diff(eq, x, y) z*(x*y*z + 1)*e