DATA/머신 러닝

DATA/머신 러닝

    [머신 러닝] 모델 저장과 복원

    모델 저장과 복원 시퀀셜 API와 함수형 API를 사용하면 훈련된 케라스 모델을 저장하는 것은 쉽습니다. 아래와 같이 할 수 있습니다. model = keras.models.Sequential([...]) model.compile([...]) model.fit([...]) mode.save('filename.h5') # HDF5 포맷으로 저장 이렇게 저장하면 모델 구조와 층의 모든 파라미터 등 모든 정보를 저장합니다. 일반적으로 하나의 파이썬 스크립트에서 모델을 훈련하고 저장한 다음 하나 이상의 스크립트에서 모델을 로드하고 예측을 만드는 데 사용합니다. 모델 로드 또한 다음과 같이 간단합니다. model = keras.models.load_model('filename.h5')

    [머신 러닝] 다층 퍼셉트론

    다층 퍼셉트론과 역전파 다층 퍼셉트론은 입력층 하나와 은닉층이라 불리는 하나 이상의 TLU 층과 출력층으로 구성됩니다. 입력층과 가까운 층을 하위 층, 출력층에 가까운 층을 상위 층이라 부릅니다. 출력층을 제외하고 모든 층은 편향 뉴런을 포함하며 다음 층과 완전히 연결돼 있습니다. 은닉층을 여러 개 쌓아 올린 인공 신경망을 심층 신경망(deep neural network, DNN)이라고 합니다. 딥러닝은 심층 신경망을 연구하는 분야이며 조금 더 일반적으로는 연산이 연속하여 길게 연결된 모델을 연구합니다. 다층 퍼셉트론을 훈련할 방법을 찾는 연구가 긴 시간 지속되다가 데이비드 루멜하트, 제프리 힌턴, 로날드 윌리엄스가 역전파 훈련 알고리즘을 소개했습니다. 이 알고리즘은 효율적 기법으로 그레이디언트를 자동으..

    [머신 러닝] 퍼셉트론

    퍼셉트론 퍼셉트론은 가장 간단한 인공 신경망 중 하나로 1957년에 프랑크 로젠블라트가 제안했습니다. 퍼셉트론은 TLU(threshold logic unit)또는 LTU(linear threshold unit)이라고 불리는 인공 뉴런을 기반으로 합니다. 아래 그림처럼 입력과 출력이 어떤 숫자이고 각 입력 연결은 가중치와 연관되어 있습니다. TLU는 입력의 가중치 합을 계산(\( z = w_{1}x_{1} + w_{2}x_{2} + \dots + w_{n}x_{n} = x^{T}w \))한 뒤 계산된 합에 계단 함수를 적용하여 결과를 출력합니다. 즉, \(h_{w}(x) = step(z), z=x^{T}w\) 입니다. 퍼셉트론에서 가장 널리 사용되는 계단 함수는 헤비사이드 계단 함수(heaviside st..

    [머신 러닝] 비지도 학습

    비지도 학습이란? 실제로 사용할 수 있는 데이터는 대부분 레이블이 없습니다. 레이블이 없는 데이터를 이용해서 데이터가 어떻게 구성되어있는지를 알아내는 문제의 범주에 속합니다. 이번 포스트에서는 몇 가지 비지도 학습과 알고리즘을 알아보겠습니다. 군집 (clustering) 이상치 탐지 (outlier detection) 밀도 추정 (density estimation) 군집 (clustering) 비슷한 샘플을 구별해 하나의 클러스터 또는 비슷한 샘플의 그룹으로 할당하는 작업입니다. 분류처럼 각 샘플은 하나의 그룹에 할당됩니다. 하지만 분류와 달리 군집은 비지도학습입니다. 위 그림을 보면 왼쪽에는 각 샘플의 클래스가 구분되어 나타나 있습니다. 이 데이터셋은 레이블이 되어있습니다. 오른쪽은 동일한 데이터셋이지..

    [머신 러닝] 차원 축소

    차원 축소 실제로 머신 러닝 문제를 다룰 때에는 훈련 샘플이 수천 심지어 수백만 개의 특성을 갖고 있을 것입니다. 이런 많은 특성은 훈련을 느리게 하고, 좋은 솔루션을 찾기 어렵게 만듭니다. 이런 문제를 차원의 저주라고 합니다. 다행히도 실전 문제에서는 특성 수를 크게 줄여서 불가능한 문제를 가능한 범위로 바꿀 수 있는 경우가 많습니다. 차원의 축소는 분류 문제에 크게 중요하지 않은 부분을 걸러내어 특성 수를 줄이는 것입니다. 차원을 축소시키면 일부 정보가 유실되므로 속도는 빨라질 수 있지만 시스템의 성능이 나빠질 수 있습니다. 그리고 작업 파이프라인이 복잡해지고 유지 관리가 어려워집니다. 따라서 차원 축소를 고려하기 전에 훈련이 너무 느린지먼저 테스트해봐야합니다. 어떤 경우에는 차원을 축소시키면 잡음이..

    [머신 러닝] 서포트 벡터 머신 (support vector machine)

    서포트 벡터 머신이란? 서포트 벡터 머신(SVM)은 매우 강력하고 선형이나 비선형 분류, 회귀, 이상치 탐색에도 사용할 수 있는 다목적 머신러닝 모델입니다. 서포트 벡터 머신 모델은 가장 인기 있는 모델에 속합니다. 이 모델은 특히 복잡한 분류 모델에 잘 들어맞으면 중간 크기의 데이터셋에 적합합니다. 선형 SVM 분류 SVM의 기본 아이디어는 그림으로 설명하는 것이 가장 좋습니다. 그림을 보며 설명하겠습니다. 위 그림에서 H3는 클래스를 올바르게 분류하고 있지 않습니다. H1과 H2는 클래스를 올바르게 분류하는데, H1은 결정 경계가 샘플에 너무 가까워 새로운 샘플에 대해서는 잘 작동하기 힘듭니다. H2는 결정 경계가 샘플과 멀리 떨어져있어 새로운 샘플에 대해 상대적으로 더 잘 작동할 것입니다. 여기 있..

    [머신 러닝] 경사 하강법 (Gradient descent)

    앞서 선형 회귀를 다룰 때 경사 하강법을 간단하게 설명한 적이 있는데, 경사 하강법은 많은 머신 러닝 및 딥러닝 알고리즘에 사용되므로 좀 더 자세히 설명하고 넘어가겠습니다. 데이터 준비 HTML 삽입 미리보기할 수 없는 소스 배치 경사 하강법 경사 하강법을 구현하려면 각 모델 파라미터에 대해 비용 함수의 그레이디언트를 계산해야 합니다. 다시 말해서, 모델 파라미터가 조금 변경될 때 비용 함수가 얼마나 바뀌는지를 계산해야 합니다. 배치 경사 하강법에서는 매 경사 하강법 스텝에서 전체 훈련 세트에 대해 계산합니다. 그래서 이 알고리즘을 배치 경사 하강법이라고 합니다. 매 스텝에서 훈련 데이터 전체를 사용하기 때문에 매우 큰 훈련 세트에서는 아주 느립니다. 이 알고리즘을 간단하게 구현해보겠습니다. HTML 삽..

    [머신 러닝] 분류 (Classification)

    MNIST 불러오기 이번 포스트에서는 고등학생과 미국 인구조사국 직원들이 쓴 70,000개의 작은 숫자 이미지를 모은 MNIST 데이터셋을 사용하겠습니다. sklearn으로 MNIST를 불러오는 코드입니다. HTML 삽입 미리보기할 수 없는 소스 이진 분류기 훈련 문제를 단순화해서 모든 숫자가 5인지 아닌지만 분류해보겠습니다. 이 분류기는 '5'와 '5 아님'의 두 가지 클래스를 구분할 수 있는 이진 분류기(binary classifier)의 한 예입니다. HTML 삽입 미리보기할 수 없는 소스 성능 측정 분류기 평가는 회귀 모델보다 훨씬 어렵기 때문에 조금 길게 설명하도록 하겠습니다. HTML 삽입 미리보기할 수 없는 소스 다중 분류 여태 다룬 이진 분류는 두 개의 클래스를 구별하는 반면 다중 분류기(..