기본 콘텐츠로 건너뛰기

라벨이 numpy인 게시물 표시

[matplotlib]quiver()함수

[Linear Algebra] 파이썬으로 행렬 객체 만들기

행렬 객체 만들기 python에서 행렬 객체를 생성하기 위해서는 numpy, pandas 모듈을 사용합니다. numpy 모듈에서 array() 함수는 다른 행렬 객체를 생성하는 대부분 함수의 기반이 되는 함수입니다. import numpy as np from sympy import * x=np.array([1,2,3]); x array([1, 2, 3]) 위 객체 x는 3개의 요소로 구성된 벡터입니다. 즉 하나의 차원을 가집니다( 차원(dimension) 참조). 객체의 차원과 그에 따른 형태는 각각 .ndim, .shape 속성을 확인할 수 있습니다. x.ndim, x.shape (1, (3,)) 위 결과에 의하면 객체 x는 1차원으로 3개의 요소들로 구성됨을 나타냅니다. 같은 요소들로 구성된 다음 객체 x1은 행렬입니다. x1=np.array([[1],[2],[3]]); x1 array([[1], [2], [3]]) print(x1) [[1] [2] [3]] 파이썬의 함수 print() 는 결과의 자료형 등의 속성을 배제한 상태로 출력합니다. x1.ndim, x1.shape (2, (3, 1)) 객체 x1는 2차원 즉, 2개의 축으로 행과 열로 구성됩니다. 그러나 행 또는 열 중 하나가 1일 경우 실제적으로 1차원인 벡터입니다. 파이썬에서 벡터와 행렬을 구분한다는 것은 매우 중요합니다. 벡터, 행렬 연산의 경우 기본적으로 차원을 조정해야 하기 때문입니다. 예를 들어 행과 열이 바꾸는 것을 전치(transpose)라고 하며 객체.T 로 실행됩니다. 그러나 벡터일 경우는 실행되지 않습니다. x.T array([1, 2, 3]) x1.T array([1, 2, 3]) 벡터인 객체 x를 행렬로 변경하기 위해 numpy객체.reshape(행의 수, 열의 수) 메소드를 사용할 수 있습니다. 이 함수에서 행의수 또는 열의수에 -1을 지정하면 다른쪽에 지정된 수에 의해 자동으로 변환됩니다. 예를 ...

[Linear Algebra] 선형변환(Linear transformation)

선형변환(Linear transformation) T: U → V은 벡터 공간의 U를 다른 벡터 공간 V로 옮기는 변환(함수)를 나타냅니다. 이 변환이 선형변환(Linear transformation)이 되기 위해서는 선형결합의 성립을 위한 식 1의 조건을 만족해야 합니다. 즉, 선형결합이 성립되는 벡터들은 선형변환이 가능하다는 것을 의미합니다. \begin{align} &\forall \; \text{u}_1,\; \text{u}_2 \in \text{U} \rightarrow T(\text{u}_1 + \text{u}_2) = T(\text{u}_1)+T(\text{u}_2)\\ &\forall \; \text{u} \in \text{U} \cap α \in \text{C} \rightarrow T(\alpha \text{u}) = \alpha T(\text{u})\\&u,\, v:\; \text{벡터, 스칼라} \end{align} (식 1) 예 1) 다음 식이 선형변환인지를 결정합니다. $$T\left(\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix} \right)=\begin{bmatrix}2x_1+x_3\\-4x_2\end{bmatrix} $$ 위 변환은 식 2와 같이 표준행렬 A에 의한 선형결합으로 나타낼 있습니다. \begin{align}\begin{bmatrix}2x_1+x_3\\-4x_2\end{bmatrix}&=\begin{bmatrix}2& 0& 1\\0& -4& 0\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\\\Leftrightarrow &\; T=Ax \end{align} (식 2) 식 2의 성립여부는 동차시스템으로 전환한 상태에서 해의 존재를 결정하는 것으로 확인할 수 있습니다. A=np.array([[2,0,1],[0,-4,0]]) c=np.ze...

[Linear Algebra] 행렬식(Determinant)

행렬식(Determinant) 관련된 내용 역행렬(Inverse matrix) 기약행 사다리꼴 형태 (Reduced row echelon form, rref) 역행렬이 존재한다는 것은 선형 시스템에서 유일한 해집합이 존재한다는 것을 의미합니다. 즉, 표준 행렬에 대한 역행렬의 존재는 유일한 해집합을 가질 수 있는 필수 조건입니다. 반대로 표준 행렬의 역행렬이 존재하지 않는다면 다양한 해집합들이 존재하거나 해가 존재하지 않는 상태입니다. 역행렬이 존재하지 않은 행렬을 특이 행렬(singular matrix) 이라고 합니다. 행렬은 그 행렬로부터 계산할 수 있는 행렬식(determinant) 이 0인 경우 역행렬이 존재하지 않는 특성을 가지고 있습니다. 즉, 행렬식은 어떤 행렬에 대해 특이 행렬 여부를 결정할 수 있는 근거가 됩니다. 행렬식은 det(행렬) 또는 |행렬| 과 같이 나타냅니다. 2×2 행렬의 행렬식은 식 1과 같이 쉽게 계산이 됩니다. $$A=\begin{bmatrix}a& b\\c & d \end{bmatrix} \Rightarrow \text{det(A)}=\vert{A}\vert =\vert{ad -bc}\vert$$ (식 1) 2×2 이상의 형태를 가진 정방 행렬의 역행렬은 소행렬식과 여인수 방법 으로 계산할 수 있습니다. 이 방법은 n×n의 행렬로부터 2×2 차원의 부분 행렬을 추출하고 식 1의 행렬식 계산을 반복하여 전체 행렬의 행렬식을 계산하는 것으로 n의 값이 커질수록 계산은 매우 번거롭습니다. 대신, 모든 정방행렬의 행렬식은 numpy.linalg.det() 함수를 사용하여 계산할 수 있습니다. A=np.array([[1,1,2], [2,4,-3], [3,6,-5]]) print(A) [[ 1 1 2] [ 2 4 -3] [ 3 6 -5]] AInv=la.inv(A) print(AInv) [[ 2. -17. 11.] [ -1. 11. -7.] [ 0. 3....

[Linear Algebra] 역행렬(Inverse matrix)

역행렬(Inverse matrix) 관련된 내용 기약행 사다리꼴 형태 (Reduced row echelon form, rref) 행렬식 식 1과 같이 두 행렬의 행렬곱 결과가 항등행렬 을 생성한다면 행렬 B는 행렬 A의 역행렬(inverse matrix) 이 되며 A -1 로 나타냅니다. 물론 역도 성립합니다. A · B = I → B = A -1 (식 1) 역행렬을 가지는 행렬을 가역행렬(reversible matrix) 이라고 하며 np.linalg.inv() 함수에 의해 계산할 수 있습니다. a=np.array([[1,3,-5], [-2,7,8], [4,0,6]]) print(a) [[ 1 3 -5] [-2 7 8] [ 4 0 6]] a_inv=la.inv(a) # a의 역행렬 print(a_inv.round(2)) [[ 0.134 -0.057 0.188] [ 0.14 0.083 0.006] [-0.089 0.038 0.041]] 위 코드의 결과 a_inv의 각 요소를 반올림을 실행하기 위해 .round() 메소드를 적용하였습니다. aa_inv=a.dot(a_inv) print(aa_inv.round(2)) [[ 1. 0. -0.] [ 0. 1. 0.] [ 0. -0. 1.]] 이 역행렬은 식 2와 같은 연립방정식의 해를 계산하기 위해 사용됩니다. $$\begin{aligned}x+y+2z&=9\\2x+4y-3z&=1\\3x+6y-5z&=0 \end{aligned} \Rightarrow \begin{bmatrix}1&1&2\\2&4&-3\\3&6&-5\end{bmatrix} \begin{bmatrix}x\\y\\z\end{bmatrix}=\begin{bmatrix} 9\\1\\0\end{bmatrix}$$ (식 2) 식 2의 우항은 식 3과 같이 방정식들...

[numpy] 차원(dimension)

차원(dimension) 차원은 임의의 점들을 나타내기 위해 필요한 축의 수로 정의할 수 있습니다. 다음 그림은 3차원까지를 나타냅니다. 한 개의 점(scalar)을 나타내기 위해서는 축이 필요하지 않습니다. 즉, 점은 0차원으로 정의합니다. 두점을 이은 선(vector)의 경우 두 점들을 한개의 축위에 나타내는 것으로 1차원으로 각 점 간의 거리를 나타낼 수 있으며 한 방향을 나타낼 수 있습니다. 두개의 선을 연결한 면(matrix)을 나타내기 위해서는 2개의 기본 축이 필요하므로 2차원으로 면적을 나타낼 수 있으며 두 방향을 나타낼수 있습니다. 두개의 면을 연결한 공간의 경우 3개의 기본 축하므로 3차원이 됩니다. 즉, 부피와 3개의 방향을 나타낼 수 있습니다. 3차원 이상의 경우는 tensor라는 용어로 나타냅니다. numpy 패키지의 기본 자료형인 array(배열)의 기본단위는 벡터이며 리스트 형태인 하나의 대괄호로 나타냅니다. 다음 객체 x는 한개의 숫자를 가지지만 벡터이므로 방향을 가집니다. 즉, 0에서 시작하여 2까지 이어지는 선을 나타냅니다. import numpy as np import numpy.linalg as la import matplotlib.pyplot as plt plt.rcParams['font.family'] ='NanumGothic' plt.rcParams['axes.unicode_minus'] =False x=np.array([2]) x array([2]) 벡터 x는 다음 그림 중의 하나로 나타낼 수 있습니다. 즉, 한개의 좌표가 필요하므로 1차원 벡터입니다. 그림 1. fig, ax=plt.subplots(1, 2, figsize=(4,2)) plt.subplots_adjust(wspace=0.3) ax[0].plot([0, 2], [0, 0], lw=2) ax[1].plot([0,0], [0,2], lw=2) plt.show() ...

[numpy] array 함수

array 함수 배열은 ndarray이라고도 하는데 이 용어는 N-dimensional array의 약어로서 여러개의 값들을 구조적으로 나타낼 수 있는 numpy 라이브러리 기본 데이터형입니다. 다음과 같은 특성을 가집니다. 배열은 여러개의 리터럴(literal, row data)을 포함할 수 있으며 각각을 요소(element)라고 합니다. 배열 내에 각 요소들은 인덱스(index)라고 하는 음이 아닌 정수형태의 특정한 번호를 가집니다. 모든 요소는 동일한 유형이어야 합니다. 배열은 여러 차원으로 구성할 수 있으며 차원을 ndim속성으로 확인할 수 있습니다. 배열의 모양은 각 차원의 수를 표시한 것으로 shape속성으로 확인 할 수 있습니다. numpy 배열 객체의 생성은 기본적으로 np.array() 함수를 사용합니다. np.array(객체, dtype=None) 객체는 리스트형입니다. 각 요소의 자료형은 dtype으로 지정할 수 있습니다. dtype=None(기본값)일 경우는 입력된 자료에 따라 자동으로 지정됨 다음은 1차원 배열을 생성하기 위해 리스트 형식인 [1, 2, 3]을 np.array()함수에 전달한 것입니다. import numpy as np a = np.array([1, 2, 3]) a #(1) array([1, 2, 3]) print(a) #(2) [1 2 3] 위 코드 (1)과 같이 객체를 반환하면 배열(array)가 명시되는데 반해 다음 코드(2)와 같이 print() 함수에 의한 출력은 단지 내용만을 반환합니다. 위 객체 a는 1차원 벡터로서 모든 요소들이 하나의 대괄호로 묶여있는 상태입니다. 다음 객체 A는 대괄호 내에 두개의 별도의 대괄호를 포함하는 구조입니다. A=np.array([[1,2], [3,4]]) print(A) [[1 2] [3 4]] 위 객체 A는 pandas.DataFrame() 함수를 적용하여 표의 형태로 나타낼 수 있습니다. Ad...

[numpy] 함수의 인자 axis에 대해

함수의 인자 axis 파이썬 패키지인 numpy는 1차원 벡터들을 기반으로 2, 3차원 등의 다양한 차원의 기반이 되는 배열(array)를 생성합니다. 그러므로 그들의 모양과 연산에 관련된 함수들의 인수 중에 axis를 포함합니다. 이 인수 axis는 값들이 나열 되는 축의 인덱스를 의미합니다. 즉, 다음의 1차원 벡터를 나타내기 위해서는 1개의 축만이 필요합니다. np.random.seed(1) x=np.random.randint(0, 10, size=3) print(x) [5 8 9] print(f"x의 모양: {x.shape}\nx의 차원: {x.ndim}") x의 모양: (3,) x의 차원: 1 위 객체 x의 모양은 1개의 숫자로 표현됩니다. 이것은 1개의 축위에 x의 값들을 나열할 수 있음을 나타내는 것으로 축 인덱스는 0만 존재합니다. 인덱스는 0부터 시작하는 음이 아닌 정수입니다. 다음 객체 X는 2차원 다음 객체 X는 2차원으로 모양을 나타내기 위해 2개의 수가 필요합니다. 즉, 두개의 축이 필요함을 의미하는 것으로 축 인덱스는 0과 1이 됩니다. np.random.seed(1) X=np.random.randint(0, 10, size=(3,4)) print(X) [[5 8 9 5] [0 0 1 7] [6 9 2 4]] print(f"X의 모양: {X.shape}\nX의 차원: {X.ndim}") X의 모양: (3, 4) X의 차원: 2 객체 X의 각 요소의 합을 계산하기 위해 함수 np.sum(객체, axis=None)을 사용합니다. 이 함수의 인수 axis는 축 인덱스를 지정하는 것으로 기본값은 None입니다. 이 경우 축을 무시하고 모든 요소의 합을 나타냅니다. np.sum(X) 56 axis=0인 경우 객체 X의 축 인덱스 0에서 다른 값들의 합을 계산합니다. 축인덱스: 1  ↓ 행/열 인덱스 0 1 2 3 1 축 합 축인덱...

[numpy]concatenate 함수

concatenate 함수 두 개 이상의 동일한 차원의 배열들을 연결합니다. np.concatenate((x,y,...), axis=0) 객체 x, y 등은 numpy array 또는 list, DataFrame 등 배열과 유사한 자료형 인수 axis에 배열들에 존재하는 축들 중의 하나를 지정 axis는 축인덱스를 의미 axis=0(기본값) : 행(1차원) 단위로 결합 axis=1: 열(2차원) 단위로 결합 존재하지 않은 축을 지정할 경우 예외 발생 다음은 두 1차원 배열(벡터)들을 연결하는 것으로 axis 인자는 0만 존재합니다. 그러므로 다음과 같이 결합 (3,) + (3,) = (6,) a=np.array([0,7,9]) b=np.array([8,3,5]) print(np.concatenate((a,b))) [0 7 9 8 3 5] 위 객체 a와 b는 모두 1차원 벡터이므로 축인덱스는 0만 존재하므로 다음과 같이 axis=1인 경우 없는 축을 지정하는 것으로서 예외(에러) 발생합니다. print(np.concatenate((a,b), axis=1)) AxisError: axis 1 is out of bounds for array of dimension 1AxisError: axis 1 is out of bounds for array of dimension 1 다음 객체 c와 d는 2차원 배열로서 axis=0은 다음과 같이 결합 ( 2 , 3) + ( 2 , 3) = ( 4 , 3) np.random.seed(10) c=np.random.randint(10, size=(2,3)) d=np.random.randint(10, size=(2,3)) print(np.concatenate((c, d))) [[9 4 0] [1 9 0] [1 8 9] [0 8 6]] axis=1 : (2, 3 ) + (2, 3 ) = (2, 6 ) print(np.concatenate((c,d...

[numpy] stack 함수

stack 함수 두 개이상의 배열 또는 list, DataFrame 등의 유사한 자료형의 객체들을 결합하기 위해 사용합니다. 결합하는 과정에서 새로운 축이 첨가 됩니다. np.stack((x,y,...), axis=0) 배열(x, y, …)들은 동일한 차원과 형태(shape) x, y등의 각 객체에 axis=정수로 지정된 축이 첨가되고 그 축을 기준으로 결합 인수 axis에 전달하는 정수는 축인덱스로 음이 아닌 양수 음수인 경우는 역인덱스, 예를 들어 -1인 경우 마지막 축을 의미 axis=0이 기본값 예를 들어 1차원과 2차원 객체들의 결합의 결과는 다음과 같이 전개됩니다. \begin{align} &\text{shape of x and y}:\, (3,)\\ &\begin{aligned} \text{axis = 0}\quad&\quad1\times 3\\&\underline{+\,1\times 3}\\& \quad2 \times 3 \end{aligned}\quad \begin{aligned} \text{axis = 1}\quad&\quad3\times 1\\&\underline{+\,3\times 1}\\& \quad3 \times 2\end{aligned} \end{align} \begin{align} &\text{shape of x and y}:\, 3\times 4\\ &\begin{aligned} \text{axis = 0}\quad&\quad1\times 3\times 4\\&\underline{+\,1\times 3\times 4}\\& \quad2 \times 3\times 4 \end{aligned}\\ &\begin{aligned} \text{axis = 1}\quad&\quad3\times 1\times 4\\...

[numpy] 배열의 차원 수정

배열의 차원 수정 배열의 차원을 수정하기 위해 reshape() 함수 또는 메서드 flatten(), ravel() 메서드, newaxis 의 속성을 사용할 수 있습니다. np.reshape(객체, shape), 객체.reshape(shape) 객체를 지정한 배열의 모양(shape)으로 변환 2차원 배열의 경우 인수 중 하나를 고정하고 다른 인수로 -1을 전달할 경우 자동으로 배분 import numpy as np x=np.random.randint(20, size=(3,4)) x array([[16, 5, 11, 6], [19, 19, 17, 14], [16, 16, 2, 4]]) print(x.reshape((2,6))) [[ 6 3 8 8 13 5]    [ 7 9 9 0 7 8]] print(np.reshape(x, (-1, 6))) [[16 5 11 6 19 19] [17 14 16 16 2 4]] print(x.reshape((6,-1))) [[16 5] [11 6] [19 19] [17 14] [16 16] [ 2 4]] print(x.reshape((4,3))) [[16 5 11] [ 6 19 19] [17 14 16] [16 2 4]] 다음 flatten() 과 ravel() 메서드는 다차원 배열을 1차원으로 전환합니다. x.flatten() array([ 6, 3, 8, 8, 13, 5, 7, 9, 9, 0, 7, 8]) x.ravel() array([ 6, 3, 8, 8, 13, 5, 7, 9, 9, 0, 7, 8]) 배열에 포함된 부분요소 또는 그 배열 자체의 차원을 증가시키기 위해서는 np.newaxis 속성을 적용합니다. 이 속성은 가장 근접한 차원에 새로운 축을 첨가 합니다. 객체[part 또는 all, np.newaxis] y=np...

[numpy]랜덤수 생성을 위한 numpy 함수들

랜덤수 생성을 위한 numpy 함수들 numpy 라이브러리의 random 클래스하에서 랜덤수를 생성하는 다양한 함수를 제공합니다. 이 결과 역시 배열 객체입니다. random 함수들 r: 행의 수, c: 열의 수 [a, b) = a≤ x < b 함수 내용 np.random.rand(r, c) [0, 1) 사이의 균일 분포를 따르는 랜덤수 생성 지정한 차원(행×열)의 배열객체를 반환 양의 정수 입력으로 1차원 랜덤 벡터 생성 np.random.randn(r,c) 표준정규분포에 부합하는 랜덤수 생성 지정한 차원(행×열)의 배열객체를 반환 양의 정수 입력으로 1차원 랜덤 벡터 생성 np.random.sample((r,c)) [0, 1)지정한 크기(차원)의 랜덤수를 생성 위의 함수들과 달리 인수를 튜플 형식으로 전달 지정한 차원(행×열)의 배열객체를 반환 양의 정수 입력으로 1차원 랜덤 벡터 생성 np.random.randint(s, e, (r,c)) [s, e)의 범위의 정수들을 대상으로 랜덤수를 생성 start: 시작 수, end:마지막 수로 모두 정수 지정한 차원(행×열)의 배열객체를 반환 양의 정수 입력으로 1차원 랜덤 벡터 생성 다음 코드는 rand(), randn() 함수를 사용하여 생성한 각각 1차원 벡터와 그 객체의 분포를 작성하였습니다. import numpy as np from numpy import random import matplotlib.pyplot as plt plt.rcParams['font.family'] ='NanumGothic' random.seed(2) x=random.rand(1000) print(x[:3], x.shape) [0.4359949 0.02592623 0.54966248] (1000,) plt.figure(figsize=(3,2)) plt.hist(x, bins=10, rwidth=0.6, density=True) plt.xla...

[numpy] 배열 생성을 위한 numpy 함수들

배열 생성을 위한 numpy 함수들 배열 생성을 위해 numpy 라이브러리의 array() 함수 이외에 특정한 목적을 위해 zeros(), ones(), empty(), arrange(), linspace() 의 함수를 사용할 수 있습니다. 배열의 모든 값이 0과 1인 경우 각각 zeros(), ones()함수를 사용하여 생성할 수 있습니다. 이 두 함수에 전달되는 인수는 생성하는 값의 갯수입니다. 물론 생성하는 배열의 차원에 따라 전달해야 하는 인수의 수가 다릅니다. 예를 들어 다음 코드의 1차원 배열의 경우 1개의 정수를 전달하지만 2차원 객체의 경우는 2개의 정수 즉 행과 열의 수를 전달해야 합니다. 이 두 함수 뿐만 아니라 numpy에서 배열을 생성하는 모든 함수의 경우 2개이상의 인수를 전달 할 경우는 튜플형식으로 전달합니다. import numpy as np np.zeros(3) array([0., 0., 0.]) np.zeros((2,3)) array([[0., 0., 0.], [0., 0., 0.]]) np.ones(2), np.ones((2,2)) (array([1., 1.]), array([[1., 1.], [1., 1.]])) np.empty() 함수는 위 두 함수와 다르게 초기값이 지정되지 않은 상태로 결과를 반환합니다. 다음 코드의 결과는 모든 요소를 0이지만 아직 결정된 값이 아닙니다. 즉, 함수로 배열을 틀만을 제시하는 것으로 요소들이 지정되지 않은 상태이므로 배열의 생성속도가 증가 된다는 장점이 있습니다. np.empty(3) array([0., 0., 0.]) np.empty((3,2)) array([[0., 0.], [0., 0.], [0., 0.]]) 파이썬 내장함수인 range() 와 같이 일정한 간격의 수열을 생성하기 위해 np.arange() 함수를 사용할 수 있습니다. 이 함수는 특징은 다음과 같습니다. np.arange(...

정규분포 그리기

정규분포 (Normal Distribution) 평균이 $\mu$이고 표준편차 $\sigma$인 연속확률변수 x의 확률밀도함수가 다음과 같다면 정규분포를 따릅니다. $$f(x) = \frac{1}{\sigma \sqrt{2 \pi}}\exp\left(-\frac{1}{2}\left[\frac{x-\mu}{\sigma}\right]^2\right), \quad -\infty \lt x \lt \infty $$ import numpy as np import pandas as pd from sympy import * import matplotlib.pyplot as plt sympy를 사용 x,m,s=symbols('x, mu, sigma') fn=1/(s*sqrt(2*pi))*exp(-Rational(1,2)*((x-m)/s)**2) simplify(fn) $\frac{\sqrt{2} e^{- \frac{\left(\mu - x\right)^{2}}{2 \sigma^{2}}}}{2 \sqrt{\pi} \sigma}$ fig, ax=plt.subplots(1, 2, figsize=(15, 4)) a=np.linspace(-6, 6, 100) for j in [-2, 0, 2]: b=[float(fn.subs({x:i, m:j, s:1})) for i in a] ax[0].plot(a, b, label='['+r'$\mu:$'+str(j)+','+r'$\sigma:$'+str(1)+']') ax[0].legend(loc='best') ax[0].set_xlabel("x", size=12, weight="bold") ax[0].set_ylabel("f(x)", size=12, weight="bold") ax[0].spines['left'].set_pos...

마코브 체인(Markov Chains)

내용 확률행렬의 조건 마코브 체인(Markov Chains) Andrey Markov의 이름을 딴 Markov 체인은 한 "상태"(상황 또는 값 집합)에서 다른 "상태"로 이동하는 수학적 시스템입니다. 예를 들어, 아기의 행동에 대한 Markov 체인 모델을 만든 경우 "놀기", "먹기", "자고 있음" 및 "울음"을 상태로 포함할 수 있으며 다른 행동과 함께 상태 공간 (state space)을 형성할 수 있습니다. 또한, 상태 공간의 맨 위에 있는 Markov 체인은 한 상태에서 다른 상태로의 "전환" 확률을 알려줍니다. 예를 들어 현재 놀이 중인 아기가 다음 상태에서 먼저 울지 않고 5분이내에 잠들 확률을 계산할 수 있습니다. 그림 1. 위 그림은 두 개의 상태(A 및 B)가 있는 경우로 4개의 가능한 전환이 있습니다(상태가 다시 자체로 전환될 수 있기 때문에 2가 아님). 우리가 'A'에 있으면 'B'로 전환하거나 'A'에 머무를 수 있습니다. 'B'에 있으면 'A'로 전환하거나 'B'에 머무를 수 있습니다. 이 두 상태 다이어그램에서 어떤 상태에서 다른 상태로 전환될 확률은 0.5입니다. 상태의 전환을 나타내기 위해 위의 Markov 체인 다이어그램 대신에 다음과 같은 전환행렬을 사용합니다. 이 행렬은 상태 전환의 확률을 즉, 전환확률을 계산하기 위해 사용합니다. A B A P(A|A):0.5 P(B|A):0.5 B P(A|B):0.5 P(B|B):0.5 이와 같은 마코브 체인은 생물학, 비즈니스, 화학, 공학, 물리학 등 다양한 상황에 적용되는 수학적 모델로서 동일한 방식으로 여러 번 수행되는 실험 또는 측정을 설명하는 데 사용됩니다. 여기서 각 시도(trial)의 ...

신경망의 구성과 binary classification

내용 layers: the building blocks of deep learning Binary classification example: IMDB 데이터 준비 신경망 구축 학습시 모델 검증과 예측 이 글은 "Deep Learning with Python"의 3.4 절의 내용입니다. 신경망의 구성과 binary classification 신경망 훈련은 다음 객체를 중심으로 이루어집니다. Layers: 네트워크(또는 모델)로 결합되는 계층 입력 데이터 및 해당 대상 학습에 사용되는 피드백 신호를 정의하는 손실 함수 학습 진행 방법을 결정하는 옵티마이저 다음과 같이 상호 작용을 시각화할 수 있습니다. 함께 연결된 레이어로 구성된 네트워크는 입력 데이터를 예측에 매핑합니다. 그런 다음 손실 함수는 이러한 예측을 목표와 비교하여 손실 값을 생성합니다. 네트워크의 예측이 예상과 얼마나 잘 일치하는지 측정합니다. 옵티마이저는 이 손실 값을 사용하여 네트워크의 가중치를 업데이트합니다. layers: the building blocks of deep learning from keras import layers layer=layers.Dense(32, input_shape=(784,)) layer <keras.layers.core.dense.Dense at 0x7f9f7ed824d0> 첫 번째 차원이 784인 입력 2D 텐서로만 받아들이는 레이어(배치 차원인 축 0은 지정되지 않았으므로 모든 값이 허용됨)로 이 레이어는 첫 번째 차원이 32로 변환된 텐서를 반환합니다. 그러므로 다음 레이어의 입력 단위는 32 차원이어야 합니다. Keras를 사용할 때 모델에 추가하는 레이어가 들어오는 레이어의 모양과 일치하도록 동적으로 만들어지기 때문에 호환성에 대해 걱정할 필요가 없습니다. 예를 들어 다음을 작성한다고 가정합니다. from kera...

결측치와 무한값찾기

내용 결측값과 무한값 생성 결측값과 무한값 결정 무한값 결정 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, ...

배열(Numpy. array)

내용 배열 객체의 자료형 배열 결합(concatenate) 배열의 분할 배열 객체의 자료형 자료형 (data type)은 입력된 데이터를 위한 메모리의 크기를 확정하기 위한 것입니다. 그러므로 데이터 형(data type)을 명시하지 않은 상태에서 여러 유형이 혼재된 경우 일반적으로 큰 메모리가 소비되는 형태로 자동 지정되지만 경우에 따라서는 메모리 과부하 상태로 인해 자료의 손실이 발생할 수 있습니다. 그러므로 다양한 자료형이 혼재된 경우 명시적으로 데이터 타입을 지정하는 것이 안전합니다. np.array() 함수를 사용하여 배열 객체를 생성할 경우 dtype에 인수를 전달함으로서 배열의 데이터형을 지정할 수 있습니다. 그러나 이 값을 지정하지 않을 경우 그 데이터형은 자동으로 지정되는데 일반적으로 numpy 배열의 기본 데이터 형은 실수형(np.float64)입니다. 이것은 정수형과 실수형이 혼합되어 있을 경우 실수형으로 인식된다는 의미입니다. x=np.ones(1) x array([1.]) x.dtype dtype('float64') 위 속성 dtype은 객체의 데이터 형을 반환하지만 역으로 그 속성을 사용하여 객체의 데이터 형을 지정할 수 있습니다. 예를 들어 다음 객체 x는 실수(부동소수)로 입력하였지만 객체에 int 32를 지정하여 정수형으로 변환할 수 있습니다. x=np.ones(1, dtype=np.int32) x array([1], dtype=int32) x.dtype dtype('int32') 다음 표는 numpy 배열에서 사용할 수 있는 자료형의 종류입니다. 구분 type(code) 예 숫자형 boolean bool(b) [True, False] 정수형 int8(i1) [-2, 0, 1,2] int16(i...