기본 콘텐츠로 건너뛰기

라벨이 Python인 게시물 표시

[Machine Learning] 오차역전파 (Back propagation)

오차역전파 (Back propagation)란? 컴퓨터는 주어진 입력 값을 신경망을 거쳐 출력 값으로 반환합니다. 신경망은 [입력층 <> 은닉층 <> 출력층]과 같이 좌측에서 우측으로의 진행 방향을 가지며 순전파(Forward propagation)라고 합니다. 이와 반대로 진행 방향을 가지는 것을 역전파(Back propagation)라고 합니다. 오차 역전파 과정은 컴퓨터가 예측 값의 정확도를 높이기 위해 출력 값과 실제 값을 비교하여 가중치를 변경하는 작업 을 말합니다. 여기서 오차란 모델의 예측 값과 실제 값의 차이 를 말하고, 구체적인 오차의 값은 loss function을 통해 계산합니다. 오차는 왜 계산할까? 오차는 우리가 예측하고자 하는 실제 함수를 모르기 때문에 발생합니다.  이해를 돕기 위해 일상 생활에서 경험할 수 있는 날씨를 예로 들어봅시다. 만약 오늘 습도가 67%일 때 내일 비가 올 확률을 100% 정확하게 알 수 있다면 굳이 머신러닝이 필요하지 않습니다. 하지만 우리는 오늘의 습도와 내일의 강수 확률의 상관관계를 알 수 없습니다. (물론 통계기반으로 데이터가 많이 있어서 어느정도 규명은 가능하지만, 이해를 돕기위해 알 수 없다고 합시다.) 그래서 이들의 관계를 근사하는 함수(선,면 등 따위)를 만들고, 이를 우리는 모델이라고 합니다. 그런데 과연 강수 확률이 습도에만 영향을 받을까요? 당연히 그렇지 않습니다. 강수 확률에 영향을 미치는 다양한 기상 변수가 존재합니다. 그래서 우리가 만든 모델은 필연적으로 여러 변수가 존재하는 다변수 함수의 형태를 갖게 됩니다. 만약 각 변수가 결과에 미치는 영향력을 알 수 있다면 함수를 더 정확하게 근사할 수 있습니다. 경사하강법과 오차역전파 다변수 함수의 계수를 구하기 위해 사용하는 방법이 바로 경사하강 법입니다. 어떤 변수의 계수(가중치)를 바꿨는데 오차가 줄어든다면 이는 이전보다 더 정확한 함수를 찾은 것과 같습니다. 이러한 과정을 통해 가중치를 계속...

[Python] 파이썬 무적 스케줄러 소개 - APScheduler

APScheduler란? APScheduler는 Advanced Python Scheduler의 줄임말로 스케줄을 예약하여 실행할 수 있도록 돕는 파이썬 라이브러리이다. 특정 작업에 주기성을 스케쥴링하는 Airflow등이 있지만, 직관적이며 기존 어플리케이션에서 사용 가능한 큰 장점이있다. 기존 스케줄러 라이브러리와 가장 큰 차이점이자 장점은 while문과 같은 무한루프를 돌리지 않아도 코드를 비동기적으로 실행시킬 수 있다. 여기서 비 동기적이란 코드의 실행 순서에 맞춰 진행하는 것이 아닌 동시 다발적으로 실행하는 것을 말한다. 예를 들면, p2p 사이트에서 다운 받을때 하나씩 받는 것을 동기적, 다수를 한번에 받는것을 비동기적이라 할 수 있다. 본 포스트에서는 본인의 경험을 바탕으로 주요 내용만을 이야기하겠다. 자세한 내용은  apscheduler  공식 user guide에서 확인 가능하다. ✔ 스케줄러 종류 BlockingScheduler : 하나의 프로세스에서만 동작하며 스케쥴링 된 작업이 실행될때 다른 작업은 일시중단된다. BackgroundScheduler : 백그라운드에서 동작하며 스케쥴링 된 작업이 실행될때 다른 작업도 할 수 있다. ✔ 실행방식 Cron : 주기의 시간(time)에 실행. Date 및 Time 지정이 가능하다 Interval : 일정 주기로 실행 Date : 특정 날짜로 실행(사실상 Cron과 동일 함) APScheduler 라이브러리 설치는 아래와 같이 1번줄 명령어로 수행하며, 설치 실패 시 2번줄과 같이 강제로 설치 가능하다. 1 2 pip install APScheduler pip install  - - user APScheduler Blocking Scheduler Blocking Scheduler의 사용 방법은 다음과 같다. 주의할 점은 sched.start()다음은 실행되지 않는다. Scheduler.job 함수의 자세한 내용은 ...

[Python] 기본적인 pip 명령어 모음

pip 명령어는 무엇일까? 어렵지 않습니다. 한줄 요약을 먼저 보고 본문 내용응 천천히 이해해볼까요? 혹시나 이해가 어려분 부분이 있다면, 꼭 알려주세요. 한 줄 요약     ⓐ 파이썬 패키지 관리자다. 다양한 패키지를 설치, 업데이트, 삭제할 수 있다. 먼저 pip(Package Installer for Python)는 파이썬에 기본적으로 내장되어 있는 패키지 매니저이다. 이 명령어를 사용하면  Python Package Index 에 다른 개발자들이 올려놓은 패키지를 쉽게 다운로드하고 설치할 수 있다. 이번 포스팅에서는 pip를 사용하여 패키지를 관리하는 기본적인 방법 에 대해서 알아보겠다. 여기서 문득 누군가는 conda는 무엇일까?란 생각을 할 것 같아서 미리 답을 달아봅니다. Conda는 아나콘다에서 제공하는 파이선 패키지 매니저라고 생각하시면 좋을 것 같습니다. 범위로 보면 pip > conda 입니다. 즉 pip install OOO 시작하면 대부분은 설치되니.. 참고 바랍니다. 기본적인 pip 명령어 모음 👍 터미널(Terminal)이나 쉘(Shell) 등 프롬프트(Prompt)에서 다음의 명령어를 실행하면 된다. 통합 개발 환경(IDE, Jupyter Notebook, VScode 등)에서도 명령어를 사용할 때는 pip 앞에 ! (느낌표)를 붙여주자. 예를들면 ! pip install {package name} 와 같다.   python -version  파이썬 version 확인  pip - version  pip 버전 확인  pip list  설치된 패키지 목록 확인  python -m pip install --upgrade pip  pip 업그레이드 ...

[General] 커널(Kernel)이란 무엇인가?

운영 체제란 무엇일까? 운영체제(Operating System)는 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있도록 환경을 제공하는  여러 프로그램의 모임 이다 . 운영체제는 컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스로서 동작하는 시스템 소프트웨어의 일종으로, 다른 응용프로그램이 유용한 작업을 할 수 있도록 환경을 제공해준다. 커널 이란 무엇일까? 컴퓨터와 전원을 켜면 운영체제는 이와 동시에 수행된다. 한편 소프트웨어가 컴퓨터 시스템에서 수행되기 위해서는 메모리에 그 프로그 램이 올라가 있어야 한다. 마찬가지로 운영체제 자체도 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라가야 한다.  하지만, 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 한정된 메모리 공간의 낭비가 심할것이다. 따라서 운영체제 중  항상 필요한 부분 만을 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 된다. 이 때  메모리에 상주하는 운영체제의 부분을 커널 이라 한다. 또 이것을 좁은 의미의 운영체제라고도 한다. 즉 커널은 메모리에 상주하는 부분으로써 운영체제의 핵심적인 부분 을 뜻한다.  이에 반에 넓은 의미의 운영체제는 커널뿐 아니라 각종 시스템을 위한 유틸리티들을 광범위하게 포함하는 개념이다. 다만 이러한 커널은 항상 컴퓨터 자원들을 바라만 보고 있기에 사용자와의 상호작용은 지원하지 않는다.  따라서 사용자와의 직접전인 상호작용을 위해 프로그램을 제공하게 되는데, 대표적으로 쉘(Shell)이라는 명령 프롬프트 등이 있다. ☝요약하자면 사용자 → 시스템 프로그램(Shell 등을 사용)  →  커널  →  컴퓨터 자원 접근 그렇다면 Jupyter에서 커널이란 무엇일까? 주피터 커널은  프로그래밍 언어가 실행되는 환경 을 말한다. 주피터는 Python 외에도 R이나 기타 프...

[Data Science] 주성분 분석(PCA, Principal Component Analysis)

주성분 분석 (PCA, principal component analysis)란  차원축소와 변수추출 기법을 통해 전체 dataset(=독립변수)의 분산을 가장 잘 설명하는 성분을 말한다. 즉, 데이터 자원을 줄이고 중요한 정보를 추출하기 위해 사용되는 통계 기법이다. PCA는 다차원 dataset를 가장 중요한 변수(주성분)로 변환하여 데이터의 변동성을 최대한 보존하면서 아래 그림과 같이 차원을 축소한다. 분류(classification) 모델의 대표적인 dataset인 Iris 데이터와 Python 코드를 활용한 주성분 분석은 다음과 같다. 1 2 3 4 5 6 7 import  pandas  as  pd import  numpy  as  np # Fisher,R. A.. (1988). Iris. UCI Machine Learning Repository. https://doi.org/10.24432/C56C76. url  =   "https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv" # name = ['sepal length', 'sepal width', 'petal length', 'petal width', 'target'] df  =  pd.read_csv(url) print (df) 주성분 분석을 하기 전에 데이터 스케일링을 하는 이유는 데이터의 스케일에 따라 주성분의 설명 가능한 분산량이 달라질 수 있기 때문에 표준화를 진행한다. 여기서 표준화란 각 변수에 평균을 빼주고 표준편차로 나눠준다.  사이킷런의 preprocessing 서브 패키지를 이용하면 아래와 같다. 데이터 스케일링을 위한...