## 함수

**함수(function)**는 입력 값을 출력 값으로 바꾸어 출력하는 관계(relationship)를 말한다.

**정의역(domain)** : 함수에서 입력변수가 가질 수 있는 값의 집합

**공역(range)** : 출력변수가 가질 수 있는 값의 집합

### 변수

**변수(variable)** : 어떤 숫자를 대표하는 기호. 

**입력변수(input variable)** : 입력 값을 대표하는 변수

**출력변수(output variable)** : 출력 값을 대표하는 변수

### 불연속함수
- 데이터 분석에서 많이 사용되는 불연속함수들

### 부호함수

입력이 양수이면 1, 음수이면 -1, 0이면 0을 출력하는 $x=0$에서 불연속인 함수이다. 

넘파이에서는 `sign()` 명령으로 구현


```python
np.sign(-0.01), np.sign(0), np.sign(0.01)
```




    (-1.0, 0, 1.0)



### 단위계단함수

단위계단함수(Heaviside step function)도 $x=0$에서 불연속인 함수이다. 넘파이 구현이 없으므로 직접 구현해야 한다.

### 지시함수

함수 이름에 아래 첨자로 미리 지정된 값이 들어오면 출력이 1이 되고 아니면 출력이 0이 된다.

지시함수는 데이터 중에서 특정한 데이터만 선택하여 갯수를 세는데 사용된다.

### 역함수
- 어떤 함수의 입력/출력 관계와 정반대의 입출력 관계를 갖는 함수

$ 
y = f(x), \;\;\; \rightarrow \;\;\; x = f^{-1}(y) 
$

### 데이터 분석에서 많이 사용되는 함수들

### 다항식함수

거듭제곱 항의 선형조합으로 이루어진 함수다. 

$
f(x) = c_0 + c_1 x + c_2 x^2 + \cdots + c_n x^n 
$

### 최대함수와 최소함수

최대함수는 두 개의 인수 중에서 큰 값을 출력하는 함수이다.

$ 
\begin{align}
\max(x, y) 
=
\begin{cases}
x & \text{ if } x \geq y \\
y & \text{ if } x < y 
\end{cases}
\end{align}
$


최소함수는 최대함수와 반대로 두 개의 인수 중 작은 값을 출력하는 함수이다.

$ 
\begin{align}
\min(x, y) 
=
\begin{cases}
x & \text{ if } x \leq y \\
y & \text{ if } x > y 
\end{cases}
\end{align}
$

### 지수함수

밑을 오일러 수 $e$로 하여 거듭제곱을 하는 함수를 **지수함수(exponential function)**라고 한다. 

$ 
y = e^x 
$

$ 
y = \exp (x) =\exp x 
$


```python
np.exp(-2), np.exp(0), np.exp(2)
```




    (0.1353352832366127, 1.0, 7.38905609893065)



#### 지수함수 특성

* 양수($e$)를 거듭제곱한 값이므로 항상 양수다.
* $x=0$일 때 1이 된다.
* $x$가 양의 무한대로 가면($x \rightarrow \infty$), 양의 무한대로 다가간다.
* $x$가 음의 무한대로 가면($x \rightarrow -\infty$), 0으로 다가간다.
* $x_1 > x_2$이면 $\exp{x_1} > \exp{x_2}$이다.



```python
np.exp(5 + 3), np.exp(5) * np.exp(3)
```




    (2980.9579870417283, 2980.9579870417283)



### 로지스틱함수
- 지수함수를 변형한 함수
- 회귀 분석이나 인공신경망에서 자주 사용

$ 
\begin{align}
\sigma(x) = \dfrac{1}{1 + \exp(-x)} 
\end{align}
$

### 로그함수


```python
np.log(10)
```




    2.302585092994046



로그는 지수함수의 역함수이다.

$ 
y = \log x 
$

#### 로그함수 특징

- $x$값, 즉 입력변수값이 양수이어야 한다. 0이거나 음수이면 정의되지 않는다.
- $x > 1$면 $y > 0$ (양수)
- $x = 1$이면 $y = 0$
- $0 < x < 1$면 $y < 0$ (음수)
- $x_1 > x_2$면 $\log{x_1} > \log{x_2}$이다.

#### 로그함수의 성질 1
- 로그함수는 곱하기를 더하기로 변환한다.

$ 
\log{(x_1 \cdot x_2)} = \log{x_1} + \log{x_2} 
$

$ 
\log x^n = n \log x 
$

#### 로그함수의 성질 2
- 어떤 함수에 로그를 적용해도 함수의 최고점, 최저점의 위치는 변하지 않는다.
- 로그를 취한 함수에 대해 최적화를 하는 경우가 많다.

#### 로그함수의 성질 3
- 0부터 1사이의 작은 값을 확대시켜 보여준다.
- 0부터 1사이의 구간을 음의 무한대부터 0까지로 확장시켜주기 때문에 0과 1사이에 있는 작은 값을 더 확실하게 비교할 수 있도록 한다.

### 소프트플러스함수
- 지수함수와 로그함수를 결합하여 만든 함수
- 최대함수(ReLU)와 비슷하지만 $x=0$ 근처에서 값이 부드럽게 변한다는 장점 

$ 
\zeta(x) = \log( 1 + \exp(x))
$

### 다변수함수
- 복수의 입력변수를 가지는 함수

$ 
w = f(x, y) 
$

### 함수의 평행이동
- 단변수함수를 그래프 상에서 오른쪽으로 $a$만큼 평행

$
f(x) \;\; \rightarrow \;\; f(x-a)
$


### 함수의 스케일링
- 단변수함수를 x축 방향으로 k배만큼 늘릴때

$
f(x) \;\; \rightarrow \;\; f\left(\frac{x}{k}\right)
$

- 단변수함수를 y축 방향으로 k배만큼 늘릴때

$
f(x) \;\; \rightarrow \;\; kf(x)
$


7bfd653598e070606185f9737b0746df806ae765
ipynb
Jupyter Notebook
Math-Study/Function.ipynb
kimchangkyu/TIL
721a46417734431f83bb8bd1f3fa831633b2419a
MIT
2019-12-28T10:33:45.000Z
2019-12-28T10:33:45.000Z
Math-Study/Function.ipynb
kimchangkyu/TIL
721a46417734431f83bb8bd1f3fa831633b2419a
MIT
Math-Study/Function.ipynb
kimchangkyu/TIL
721a46417734431f83bb8bd1f3fa831633b2419a
MIT
Qwen/Qwen-72B
1. YES
2. YES