기본 콘텐츠로 건너뛰기

2월, 2018의 게시물 표시

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

집합 자료형과 집합연산_python

python에서는 set이라는 집합 자료형을 제공합니다. 이 자료형은 집합들 간의 합집합 등의 연산을 위해 사용되는 형태입니다. 이번 글에서는 python 의 set 자료형에 의한 연산 종류를 알아봅니다. 우선 리스트등의 자료형을 집합형으로 전환하기위해서 set() 함수를 사용합니다. 다음은 주사위 두개를 던져 나올수 있는 모든 경우입니다. >>> S=[(i, j) for i in range(1, 7) for j in range(1, 7)] >>> print(S) [(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)] 다음 A와 B는 각각 두수의 합이 2의 배수, 3의 배수인 경우입니다. >>> A=[(S[i][0], S[i][1]) for i in range(len(S)) if (S[i][0]+S[i][1])%2 ==0] >>> print(A) [(1, 1), (1, 3), (1, 5), (2, 2), (2, 4), (2, 6), (3, 1), (3, 3), (3, 5), (4, 2), (4, 4), (4, 6), (5, 1), (5, 3), (5, 5), (6, 2), (6, 4), (6, 6)] >>> B=[(S[i][0], S[i][1]) for i in range(len(S)) if (S[i][0]+S[i][1])%3 ==0] >>> print(B) [(1, 2), (1,

확률의 개요

확률이란... 확률은 미래에 발생할 사건에 대한 믿음의 측정값입니다. 어떠한 사건에 대해 그 사건이 일어날 빈도수를 전체사건에서 차지하는 비율로 나타낼 수 있습니다. 확률은 통계의 기본이 되며 일상에서 많은 경우를 접하고 있습니다. 그러나 확률을 정의하는 것은 많은 사람들에게는 새로운 작업이 될 수도 있습니다. 그러나 이것은 일상에서 접하는 것을 서술하는 것으로 사실 새로운 것은 아닙니다. 1. 용어 이러한 확률을 다루기 위해서 몇가지 알아야할 용어가 있습니다. - 확률실험(random experiment, 시행) 실험결과를 예측할 수 없는 실험을 말하며 실험결과를 알 수 없다는 것은 실험의 모든 시행의 가능성이 동일하다고 할 수 있습니다. 예를들어 동전던지기에서 앞과 뒤가 나올 확률은 동일합니다. 이러한 실험을 확률실험이라고 합니다. - 표본공간(sample space)와 원소(element) 확률실험의 각 결과를 원소라 하며 그 실험의 모든 결과를 모아 놓은 공간을 표본공간이라고 합니다. 주사위 던지기 실험 역시 각 눈의 값이 나올 확률은 동일하므로 확률실험이며 이 실험에서 나올 수 있는 결과(사건)은 1, 2,3 ,4,5 ,6 입니다. 이 모든 사건들의 모임을 표본공간이라고 하고 이 실험에서 표본공간(S)은 S={1,2,3,4,5,6} 이며 각 값들을 원소라고 합니다. - 사건(event) 또는 집합(set) 확률실험에서 관심의 대상이 되는 원소들의 모임을 사건 또는 집합이라고 합니다. 특히 확률이 정의된 집합을 사건이라고 합니다. - 벤다이어그램(Venn Diagram) : 집합간의 관계를 그림으로 나타낸 것입니다. 그림 1 벤다이어 그램  - 전체집합(Universe set) : 샘플공간과 같으며 실험에서 발생하는 모든 원소들의 집합입니다. 그림 1에서 S - 공집합(Empty set) : 원소가 하나도 없는 집합 ($\emptyset$) - 합집합(Union) :  각 집합에 속한 모든 원소들의

조합과 순열

조합과 순열 (Combination & Permutation) 조합의 정의 조합은 전체 집합중에서 일정한 수의 부분집합을 선택하는 방법의 수로 그 순서는 고려하지 않습니다 . 다음과 같이 나타내지요 . $\left( \begin{array}{rr} n \\ p \end{array}\right)$ or $C_n^p$  로 표현합니다 . 위의 의미는 전체 n 원소들로 이루어진 집합에서 p 개의 일부 원소들 취해 부분집합을 만드는 방법으로 위의 표현은 $ n^p$ 로 계산됩니다 . 2 진법으로 6 자리를 만드는 방법의 수는 다음과 같이 계산됩니다 . $\left( \begin{array}{rr} 2 \\ 6 \end{array}\right)=2^6$ 모든 자리에 0, 1 중의 하나를 선택하고 이러한 경우가 6 번이므로 $ 2 \times 2 \times 2 \times 2 \times 2 \times 2$ 이 됩니다 . 위와 같은 결과이지요 . {a, b, c, d, e} 중에서 서로 다른 세개만을 선택하는 방법을 생각해보면 먼저 a 를 선택한 후 나머지를 선택하는 방법은 다음과 같이 12 가지가 됩니다 . a b c d e c b d e d b c e

고유값과 고유벡터, eigendecomposition

$n \times n$정방행렬 A에 대해 다음의 방정식이 만족되는 경우를 생각할 수 있습니다.  $A \cdot v = \lambda \cdot v$ (1) v : $n \times 1$인 벡터 $\lambda$ : 스칼라 위 방정식의 어떤 해(solution)인 $\lambda$를 고유값(eigenvalue)라고 하며 특성값(characteristic value)이라고도 합니다. 이 고유값에 해당하는 벡터 v를 고유벡터(eigenvector)라고 합니다. 위 방정식은 다음과 같이 나타낼 수 있지요. $A \cdot v - \lambda \cdot v=0$ (2) $A \cdot v - \lambda \cdot I \cdot v=0$ (3) $(A - \lambda \cdot I )\cdot v=0$ (4) v가 0이 아닌 벡터라면 위 식에서 다음이 만족되어야만 합니다. $|A-\lambda \cdot I|=0$ (5) 이 식을 A의 특성방정식(character equation)이라고 하며 n개의 근을 가지는 n차 다항식이 됩니다. 이 근들은 A의 고유값이 됩니다. 다음의 2x2의 행렬을 예로 고유값과 고유벡터를 계산해 봅니다. a=np.matrix('0,1;-2, -3') a Out[128]: matrix([[ 0,  1],         [-2, -3]]) 위 행렬의 특성 방정식은 다음과 같습니다. $|A- \lambda \cdot I|= \left | \left [\begin{array}{rr} 0&1\\-2&-3 \end{array}\right] -\left[\begin{array}{rr}\lambda & 0 \\ 0 & \lambda \end{array} \right] \right |=0$ 위 식은 다음과 같이 정리 할 수 있습니다. $\left | \left[\begin{array}{rr} -\lambda &1 \\ -2 & -3-\lambda \end

공분산의미(ing)

공분산이란 다음은 일정한 평균과 분산을 가진 정규분포에서 미지의 값을 신뢰할 수 있는 구간과 평균, 표준편차의 관계를 나타내면 다음과 같습니다. 그림 1. 표준 정규분포 상에서 평균과 표준편차의 관계 위 그림에서 빨간 점선, 파란 점선, 녹색 점선은 분포의 전확률 중에서 누적확률 68,3%, 95.4%, 99.7%를 차지하는 경계를 나타내며 각 구간의 value(값)은 다음과 같습니다. red 점선 : CDF=68.3%, $\mu \pm \sigma$ blue 점선 : CDF=95.4%, $\mu \pm 2 \sigma$ green 점선 : CDF=99.7%, $\mu \pm 3\sigma$ 위 그림의 python 코드는 다음과 같습니다. plt.plot(x, rv.pdf(x), lw=2, label='pdf') plt.xlabel("value") plt.ylabel("Prob") lineref=[mu, rv.ppf(0.683), rv.ppf(1-0.683), rv.ppf(0.954), rv.ppf(1-0.954),           rv.ppf(0.997), rv.ppf(1-0.997)] cl=['black', 'red', 'red', 'blue', 'blue', 'green', 'green'] #plt.axvline(lineref[1], linestyle='--', color=cl[1]) for i in range(len(lineref)):     plt.axvline(lineref[i], linestyle='--', color=cl[i]) plt.text(-1, 0.3, "mu+-sigma", color="red") plt.text(-1, 0.2, "mu+-2*sigma",

데이터를 목록화하여 함수 적용_python

연속변수와 명목변수가 혼합된 데이터 셋의 경우 연속변수를 명목변수로 목록화하여 어떤 통계량을 계산할 필요가 있습니다. 특히 anova 등 분산분석시 이러한 과정이 필요합니다. 다음의 자료는 각 환기 시스템에 대한 유량을 측정한 것입니다.  import numpy as np import pandas as pd >>> ven     folate ventilation 1      243  N2O+O2,24h 2      251  N2O+O2,24h 3      275  N2O+O2,24h ... 20     270      O2,24h 21     293      O2,24h 22     328      O2,24h 위 자료들 중 ventilation의 종류에 따라 float를 분류할 목적입니다. ventilation의 종류는 pd.unique() 함수를 사용하여 알아볼수 있습니다. 이 함수는 데이터들 중 고유한 부분만을 추출하여 반환합니다.  >>> idx=pd.unique(ven["ventilation"]) >>> idx array(['N2O+O2,24h', 'N2O+O2,op', 'O2,24h'], dtype=object) 즉 ventilation은 3가지로 값들로 구성되어 있으며 이에 따라 float를 구분하여 각각에 대한 통계량을 계산하고자 합니다.  우선 반복문을 사용하여 다음과 같이 분류하고 각 분류된 그룹화된 데이터셋에서 평균과 합을 계산할 수 있습니다.  ven1={} ...: mu={} ...: tot={} ...: for i in idx: ...:     ven1[i]=ven[ven.iloc[:,1]==i].iloc[:,0] ...:     mu[i]=np.mean(ven1[i]) ...:     tot[i]=np.sum(