OneBook(Python & Deep Learning)
  • 한곳에서 끝내는 파이썬 & 머신러닝 & 딥러닝
  • 문서 작업을 시작하며
  • 1. 인공지능(Artificial Intelligence) 시대
    • 1.1. 인공지능이란 도대체 무엇인가?
    • 1.2. 4차 산업혁명
    • 1.3. 인공지능의 역사
    • 1.4. 인공지능 > 머신러닝 > 딥러닝
    • 1.5. 머신러닝
    • 1.6. 머신러닝 알고리즘
      • 1.6.1. 지도 학습 (Supervised Learning)
      • 1.6.2. 비지도 학습 (Unsupervised learning)
      • 1.6.3. 강화 학습(Reinforcement Learning)
    • 1.7. 인공신경망(ANN)
    • 1.8. 딥러닝
  • 2. 기본 상식
    • 2.1. 기본 용어의 이해
      • 2.1.1. CPU와 GPU의 차이
      • 2.1.2. 오픈소스(Open Source)
      • 2.1.3. 깃허브(GitHub)
      • 2.1.4. 위키 Wiki
      • 2.1.5. 아나콘다(Anaconda)
      • 2.1.6. 활성화 함수
      • 2.1.5. 딥러닝 프레임워크 소개
    • 2.2. 텐서플로(Tensorflow)
    • 2.3. 케라스(Keras)
    • 2.4. 파이토치(PyTorch)
    • 2.5. 학습에 필요한 중요한 도구와 라이브러리들
      • 2.5.1. 주피터 노트북(Jupyter Notebook)
      • 2.5.2. 파이참(PyCharm)
      • 2.5.3. 스파이더(Spyder)
      • 2.5.4. 넘파이(NumPy)
      • 2.5.5. 싸이파이(SciPy)
      • 2.5.6. Matplotlib
      • 2.5.7. 판다스(Pandas)
      • 2.5.8. 장고(Django)
      • 2.5.9. 파이큐티(pyQT)
      • 2.5.10. 싸이킷런(Scikit-learn)(Sklearn)
      • 2.5.11. CUDA & cuDNN
      • 2.5.12. 파이썬 표준 내장 라이브러리
    • 2.6. AI공부에 필요한 기본지식 3가지
      • 2.6.1. 수학
      • 2.6.2. 프로그래밍 기술
      • 2.6.3. AI의 적용 대상 산업에 대한 지식
  • 3. 개발 환경설정
    • 3.1. 윈도우 환경에서 설치하기
      • 3.1.1. 아나콘다 설치 (파이썬 설치)
        • 1) 아나콘다 패키지 업데이트
        • 2) conda에서 파이썬 가상 환경 (virtual environments) 생성하기
        • 3) NVIDIA GPU 환경 설정하기
      • 3.1.2. 텐서플로 설치
      • 3.1.3. 케라스 설치
      • 3.1.4. Jupyter Notebook 설치
      • 3.1.5. Visual Studio Code 설치
      • 3.1.6. 파이참 설치
        • 1) 파이참 가상환경 설정
        • 2) 파이참 환경 설정
        • 3) 설치된 라이브러리들의 버전 확인 하기
    • 3.2. 리눅스 환경에서 설치하기
      • 3.2.1. 아나콘다 설치(파이썬 설치)
      • 3.2.2. 텐서플로 설치
      • 3.2.3. 케라스 설치
      • 3.2.4. 장고 설치
      • 3.2.5. 파이참(PyCharm) 설치
        • 1) 파이참 가상환경 설정
  • 4. 파이썬 기초 학습
    • 4.1. 파이썬(Python)
    • 4.2. 파이썬의 특징
    • 4.3. 파이썬 기본 문법
      • 4.3.1. 대화형과 스크립트 모드 프로그래밍
      • 4.3.2. 모듈의 사용(import)
      • 4.3.3. 파이썬 식별자(Identifiers)
      • 4.3.4. 예약어(Reserved Words)
      • 4.3.5. 행(Lines)과 들여쓰기(Indentation)
      • 4.3.6. 문자열 표시
      • 4.3.7. 주석
      • 4.3.8. 파이썬 변수(Variables)
    • 4.4. 자료형과 연산자
      • 4.4.1. 자료형
      • 4.4.2. 파이썬 연산자
    • 4.5. 조건문과 반복문
      • 4.5.1. 조건문
      • 4.5.2. 반복문
    • 4.6. 함수
      • 4.6.1. 함수의 종류
    • 4.7. 모듈(Modules)
      • 4.7.1. 모듈의 참조 위치
      • 4.7.2. 네임스페이스(Namespace)와 범위(Scoping)
      • 4.7.3. dir( ) 함수
      • 4.7.4. 패키지(Packages)
      • 4.7.5. 기본 내장 모듈
    • 4.8. 숫자형 활용
      • 4.8.1. 실습: 계산기 만들기
    • 4.9. 문자열(Strings) 활용
      • 4.9.1. Unicode 한글의 사용
      • 4.9.2. 이스케이프 문자
      • 4.9.3. 문자열 연산자
      • 4.9.4. 문자열 포맷 연산자
      • 4.9.5. 내장 문자열 함수
    • 4.10. 시퀀스(Sequence) 자료형 활용
      • 4.10.1. 리스트(Lists)
      • 4.10.2. 튜플(Tuple)
      • 4.10.3. 딕셔너리(Dictionary)
    • 4.11 Class
    • 4.12. Date & Time
    • 4.13. 파이썬 에러처리
  • 5. 기초수학
  • 6. 머신러닝을 위한 파이썬
  • 7. 텐서플로 2.x
  • 8. 딥러닝을 이용한 자연어 처리 입문
  • 9. 파이토치로 시작하는 딥 러닝 입문
  • 9.6 6. Pytorch lightning
  • A1. 필수 학습 라이브러리들
    • 4.1 NumPy
      • 4.1.1. Basic Operations
      • 4.1.2. Indexing, Slicing 그리고 Iterating
      • 3.13.3. Shape Manipulation
    • 4.2 Matplotlib
    • 4.3 SciPy
      • 4.3.1. Interpolation
      • 4.3.2. Optimization
      • 4.3.3. Fast Fourier transforms: scipy.fftpack
    • 4.4 Pandas
      • 4.4.1 Pandas 자료구조
      • 4.4.2 Pandas 활용하기
  • A2. 머신러닝 & 딥러닝
    • 5.1. 머신러닝 개념 소개
      • 5.1.1. 경사하강법(Gradient Descent )
      • 5.1.2. 분류 (Classification)
      • 5.1.3. MNIST Dataset 소개
    • 5.2. 딥러닝 개념 소개
      • 5.2.1. 퍼셉트론
      • 5.2.2. 인공 신경망
      • 5.2.3. 대표적인 딥러닝 모델
    • 5.3. Tensorflow를 사용한 학습
      • 5.3.1. TensorFlow 기본 메커니즘
      • 5.3.2. Tensorflow Types
      • 5.3.3. 기본 동작 실습
      • 5.3.4. 선형 회귀
      • 5.3.5 로지스틱 회귀
    • 5.4. Keras를 사용한 학습
      • 5.4.1. Keras로 분석한 선형 회귀
      • 5.4.2. CNN(Convolutional Neural Network)
      • 5.4.3. Fashion MNIST with Keras
    • 5.5. 웹 크롤링
      • 5.5.1. requests와 BeautifulSoup으로 웹 크롤러 만들기
Powered by GitBook
On this page

Was this helpful?

  1. A1. 필수 학습 라이브러리들
  2. 4.3 SciPy

4.3.2. Optimization

Previous4.3.1. InterpolationNext4.3.3. Fast Fourier transforms: scipy.fftpack

Last updated 6 years ago

Was this helpful?

Optimization(최적화)는 최소화 또는 평형에 대한 수치 솔루션을 찾는 문제입니다. scipy.optimize 모듈은 함수 최소화 (스칼라 또는 다차원), Curve fitting 및 루트 찾기를위한 알고리즘을 제공합니다.

이 모듈의 함수들을 이해하려면 많은 수학적인 이론들이 필요합니다. 너무 어려워서 저도 대부분을 이해하지 못합니다. 사용법만 확인해 봅니다.

Curve Fitting이란 현실적으로 얻을 수 있는 데이터를 이용하여 그 데이터들을 표현할 수 있는 가장 이상적인 수학적인 직선, 혹은 곡선을 얻어내는 기술을 말합니다. 예를 들어 좌표계에서 의 세 점을 지나는 직선의 방정식을 구하라고 한다면 의 식을 구할 수 있습니다. 그러나 현실적으로 얻을 수 있는 데이터는 언급 된 예처럼 정확하게 선 위에 점들이 분포하게끔 구할 수 없을 것입니다. 이 때 실제 데이터와 얻어지는 직선이나 곡선 사이의 오차를 최소화 할 수 있는 여러가지 기술들이 Curve Fitting입니다. 이러한 Curve Fitting은 과학/공학 분야에서 실험 데이터의 분석, 통계학 분야, 그리고 여러가지 자동화 기술 등 광범위한 분야에서 핵심 기술로 사용되고 있습니다.

예제를 풀어보겠습니다. 1월부터 시작되는 매월 알래스카의 기온은 섭씨로 다음과 같습니다.

우리는 알래스카의 최소 및 최대 기온을 매달에 측정하여 매년 변화하는 것을 나타내는 함수를 찾으려고 합니다. 이를 위해 우리는 주기적 함수를 적용할 것입니다.

max:  17,  19,  21,  28,  33,  38, 37,  37,  31,  23,  19,  18
min: -62, -59, -56, -46, -32, -18, -9, -13, -25, -46, -52, -58

위의 데이터를 그래프로 표시하는 코드는 다음과 같습니다.

 import numpy as np
 import matplotlib.pyplot as plt

 temp_max = np.array([17,  19,  21,  28,  33,  38, 37,  37,  31,  23,  19,  18])
 temp_min = np.array([-62, -59, -56, -46, -32, -18, -9, -13, -25, -46, -52, -58])

 months = np.arange(12)
 plt.plot(months, temp_max, 'ro')
 plt.plot(months, temp_min, 'bo')
 plt.xlabel('Month')
 plt.ylabel('Min and max temperature')

 plt.show()

위의 코드를 실행하면 다음과 같은 그래프가 나타납니다. 붉은 점은 최대온도, 파란 점은 최저 온도를 나타내는 것입니다.

이 데이터에 주기적 함수를 적용해 보겠습니다.

curve_fit 함수에 제공되는 인수는 다음과 같습니다.

  • f : 모델 함수 f(x, …), 독립 변수를 첫 번째 인수로 사용하고 매개 변수를 별도의 나머지 인수로 사용해야 합니다.

  • xdata : k 예측자를 갖는 함수의 M 길이 시퀀스 또는 (k, M) 모양의 배열, 데이터가 측정되는 독립 변수입니다.

  • ydata : M- 길이 시퀀스, 종속 데이터 - 명목상 f (xdata, ...)

  • p0 : 없거나, 스칼라 또는 N 길이 시퀀스, 선택 사항입니다. 매개 변수에 대한 초기 추측 값. 없다면 초기 값은 모두 1이 됩니다.

여기서 커브 피팅에 대한 모델 함수를 구하는 방법은 상단히 복잡한 수학적 이론이 필요합니다. 여기서 함수의 사용법만 체크하고 넘어 갑니다.

위의 코드에 아래에 다음 코드를 추가해 보겠습니다.

 from scipy import optimize
 def yearly_temps(times, avg, ampl, time_offset):
     return (avg + ampl * np.cos((times + time_offset) * 2 * np.pi / times.max()))

 res_max, cov_max = optimize.curve_fit(yearly_temps, months, temp_max, [20, 10, 0])
 res_min, cov_min = optimize.curve_fit(yearly_temps, months, temp_min, [-40,20,0])

테스트를 위해 위의 코드 아래에 다음 코드를 추가해 봅니다

days = np.linspace(0, 12, num=365)

plt.figure()
plt.plot(months, temp_max, 'ro')
plt.plot(days, yearly_temps(days, *res_max), 'r-')
plt.plot(months, temp_min, 'bo')
plt.plot(days, yearly_temps(days, *res_min), 'b-')
plt.xlabel('Month')
plt.ylabel('Temperature ($^\circ$C)')
plt.show()

결과로 출력되는 두 플롯을 비교해 보십시요.

전체 소스 코드는 다음과 같습니다.

 import numpy as np
 import matplotlib.pyplot as plt

 temp_max = np.array([17,  19,  21,  28,  33,  38, 37,  37,  31,  23,  19,  18])
 temp_min = np.array([-62, -59, -56, -46, -32, -18, -9, -13, -25, -46, -52, -58])

 months = np.arange(12)
 plt.plot(months, temp_max, 'ro')
 plt.plot(months, temp_min, 'bo')
 plt.xlabel('Month')
 plt.ylabel('Min and max temperature')


 from scipy import optimize
 def yearly_temps(times, avg, ampl, time_offset):
     return (avg
             + ampl * np.cos((times + time_offset) * 2 * np.pi / times.max()))

 res_max, cov_max = optimize.curve_fit(yearly_temps, months, temp_max, [20, 10, 0])
 res_min, cov_min = optimize.curve_fit(yearly_temps, months,  temp_min, [-40, 20, 0])

 days = np.linspace(0, 12, num=365)

 plt.figure()
 plt.plot(months, temp_max, 'ro')
 plt.plot(days, yearly_temps(days, *res_max), 'r-')
 plt.plot(months, temp_min, 'bo')
 plt.plot(days, yearly_temps(days, *res_min), 'b-')
 plt.xlabel('Month')
 plt.ylabel('Temperature ($^\circ$C)')

 plt.show()
x-y
(1,2), (2,3), (3,4)
y=x+1