[ML] 수학 기초 - 함수

박미영·2023년 5월 24일
0

DataSchool StudyNote - ML

목록 보기
8/19

📌함수

- 다항함수



  • python에서 다항함수 그리기
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 2, 100) # -3부터 2까지 100개
y = 3*x**2 + 2
plt.figure(figsize=(12, 8))
plt.plot(x, y)
plt.xlabel('$x$')
plt.ylabel('$y = 3x^2 +2$')
plt.show()



  • 다항함수의 x축 방향 이동
x = np.linspace(-3, 2, 100)
y1 = 3 * x**2 + 2
y2 = 3 * (x+1)**2 + 2
plt.figure(figsize=(12, 8))
plt.plot(x, y1, lw=2, ls='dashed', label='$y=3x^2 +2')
plt.plot(x, y2, label='$y=3(x+1)^2 +2')
plt.legend(fontsize=15)
plt.grid()
plt.xlabel('$x$', fontsize=25)
plt.ylabel('$y$', fontsize=25)
plt.show()





- 지수함수



  • python에서 지수함수 그리기
x = np.linspace(-2, 2, 100)
a11, a12, a13 = 2, 3, 4
y11, y12, y13 = a11**x, a12**x, a13**x

a21, a22, a23 = 1/2, 1/3, 1/4
y21, y22, y23 = a21**x, a22**x, a23**x
fig, ax = plt.subplots(1, 2, figsize=(12, 6))

ax[0].plot(x, y11, color='k', label=r"$2^x$")
ax[0].plot(x, y12, '--',  color='k', label=r"$3^x$")
ax[0].plot(x, y13, ':', color='k', label=r"$4^x$")
ax[0].legend(fontsize=20)

ax[1].plot(x, y21, color='k', label=r"$(1/2)^x$")
ax[1].plot(x, y22, '--', color='k', label=r"$(1/3)^x$")
ax[1].plot(x, y23, ':', color='k', label=r"$(1/4)^x$")
ax[1].legend(fontsize=20)

plt.show()



- 지수 증가

plt.figure(figsize=(6, 6))
x = np.linspace(0, 10)

plt.plot(x, x**2, '--', color='k', label=r"$x^2$")
plt.plot(x, 2**x, color='k', label=r"$2^x$")

plt.legend(loc="center left", fontsize=25)
plt.xlabel('$x$', fontsize=25)
plt.ylabel('$y$', fontsize=25)
plt.grid()
plt.show()





- 자연상수 e

베르누이2.7182818 뭐 이런 숫자가 있다는 것을 밝히고, 오일러라는 분이 e 라는 표기를 시작함



  • 특이한 지수 식

x = np.array([10, 100, 1000, 10000, 100000, 1000000, 10000000])

(1+1/x)**x

x에 어떤 큰 값을 넣어도 2.718281828459045에 수렴한다.



- 로그함수

그렇게 log는 등장했다.



def log(x, base):
    return np.log(x)/np.log(base)

x1 = np.linspace(0.0001, 5, 1000)
x2 = np.linspace(0.01, 5, 100)

y11, y12 = log(x1, 10), log(x2, np.e)
y21, y22 = log(x1, 1/10), log(x2, 1/np.e)
fig, ax = plt.subplots(1, 2, figsize=(12, 6))

ax[0].plot(x1, y11, color='k', label=r"$\log_{10} x$")
ax[0].plot(x2, y12, '--',  color='k', label=r"$\log_{e} x$")

ax[0].set_xlabel('$x$', fontsize=15)
ax[0].set_ylabel('$y$', fontsize=15)
ax[0].legend(fontsize=20, loc='lower right')

ax[1].plot(x1, y21, color='k', label=r"$\log_{1/10} x$")
ax[1].plot(x2, y22, '--',  color='k', label=r"$\log_{1/e} x$")

ax[1].set_xlabel('$x$', fontsize=15)
ax[1].set_ylabel('$y$', fontsize=15)
ax[1].legend(fontsize=20, loc='upper right')

plt.show()



- ⭐시그모이드 Sigmoid

z = np.linspace(-10, 10, 100)
sigma = 1/(1+np.exp(-z))

plt.figure(figsize=(12, 8))
plt.plot(z, sigma)
plt.xlabel('$z$', fontsize=25)
plt.ylabel('$\sigma(z)$', fontsize=25)
plt.grid()
plt.show()

⭐⭐⭐시그모이드는 0과 1사이의 값을 가진다.






📌함수의 표현

- 벡터의 표현


스칼라 함수: 출력이 1개
벡터 함수: 출력이 여러개


- 단일 변수 스칼라 함수


- 다중 변수 스칼라 함수


- 다변수 벡터함수



- 다변수 벡터함수 예제

u = np.linspace(0, 1, 30)
v = np.linspace(0, 1, 30)
U, V = np.meshgrid(u, v)

X = U
Y = V

Z = (1+U**2) + (V/(1+V**2))



⭐⭐⭐ meshgrid

t = np.linspace(0, 5, 6)
p = np.linspace(0, 5, 6)
T, P = np.meshgrid(t, p)

T + P



fig = plt.figure(figsize=(7, 7))
ax = plt.axes(projection='3d')
ax.xaxis.set_tick_params(labelsize=15)
ax.yaxis.set_tick_params(labelsize=15)
ax.zaxis.set_tick_params(labelsize=15)
ax.set_xlabel(r'$x$', fontsize=20)
ax.set_ylabel(r'$y$', fontsize=20)
ax.set_zlabel(r'$z$', fontsize=20)

ax.scatter3D(X, Y, Z, marker='.', color='gray')

plt.show()



- 함수의 그래프 방식 표현

동그라미는 node, 화살표선은 edge



- 함수의 합성


- 함수의 합성 예제

x = np.linspace(-4, 4, 100)
y = x**3 - 15*x + 30
z = np.log(y)
fig, ax = plt.subplots(1, 2, figsize=(12, 6))

ax[0].plot(x, y, label=r'$x^3 -15x + 30$', color='k')
ax[0].legend(fontsize=18)

ax[1].plot(y, z, label=r'$\log(y)$', color='k')
ax[1].legend(fontsize=18)

plt.show()



  • 두 함수 합성 후
fig, ax = plt.subplots(1, 2, figsize=(12, 6)) 

ax[0].plot(x, z, '--', label=r'$\log(f(x))$', color='k')
ax[0].legend(fontsize=18)

ax[1].plot(x, y, label=r'$x^3 -15x + 30$', color='k')
ax[1].legend(fontsize=18)
ax_tmp = ax[1].twinx()
ax_tmp.plot(x, z, '--', label=r'$\log(f(x))$', color='k')

plt.show()




"이 글은 제로베이스 데이터 취업 스쿨 강의를 듣고 작성한 내용으로 제로베이스 데이터 취업 스쿨 강의 자료 일부를 발췌한 내용이 포함되어 있습니다."

0개의 댓글