Skip to content

Commit

Permalink
Merge branch 'update'
Browse files Browse the repository at this point in the history
  • Loading branch information
djccnt15 committed Mar 17, 2024
2 parents defbbe1 + ff94247 commit cb4bd69
Show file tree
Hide file tree
Showing 39 changed files with 169 additions and 112 deletions.
2 changes: 1 addition & 1 deletion docs/blog/posts/2022-01-02-customize_minimal_mistakes.md
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ GitHub Pages에 수학식을 출력하는 방법은 여러 가지가 있는데,
mathjax: true
```

글 작성 시 수식 입력 방법은 [여기](2022-01-04-blog_markdown.md/#3)에서 확인할 수 있다.
글 작성 시 수식 입력 방법은 [여기](2022-01-04-blog_markdown.md/#수식-입력)에서 확인할 수 있다.

## 4. favicon 설정

Expand Down
44 changes: 42 additions & 2 deletions docs/blog/posts/2022-01-08-count_runtime.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,47 @@ with cal_time("test"):
test: 0:00:01.013775
```

## 4. timeit 사용

Python의 표준 라이브러리 중 `timeit` 패키지를 사용하면 코드의 실행 시간을 측정할 수 있다.

```python
import timeit

SETUP_CODE = """
import statistics
import numpy as np
DATA_LIST = [i for i in range(int(1e3))]
DATA_ARRAY = np.array(DATA_LIST)
"""

STD_MEAN_WITH_LIST = """statistics.mean(DATA_LIST)"""
STD_MEAN_WITH_ARRAY = """statistics.mean(DATA_ARRAY)"""
NP_MEAN_WITH_LIST = """np.mean(DATA_LIST)"""
NP_MEAN_WITH_ARRAY = """np.mean(DATA_ARRAY)"""


def main():
print(timeit.timeit(stmt=STD_MEAN_WITH_LIST, setup=SETUP_CODE))
print(timeit.timeit(stmt=STD_MEAN_WITH_ARRAY, setup=SETUP_CODE))
print(timeit.timeit(stmt=NP_MEAN_WITH_LIST, setup=SETUP_CODE))
print(timeit.timeit(stmt=NP_MEAN_WITH_ARRAY, setup=SETUP_CODE))


if __name__ == "__main__":
main()
```
```
142.78164129995275
586.6689014999429
35.12082770001143
3.3709149999776855
```

---
## Reference
- [Python Documentation: time — 시간 액세스와 변환](https://docs.python.org/ko/3/library/time.html)([영문](https://docs.python.org/3/library/time.html))
- [Python Documentation: datetime — 기본 날짜와 시간 형](https://docs.python.org/ko/3/library/datetime.html)([영문](https://docs.python.org/3/library/datetime.html))
- [time — Time access and conversions](https://docs.python.org/3/library/time.html)
- [datetime — Basic date and time types](https://docs.python.org/3/library/datetime.html)
- [timeit — Measure execution time of small code snippets](https://docs.python.org/3/library/timeit.html)
2 changes: 1 addition & 1 deletion docs/blog/posts/2022-01-23-regression_statsmodels.md
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ res = smf.ols(formula='Lottery ~ np.log(Literacy)', data=df).fit()
- BIC: AIC와 유사하나 패널티를 부여하여 AIC보다 모델 평가 성능이 더 좋으며, 수치가 낮을수록 좋음

- **coef: 변수의 coefficient(계수)**, 각 독립변수가 종속변수의 변화에 미치는 영향의 정도
- std err: 계수의 [표준오차](2023-02-15-sampling_distribution.md/#1-3)(표본 통계량의 표준편차), 값이 작을수록 좋음
- std err: 계수의 [표준오차](2023-02-15-sampling_distribution.md/#1-3-표본분포)(표본 통계량의 표준편차), 값이 작을수록 좋음
- t: 독립변수와 종속변수간에 선형관계(관련성)가 존재하는 정도, 값이 클수록 상관도가 큼
- t 값이 크다 = 표준편차가 작다 = 독립-종속변수 간 상관도 높음
- t 값이 작다 = 표준편차가 크다 = 독립-종속변수 간 상관도 낮음
Expand Down
2 changes: 1 addition & 1 deletion docs/blog/posts/2022-04-01-iqr_method.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ $$
좀 더 정확한 계산값을 사용하고 싶을 때는 $1.7$을 계수로 사용하면 정상 데이터의 범위가 $\pm 2.97 \sigma$이 되어 $\pm 3 \sigma$에 좀 더 가까운 결과가 나오게 된다.

!!! note
실제 데이터의 분포에 상관없이 표준 정규분포를 가정하고 IQR 방식을 사용할 수 있는 이유는 [중심극한정리](2023-02-15-sampling_distribution.md/#2-2)[^1]가 이론적 배경이라고 한다. 중심극한정리는 모집단이 어떤 분포를 가지고 있던지 간에 (모집단 분포가 어떤 모양이던 상관없이) 일단 표본의 크기가 충분히 크다면 표본평균들의 분포가 모집단의 모수를 기반으로한 정규분포를 이룬다는 정리이다.
실제 데이터의 분포에 상관없이 표준 정규분포를 가정하고 IQR 방식을 사용할 수 있는 이유는 [중심극한정리](2023-02-15-sampling_distribution.md/#2-2-중심극한정리)[^1]가 이론적 배경이라고 한다. 중심극한정리는 모집단이 어떤 분포를 가지고 있던지 간에 (모집단 분포가 어떤 모양이던 상관없이) 일단 표본의 크기가 충분히 크다면 표본평균들의 분포가 모집단의 모수를 기반으로한 정규분포를 이룬다는 정리이다.

[^1]: [위키피디아 - 중심 극한 정리](https://ko.wikipedia.org/wiki/%EC%A4%91%EC%8B%AC_%EA%B7%B9%ED%95%9C_%EC%A0%95%EB%A6%AC)

Expand Down
8 changes: 4 additions & 4 deletions docs/blog/posts/2022-05-19-linear_algebra_various_matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ Python으로 대칭 행렬 여부를 확인하려면 아래와 같이 앞서 만

### 반대칭 행렬

아래와 같이 [전치 행렬](#1)이 원래 행렬에 $-1$을 곱한 행렬일 경우 행렬 $A$를 **반대칭 행렬(skew-symmetric matrix)**이라고 한다.
아래와 같이 [전치 행렬](#1-전치-행렬)이 원래 행렬에 $-1$을 곱한 행렬일 경우 행렬 $A$를 **반대칭 행렬(skew-symmetric matrix)**이라고 한다.

$$
A^{T} = -A
Expand Down Expand Up @@ -259,7 +259,7 @@ $$

## 4. 단위 행렬

**단위 행렬(identity matrix)**은 아래와 같이 주 대각 원소가 1이고 그 외 나머지 원소는 모두 0인 [대각 행렬](#3)을 의미한다. $I$로 표기하며, **항등 행렬**이라고도 부른다.
**단위 행렬(identity matrix)**은 아래와 같이 주 대각 원소가 1이고 그 외 나머지 원소는 모두 0인 [대각 행렬](#3-대각-행렬)을 의미한다. $I$로 표기하며, **항등 행렬**이라고도 부른다.

$$
I = \begin{bmatrix}
Expand Down Expand Up @@ -440,7 +440,7 @@ $$

## 8. 하우스홀더 행렬

**하우스홀더 행렬(householder matrix)**은 모든 열이 [정규 직교(orthonormal)](2022-06-06-linear_algebra_orthogonal_qr_decomposition.md/#1)하는 정사각 행렬로, 아래와 같은 수식을 따르는 행렬 $H$를 말한다.
**하우스홀더 행렬(householder matrix)**은 모든 열이 [정규 직교(orthonormal)](2022-06-06-linear_algebra_orthogonal_qr_decomposition.md/#1-직교-공간)하는 정사각 행렬로, 아래와 같은 수식을 따르는 행렬 $H$를 말한다.

$$
\textbf{v} = \begin{bmatrix}
Expand All @@ -452,7 +452,7 @@ v_{n}
\to H = I - 2\frac{\textbf{vv}^{T}}{\textbf{v}^{T}\textbf{v}}
$$

${\textbf{vv}^{T}}$은 [벡터의 외적](2022-06-09-linear_algebra_various_products.md/#1), ${\textbf{v}^{T}\textbf{v}}$은 [벡터의 내적](2022-06-05-linear_algebra_inner_product_norm.md/#1)을 뜻하기 때문에 하우스홀더 행렬 공식을 Python으로 구현하기 위해서는 벡터의 내적과 외적의 함수를 먼저 구현해야 한다.
${\textbf{vv}^{T}}$은 [벡터의 외적](2022-06-09-linear_algebra_various_products.md/#1-외적), ${\textbf{v}^{T}\textbf{v}}$은 [벡터의 내적](2022-06-05-linear_algebra_inner_product_norm.md/#1-내적)을 뜻하기 때문에 하우스홀더 행렬 공식을 Python으로 구현하기 위해서는 벡터의 내적과 외적의 함수를 먼저 구현해야 한다.

=== "Python"

Expand Down
4 changes: 2 additions & 2 deletions docs/blog/posts/2022-05-22-linear_algebra_linear_system.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ tags:

## 1. 선형 방정식

**선형 방정식(linear equation)**이란 아래와 같이 변수인 $x_{n}$과 상수인 $\beta_{n}$이 [선형 결합](2022-05-29-linear_algebra_basis_dimension.md/#3)되어 **선형(linear)**으로 표현 되는 1차 방정식을 말한다.
**선형 방정식(linear equation)**이란 아래와 같이 변수인 $x_{n}$과 상수인 $\beta_{n}$이 [선형 결합](2022-05-29-linear_algebra_basis_dimension.md/#3-선형-결합과-선형-독립)되어 **선형(linear)**으로 표현 되는 1차 방정식을 말한다.

$$
\beta_{0} + \beta_{1}x_{1} + \beta_{2}x_{2} + \cdots + \beta_{n}x_{n} = y
Expand Down Expand Up @@ -182,7 +182,7 @@ $$

### 가우스-조르단 소거법

주어진 선형 시스템을 [기본 행 연산](2022-05-23-linear_algebra_determinant.md/#_4)을 통해 기약 행사다리꼴 행렬의 형태로 만들어 방정식의 해를 구하는 방법을 **가우스-조르단 소거법(Gauss Jordan elimination)**이라고 한다.
주어진 선형 시스템을 [기본 행 연산](2022-05-01-linear_algebra_vector_scalar.md/#기본-행-연산)을 통해 기약 행사다리꼴 행렬의 형태로 만들어 방정식의 해를 구하는 방법을 **가우스-조르단 소거법(Gauss Jordan elimination)**이라고 한다.

[Wolfram](https://mathworld.wolfram.com/Gauss-JordanElimination.html)에 따르면 가우스-조르단 소거법은 [역행렬](2022-05-28-linear_algebra_inverse_matrix.md)을 구하기 위한 방법이지만 응용해서 선형 시스템을 해를 구할 때도 사용할 수 있다. 아무튼 Python으로 구현하면 아래와 같다.

Expand Down
6 changes: 3 additions & 3 deletions docs/blog/posts/2022-05-23-linear_algebra_determinant.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,13 +106,13 @@ $$

### 특이한 행렬의 행렬식

[삼각 행렬](2022-05-19-linear_algebra_various_matrix.md/#6), [대각 행렬](2022-05-19-linear_algebra_various_matrix.md/#3)의 행렬식은 주 대각 원소의 곱과 같다.
[삼각 행렬](2022-05-19-linear_algebra_various_matrix.md/#6-삼각-행렬), [대각 행렬](2022-05-19-linear_algebra_various_matrix.md/#3-대각-행렬)의 행렬식은 주 대각 원소의 곱과 같다.

$$
\det(A) = a_{11} a_{22} \cdots a_{nn}
$$

[전치 행렬](2022-05-19-linear_algebra_various_matrix.md/#1)의 행렬식: 행렬 $A$가 정사각 행렬일 경우 행렬 $A$와 그 전치 행렬 $A^{T}$의 행렬식은 동일하다.
[전치 행렬](2022-05-19-linear_algebra_various_matrix.md/#1-전치-행렬)의 행렬식: 행렬 $A$가 정사각 행렬일 경우 행렬 $A$와 그 전치 행렬 $A^{T}$의 행렬식은 동일하다.

$$
\det(A) = \det(A)^{T}
Expand All @@ -122,7 +122,7 @@ $$

### 행렬의 기본 행 연산과 행렬식

[기본 행 연산](2022-05-01-linear_algebra_vector_scalar.md/#_4)에 의한 행렬식의 변경은 아래와 같다.
[기본 행 연산](2022-05-01-linear_algebra_vector_scalar.md/#기본-행-연산)에 의한 행렬식의 변경은 아래와 같다.

- 한 행에 영이 아닌 상수를 모두 곱한다.

Expand Down
6 changes: 3 additions & 3 deletions docs/blog/posts/2022-05-28-linear_algebra_inverse_matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,15 @@ $$

### n * n 행렬의 역행렬

n * n 행렬의 역행렬을 구하는 방법은 행렬식에서 다룬 [수반 행렬](2022-05-23-linear_algebra_determinant.md/#_2)을 사용해야 한다. 구하는 방법은 아래와 같다.
n * n 행렬의 역행렬을 구하는 방법은 행렬식에서 다룬 [수반 행렬](2022-05-23-linear_algebra_determinant.md/#수반-행렬)을 사용해야 한다. 구하는 방법은 아래와 같다.

$$
A^{-1} = \frac{\text{adj}(A)}{\det(A)}
$$

## 2. 역행렬 계산

역행렬을 구하는 방법은 다양하지만, 앞서 다뤘던 [가우스-조르단 소거법(Gauss Jordan elimination)](2022-05-22-linear_algebra_linear_system.md/#-)을 사용하는 것이 가장 간편하다. 절차는 아래와 같다.
역행렬을 구하는 방법은 다양하지만, 앞서 다뤘던 [가우스-조르단 소거법(Gauss Jordan elimination)](2022-05-22-linear_algebra_linear_system.md/#가우스-조르단-소거법)을 사용하는 것이 가장 간편하다. 절차는 아래와 같다.

- 행렬 $A$의 오른쪽에 같은 크기를 갖는 단위 행렬 $I$를 첨가해 아래와 같이 첨가 행렬 $[A \vert I]$를 만든다.

Expand All @@ -71,7 +71,7 @@ $$
\end{array} \right]
$$

- 이 행렬을 [기본 행 연산](2022-05-01-linear_algebra_vector_scalar.md/#_4)을 통해 아래와 같이 $[I \vert B]$를 만든다.
- 이 행렬을 [기본 행 연산](2022-05-01-linear_algebra_vector_scalar.md/#기본-행-연산)을 통해 아래와 같이 $[I \vert B]$를 만든다.

$$
[I|B] = \left[ \begin{array}{ccc|ccc}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ tags:

### 내적의 개념

[벡터 공간](2022-05-29-linear_algebra_basis_dimension.md/#1)의 설명에서 언급했듯이 **내적(inner product)**이 주어진 벡터 공간을 **내적 공간(inner product space)**이라고 부르는데, 벡터의 **내적(inner product)**은 벡터를 방향이 일치하는 만큼만 곱한다는 뜻으로 아래와 같이 표기한다.
[벡터 공간](2022-05-29-linear_algebra_basis_dimension.md/#1-벡터-공간)의 설명에서 언급했듯이 **내적(inner product)**이 주어진 벡터 공간을 **내적 공간(inner product space)**이라고 부르는데, 벡터의 **내적(inner product)**은 벡터를 방향이 일치하는 만큼만 곱한다는 뜻으로 아래와 같이 표기한다.

$$
\textbf{u}
Expand All @@ -42,7 +42,7 @@ $$
\langle \textbf{u}, \textbf{v} \rangle = \textbf{u} \cdot \textbf{v} = \textbf{u}^{T} \textbf{v} = \sum_{i=1}^{n}u_{i}v_{i} = \vert \textbf{u} \vert \vert \textbf{v} \vert \cos \theta
$$

벡터의 내적을 Python으로 구현하면 아래와 같다. [하우스홀더 행렬](2022-05-19-linear_algebra_various_matrix.md/#8) 공식에서 이미 구현한 바 있다.
벡터의 내적을 Python으로 구현하면 아래와 같다. [하우스홀더 행렬](2022-05-19-linear_algebra_various_matrix.md/#8-하우스홀더-행렬) 공식에서 이미 구현한 바 있다.

=== "Python"

Expand Down Expand Up @@ -79,7 +79,7 @@ $$

## 2. 노름(norm)

**노름(norm)**은 벡터의 크기 또는 길이를 말하며 $\Vert \textbf{v} \Vert$로 표기한다. 내적이 정의되면 노름(norm)은 자기 자신의 [내적(inner product)](#1)의 제곱근으로 정의할 수 있다.
**노름(norm)**은 벡터의 크기 또는 길이를 말하며 $\Vert \textbf{v} \Vert$로 표기한다. 내적이 정의되면 노름(norm)은 자기 자신의 [내적(inner product)](#1-내적)의 제곱근으로 정의할 수 있다.

!!! warning
그러나 노름(norm)이 있다고 해서 그에 자연스럽게 대응되는 내적이 항상 존재하는 것은 아니다.
Expand Down Expand Up @@ -172,7 +172,7 @@ $$

## 3. 코사인 유사도

**[코사인 유사도(cosine similarity)](https://ko.wikipedia.org/wiki/%EC%BD%94%EC%82%AC%EC%9D%B8_%EC%9C%A0%EC%82%AC%EB%8F%84)**는 내적 공간의 두 벡터 간의 유사한 정도를 벡터 간 각도의 코사인 값을 이용하여 측정한 것을 의미하는데, [노름(norm)](#2-norm)을 통해 정리하면 **코사인 유사도(cosine similarity)**를 다음과 같이 유도할 수 있다.
**[코사인 유사도(cosine similarity)](https://ko.wikipedia.org/wiki/%EC%BD%94%EC%82%AC%EC%9D%B8_%EC%9C%A0%EC%82%AC%EB%8F%84)**는 내적 공간의 두 벡터 간의 유사한 정도를 벡터 간 각도의 코사인 값을 이용하여 측정한 것을 의미하는데, [노름(norm)](#2-노름norm)을 통해 정리하면 **코사인 유사도(cosine similarity)**를 다음과 같이 유도할 수 있다.

$$
\text{cosine similarity} = S_{c}(\textbf{u}, \textbf{v}) = \cos \theta = \frac{\textbf{u} \cdot \textbf{v}}{\Vert \textbf{u} \Vert \Vert \textbf{v} \Vert}
Expand Down
Loading

0 comments on commit cb4bd69

Please sign in to comment.