기본 콘텐츠로 건너뛰기

1월, 2022의 게시물 표시

[ML] 결정트리(Decision Tree) 모델

[data analysis] 베르누이와 이항확률분포

베르누이분포(Bernoulli distribution)와 이항확률 분포 내용 베르누이분포(Bernoulli distribution) 이항확률분포(Binomial distribution) 베르누이분포(Bernoulli distribution) 한번의 시행에서 성공 또는 실패(1또는 0)의 결과만을 보이는 확률분포를 베르누이분포(Bernoulli distribution) 라고 합니다. 확률변수는 두개의 값만을 포함합니다. 확률변수는 두개의 값만을 포함하며 확률질량함수는 식 1과 같이 나타낼 수 있습니다. \begin{align}f(x)& = P(X=x)\\ &=\begin{cases}p&\quad \text{for}\; x=1\\1-p&\quad \text{for}\; x=0\end{cases}\end{align} (식 1) 위 확률질량함수(PMF)는 하나의 매개변수(parameter) 즉, 확률 p에 의해 결정됩니다. 그러므로 이 분포는 식 2와 같이 나타냅니다. X ~ Bernoulli(P) (식 2) import numpy as np import pandas as pd from scipy import stats from sympy import * import matplotlib.pyplot as plt 예 1) 1개의 주사위를 시행하는 경우 확률변수는 다음과 같습니다. 표 주사위 시행에서의 확률변수 주사위 눈 x 1 or 3 1 other 0 이 분포의 확률질량함수(PMF)와 E(x)? 확률함수와 기대값은 식 3과 같이 계산할 수 있습니다. \begin{align}f(x)&=\left(\frac{1}{3}\right)^x \left(\frac{2}{3}\right)^{1-x}\\ E(x)&=1\cdot \frac{1}{3}+0\cdot \frac{2}{3}\end{align} (식 3)

[data analysis]이산확률분포: 확률질량함수(pmf)와 누적분포함수 (cdf)

이산확률분포 내용 확률질량함수(PMF) 누적분포함수(Cumulative Distribution Function, CDF) 확률분포는 샘플공간의 각 값과 그에 대응하는 확률로 구현됩니다. 즉, 변수의 값들과 확률 사이의 관계를 함수로 표현할 수 있습니다. 그 변수가 이산변수(discrete variable) 일 경우 각 값에 대응하는 확률은 대상이 되는 값들의 빈도를 비율로 나타냅니다. 이 경우 한 지점에 대응하는 확률을 표현할 수 있으며 확률질량함수 (Probability Mass Function, PMF) 라고 합니다. 그러나 연속변수(continuous variable) 의 경우 한 지점에 대응하는 확률을 계산할 수 없습니다. 대신에 일정한 구간에 대응하는 확률은 계산될 수 있습니다. 즉, 전체에 대해 일정한 구간의 밀도로 확률을 표현합니다. 이 경우의 확률함수를 확률밀도함수 (Probability Density Function, PDF) 라고 합니다. 두 경우 모두 일정한 변수구간에서의 각 확률의 합을 확률누적분포함수 (Cumulative Distribution Function, CDF) 라고 합니다. 확률함수는 변수에 대응하는 확률의 집중, 퍼짐등의 정보를 포함합니다. 이러한 정보에 따라 나타나는 특징적인 형태를 확률분포(probability distribution)라고 합니다. 데이터의 수가 증가할수록 분포는 특정한 형태로 수렴합니다. 그 특정한 분포의 형태는 몇 가지의 확률질량함수 또는 확률밀도함수로 나타낼 수 있습니다. 이러한 분포와 함수들은 여러 통계 분석의 근거를 제공합니다. 확률질량함수(PMF) 표본공간(S)의 각 사건(x)에 대응하는 확률(p)을 함수로 나타낼 수 있습니다. 즉, 확률은 사건에 의존하는 함수로 p(x) = f(x)의 형태로 나타낼 수 있습니다(식 1). S = {x 1 , x 2 , x 3 , …} (식 1) f(x i ) = P(X = x i ),   i = 1, 2, 3, … 표본공간이 이산변

Convolutional Neutral Network(CNN)

CNN Padding과 Stride CNN의 구조 CNN 모델 구축 Convolutional Neutral Network(CNN) CNN CNN(Convolutional Neural Networks)은 이미지 분류, 객체 감지, 분할 등과 같은 이미지 및 비디오와 관련된 기계 학습 문제를 해결하는 것으로 알려진 딥 러닝 모델 유형입니다. CNN은 학습 가능한 매개변수를 공유하는 함성곱충(convolutional layer)이라는 특수한 유형의 레이어를 사용하기 때문입니다. 가중치 또는 매개변수 공유는 이미지에서 학습할 패턴(예: 가장자리 또는 윤곽)이 이미지의 픽셀 위치와 무관하다고 가정하기 때문에 작동합니다. CNN의 구성; CONV: 합성곱 연산 → 활성화 함수:ReLU 등 → POOL:풀링연산 적용이유 다층 퍼셉트론 : 이미지를 1차원 텐서로 변환하여 입력층에 입력, 그러므로 공간적/지역적 구조의 정보(spatial/topological information)가 유실 합성곱 신경망: 공간적인 구조 정보를 보존하면서 학습할 수 있는 방법 공간 구조의 정보 : 이미지는 높이, 너비, 채널로 구성된 3차원 텐서 높이는 세로방향의 픽셀 수, 너비는 가로방향을 픽셀 수 채널은 색성분을 의미 예를들어 흑백이미지는 채널수가 1. 각 픽셀은 0~255사이의 값 CNN의 주요포인트는 이미지 전체 보다는 부분에 집중하며 집중한 정보와 주변정보들의 연관성을 찾는 것입니다. 예를 들어 새의 이미지에서 다른 형태들과 두드러진 특징은 부리에 있습니다. 그러므로 부리의 유무로 다른 형태들과의 구분할 수 있습니다. 이러한 이유로 전체를 파악하는 것보다는 부리부분 만을 조사하는 것이 더 효율적일 것입니다. 이와같은 중요부분을 이해하고자 하는 모델이 CNN입니다. 각 새들마다 부리의 위치에 차이가 있습니다. 그러므로 부리의 유무와 함께 주변 부분과의 연관성도 분석을 위한 대상이 됩니다. 이

지수와 로그 함수의 미분

내용 지수와 로그 함수의 미분 로그 곡선(Logarithmic Curve) 지수와 로그 함수의 미분 지수와 로그가 포함된 함수들을 미분합니다. 다음은 로그 함수입니다. $$\begin{equation} y = \log_ex \; \text{또는} \; \log(x) \end{equation}$$ 위 함수 y의 역함수는 지수함수가 됩니다. 지수 급수의 미분은 원래 형태와 같으므로 식 1과 같이 나타낼 수 있습니다. $$\begin{align}\tag{1} y &=\log_ex \rightarrow e^y=x\\ e^y &=\frac{dx}{dy}\\ \frac{dy}{dx}&=\frac{1}{\frac{dx}{dy}}\\ &=\frac{1}{e^y}\\ &=\frac{1}{x} \end{align}$$ 결과적으로 로그함수의 미분은 식 2와 같이 나타낼 수 있습니다. $$\begin{equation}\tag{2} \frac{d(\log_e x)}{dx}=\frac{dy}{dx}=x^{-1} \end{equation}$$ import numpy as np import pandas as pd from sympy import * import matplotlib.pyplot as plt 예 1)  $\displaystyle y=\log(x+a)$를 미분합니다. $$\begin{align} x+a&=e^y\\ \frac{d(x+a)}{dy}&=e^y \rightarrow \frac{dx}{dy}=e^y\\ \frac{dy}{dx}&=\frac{1}{e^y}\\ &=\frac{1}{x+a} \end{align}$$ a, x=symbols('a, x') y=log(x+a) diff(y, x) $\quad \small \color{blue}{\frac{1}{a + x}}$ 예 2)  $y = \log_{10}x$를 미분

지수와 로그함수

내용 지수함수(Exponential Function) 단순이자(simple interest) 복리 이자(compound interest) 오일러 수(Euler number) 지수 급수(Exponential series) 자연로그(Natural Logarithms) 지수와 로그함수 지수함수(Exponential Function) 주어진 시간 동안 항상 자신의 크기에 비례하는 방식으로 증가하는 양을 생각해 봅시다. 이러한 증가는 일정한 금리로 돈에 대한 이자를 계산하는 과정으로 설명할 수 있습니다. 자본이 클수록 주어진 시간에 대한 이자의 증가액은 커집니다. 이러한 이자는 단순이자 와 복리 이자 로 구분됩니다. 전자의 경우 자본은 고정된 상태로 유지되고 후자의 경우 이자가 자본에 추가되므로 원금에 대한 증가율 역시 증가됩니다. import numpy as np import pandas as pd from sympy import * import matplotlib.pyplot as plt 단순이자(simple interest) 원금이 1000원이고 연 이자율을 10%로 가정합니다. 이 경우 증분은 매년 100원이 됩니다. 다음 10년 동안 계속하면 그 시간이 끝날 때까지 총액이 2000원으로 원금의 두 배가 될 것입니다. 연 이자율이 5% 였다면 재산을 두 배로 늘리려면 20년, 연이율이 2%라면 50년이 소요될 것입니다. 연간 이자가 r 이면 재산을 두 배로 늘리기 위한 기간은 식 1에 의해 결정할 수 있습니다.(등차수열) $$\begin{align}\tag{1} y &= y_0(1 + Nr)\\ y_0&: 원금\\ r&: 연 이자율\\ N&: 보유기간(년) \end{align}$$ 복리 이자(compound interest) 원금 1000원과 10%의 연 이자율을 가정합니다. 매년 이자를 원금에 합산한다고 하면 1년후 원금은 1100원이 2년 후에

다층퍼셉트론(Multilayer Perceptron)

내용 다층 퍼셉트론(Multilayer perceptron)이란? custom layer의 생성 저장과 호출 주식자료에 적용 다층 퍼셉트론(Multilayer perceptron) 다층 퍼셉트론(Multilayer perceptron)이란? 가장 단순한 심층 네트워크를 다층 퍼셉트론(multilayer perceptron, mlp) 원시 데이터의 입력층(input layer) &rarrow; 1개 이상의 은닉층(hidden layer) &rarrow; 마지막 결과 출력층(output layer) 첫 입력층의 결과부터 이전 층의 결과는 다음 층의 입력이 되므로 모든 층들이 밀접하게 연결된 구조이므로 입력 데이터에 국한된 결과를 나타낼 가능성이 증가합니다. 즉, 과적합(over-estimate), 과소적합(under-estimate) 등에 대한 위험성이 증가되므로 그들에 대한 평가와 적절한 모델 선택이 중요합니다. 이러한 문제를 해결하는 데 도움이 되도록 가중치 감소 및 드롭아웃과 같은 정규화 기술들이 사용됩니다. 레이블(반응변수)이 아핀 변환(선형변환)에 의해 입력 데이터(특성, feature)와 관련되어 있다면 이 접근 방식으로 충분할 수 있지만 선형변환은 항상 증가 또는 감소의 변화만을 나타냅니다. 예를 들어 개인이 대출을 상환할지 여부를 예측하려는 경우 다른 모든 조건이 동일할 때 소득이 높은 신청자가 소득이 낮은 신청자보다 항상 상환할 가능성이 더 높다고 합리적으로 상상할 수 있습니다. 단조롭지만 이 관계는 상환 가능성과 선형적으로 연관되지 않을 가능성이 높습니다. 소득이 0에서 50,000으로 증가하면 100에서 105만으로 증가하는 것보다 상환 가능성이 더 크게 증가할 가능성이 높습니다. 이를 처리하는 한 가지 방법은 소득의 로그를 특성으로 사용하여 선형성이 더 명확해지도록 데이터를 전처리하는 것일 수 있습니다. 그러나 이러한 선형변환의 단조성은 여러 층들을 구성하는 것과 단일 층

[data analysis] 랜덤변수들의 결합

랜덤변수들의 결합 실제 자료 분석에서 두 개 이상의 변수들 사이의 관계가 분석 대상이 되는 경우가 빈번합니다. 예를 들어 암과 담배의 관계나 주가와 이자의 관계를 파악하기 위해 다양한 변수들이 필요합니다. 이러한 다변수의 상황에서 확률과 다양한 통계량들의 산출 과정은 단변수에서의 과정과 유사합니다. 예 1) A 학급 12명의 학생들 중 축구 선수가 3명이고 야구 선수가 4 명 있습니다. 다른 학급과 어떤 운동경기를 위해 3명을 선출하는 경우 모두 선수 출신 학생일 확률? 축구선수의 변수를 X, 야구선수의 변수를 Y, 나머지를 Z이라 하면 이 분포의 확률은 식 1과 같이 계산됩니다. \begin{align}P(X=x,\;Y=y,\;Z=z)&=\frac{\binom{3}{x} \binom{4}{y} \binom{5}{z}}{\binom{12}{3}}\\x+y+z&=12 \end{align} (식 1) itertools 모듈의 함수 itertools.combinations(data, r) 는 조합의 모든 내용을 반환합니다. 즉, 함수는 data 중에 r을 뽑는 모든 경우를 반환합니다. 이 함수를 사용하여 x, y, z으로 구성된 데이터에서 3명을 선택되는 모든 경우를 나타냅시다. import itertools data=['x']*3+['y']*4+['z']*5; data ['x', 'x', 'x', 'y', 'y', 'y', 'y', 'z', 'z', 'z', 'z', 'z'] case=list(itertools.combinations(data, r=3)) case[:3] [('x', 'x', 'x'), ('x', 'x', 'y&

[data analysis] 확률부등식

확률부등식 내용 마르코프 부등식(Markov's inequality) 체비셰프부등식(chebyshev's inequality) 확률변수의 각 요소와 그에 대응하는 확률의 관계를 함수로 나타낼 수 있으며 다양한 함수와 분포가 존재합니다. 이러한 확률분포로부터 다양한 통계량을 계산할 수 있으며 그들을 기반으로 어떠한 값이나 구간을 추정할 수 있습니다. 역으로 이 추정된 값이나 구간을 신뢰할 수 있는지를 검정해야 합니다. 이러한 구간을 신뢰구간이라 합니다. 이 기사에서 소개하는 마르코프와 체비셰프 부등식은 신뢰구간을 설정하는 이론적 근거가 되는 수학적 표현들입니다. 마르코프 부등식(Markov's inequality) 랜덤변수 x에 대해 g(x)가 음이 아닌 실수값 함수이면 임의의 양의 실수 c에 대해 식 1이 성립합니다. 이 식을 마르코프 부등식(Markov’s inequality) 이라고 합니다. $$p[g(x) \ge c] \le \frac{E[g(x)]}{c}$$ (식 1) 그림 1은 평균이 0이고 표준편차가 1인 표준정규분포 입니다. 이 분포에서 임의의 확률 변수 c이상의 확률은 그 확률분포 함수를 [c, ∞)에 대한 적분한 결과와 같습니다. 즉, 분포함수를 사용하여 지정된 구간의 누적확률을 계산할 수 있습니다. 그림 1. 정규분포(평균: 0, 표준편차: 1). fig, ax=plt.subplots(figsize=(4,3)) ax.plot(x, p, label="N(0, 1)") ax.fill_between(x[idx], p[idx], alpha=0.5) ax.spines['left'].set_position('center') ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False) ax.spines['bottom'].

역함수의 미분

역함수의 미분 함수 y = 3x의 종속 변수 y는 독립 변수 x에 의존합니다. 두 변수의 관계가 역전되는 경우는 다음과 같이 나타낼 수 있습니다. $\displaystyle x = \frac{y}{3}$ 이러한 형태를 역함수(inverse function) 이라고 합니다. 함수의 미분은 $\displaystyle \frac{dy}{dx}$가 되지만 역함수의 미분은 $\displaystyle \frac{dx}{dy}$가 됩니다. 이들의 곱은 1이 됩니다. 이 과정은 다음과 나타낼 수 있습니다. $$\begin{align} y = 3x & \rightarrow \frac{dy}{dx} = 3\\ x = \frac{y}{3} &\rightarrow \frac{dx}{dy} = \frac{1}{3}\\ \frac{dy}{dx}=\frac{1}{\frac{dx}{dy}} &\rightarrow \frac{dy}{dx}\cdot \frac{dx}{dy} = 1 \end{align}$$ 위 과정은 다음과 같이 코드화 할 수 있습니다. import numpy as np import pandas as pd from sympy import * import matplotlib.pyplot as plt x, y=symbols('x y') eq=y-3*x eq −3x+y y1=solve(eq, y) y1 [3*x] y1[0].diff(x) 3 x1=solve(eq, x) x1 [y/3] x1[0].diff(y) $\quad \small \color{blue}{\frac{1}{3}}$ y1[0].diff(x)*x1[0].diff(y) 1 식 $y = 4x^2$에 대해 역함수의 미분을 시행해 봅니다. x, y=symbols("x, y", real=True) eq=4*x**2-y eq 4x 2 -2 y1=solve(eq, y) y1 [4*x**2] dy=[i.diff(x) for

부분분수의 미분

내용 방법 1 방법 2 방법 3 부분분수의 미분 분수의 미분은 일정한 공식 을 적용하여 계산할 수 있습니다. 그러나 분수 자체가 단순한 표현으로 이루어지지 않았다면 미분 과정이나 결과는 매우 복잡할 수 있습니다. 만약 복잡한 분수 함수를 간단한 분수들로 분해할 수 있다면 계산이 보다 간편해질 것입니다. 이와 같이 분해된 간단한 분수들을 부분분수 라고 합니다. 예를 들어 다음 두 분수의 합을 계산해 봅니다. $$\begin{align} \frac{1}{x+1}+\frac{2}{x-1}&=\frac{x-1+2(x+1)}{(x+1)(x-1)}\\ &=\frac{3x+1}{x^2-1} \end{align}$$ 위 과정은 3개 이상의 여러 분수에서도 이루어질 수 있습니다. 또한 역으로 진행될 수 있습니다. 즉, 분수를 부분 분수로 분할할 수 있습니다. 그러나 이러한 과정은 대수분수 (분자의 가장 큰 차수가 분모의 최고의 차수보다 작은 분수)에서만 이루어질 수 있습니다. 예를 들어 $\displaystyle \frac {x^2+2}{x^2-1}$의 경우는 분자와 분모의 차수는 2차로 같습니다. 이러한 경우 다음과 같이 분리할 수 있습니다. $$\frac{x^2+2}{x^2-1}=1+\frac{3}{x^2-1}$$ 위의 식 중 $\displaystyle \frac{3}{x^2-1}$은 분자의 차수가 분모의 차수 보다 낮은 대수 분수이므로 부분 분수로 분리할 수 있습니다. 이와같이 부분 분수로 분해하는 방법은 다음과 같이 몇 가지로 구분할 수 있습니다. 방법 1 위 예의 결과 $\displaystyle \frac{3x+1}{x^2-1}$의 경우를 역으로 생각해 봅니다. 분모의 인수분해가 가능하면 그 분모의 인수에 의해 다음과 같이 분해할 수 있습니다. $$\begin{align} \frac{3x+1}{x^2-1}&=\frac{3x+1}{(x+1)(x-1)}\\ &=\frac{A}{x+1