본문 바로가기
  • 조금 느려도, 꾸준히
반응형

전체 글59

Python Numpy - 넘파이 기본과 예제 도움 : Quickstart tutorial - Numpy v1.19.dev() Manual Quickstart tutorial — NumPy v1.19.dev0 Manual NumPy provides familiar mathematical functions such as sin, cos, and exp. In NumPy, these are called “universal functions”(ufunc). Within NumPy, these functions operate elementwise on an array, producing an array as output. See also all, any, apply_along_a numpy.org # 넘파이 베이직 넘파이는 다차원의 배열 데이터를 효율적으로.. 2020. 1. 25.
핸즈온 머신러닝(5) - 로지스틱 회귀 2 # 소프트맥스 회귀 로지스틱 회귀 모델은 직접 다중 클래스를 지원하도록 일반화될 수 있다. 이를 소프트맥스 회귀(Softmax Regression) 또는 다항 로지스틱 회귀(Multinomial Logistic Regression) 라고 한다. 소프트맥스 회귀 모델은 샘플 $\mathrm{x}$ 가 주어졌을 때 각 클래스 $k$ 에 대한 점수 $s_k(\mathrm{x})$ 을 계산하고, 그 점수에 소프트맥스 함수(정규화된 지수 함수) 를 적용하여 각 클래스의 확률을 추정한다. 다음은 $s_k(\mathrm{x})$ 을 식으로 나타낸 것이다. $$ s_k(\mathrm{x}) = \big(\theta^{(k)} \big)^T \cdot \mathrm{x} $$ 각 클래스는 자신만의 파라미터 벡터 $\th.. 2020. 1. 24.
핸즈온 머신러닝(5) - 로지스틱 회귀 1 어떤 회귀 알고리즘은 분류에서도 사용할 수 있으며, 그 반대의 경우도 있다. 로지스틱 회귀(Logistic Regression)는 샘플이 특정 클래스에 속할 확률을 추정하는 데 널리 사용된다. 추정 확률이 50% 이상이면 모델은 그 샘플이 해당 클래스에 속한다고 예측하며, 그렇지 않으면 클래스에 속하지 않는다고 예측한다. 즉 이진 분류기이다. # 확률 추정 로지스틱 회귀 모델은 입력 특성의 가중치 합에 편향을 더하여 계산한다. 이때 선형 회귀처럼 바로 결과를 출력하지 않고, 결과값의 로지스틱(Logistic)을 출력한다. 로지스틱 회귀 모델의 확률 추정 벡터 표현식은 다음과 같다. $$ \hat{p} = h_\theta (\mathrm{x}) = \sigma \big( \theta^T \cdot \mat.. 2020. 1. 24.
핸즈온 머신러닝(5) - 규제가 있는 선형 모델 선형 회귀 모델에서는 보통 모델의 가중치를 제한하여 규제를 가한다. 가중치를 제한하는 방법에 따라 릿지 회귀, 라쏘 회귀, 엘라스틱넷으로 구분할 수 있다. # 릿지 회귀 (티호노프 규제) 규제항 $\alpha \sum_{i=1}^{n} \theta_i^2$ 이 비용 함수에 추가된 선형 회귀 버전이다. 이로 인해 학습 알고리즘을 데이터에 맞추는 과정에서 모델의 가중치가 가능한 작게 유지되도록 한다. 규제항은 훈련하는 동안에만 비용 함수에 추가되며 모델의 훈련이 끝나면 모델의 성능을 규제가 없는 성능 지표로 평가한다. 릿지 회귀의 비용 함수는 다음과 같다. $$ J(\theta) = MSE(\theta) + \alpha \frac{1}{2}\sum_{i=1}^{n} \theta_i^2$$ 하이퍼파라미터 $\.. 2020. 1. 24.
핸즈온 머신러닝(5) - 학습 곡선 # 학습 곡선 지난 시간에 포스팅했던 다항 회귀 모델은 보통의 선형 회귀 모델보다 주어진 훈련 데이터에 훨씬 더 잘 맞추려고 했다. 다음의 코드는 2차원을 넘어 30차원, 100차원 다항 회귀 모델의 예측 결과를 비교한 것이다. from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline for style, width, degree in (('k--',1,100),('g-',1,30),('r-',1,2)): poly_features = PolynomialFeatures(degree=degree, include_bias=False) standard = StandardScaler() lin_reg = LinearR.. 2020. 1. 24.
핸즈온 머신러닝(5) - 다항 회귀 # 다항 회귀 데이터가 단순한 직선의 형태가 아닌 비선형 형태여도, 선형 모델을 사용하여 비선형 데이터를 학습할 수 있다. 이때 각 특성의 거듭제곱을 새로운 특성으로 추가하고, 확장된 특성을 포함한 데이터셋에 선형 모델을 훈련시키는 것인데, 이러한 기법을 다항 회귀(Polynomial Regression) 이라고 한다. 실습하기 위해 먼저 노이즈를 포함한 간단한 2차 방정식으로 비선형 데이터를 생성해 보도록 한다. import numpy as np import numpy.random as rnd rnd.seed(42) m = 100 X = 6 * rnd.rand(m, 1) - 3 y = 0.5 * X**2 + X + 2 + rnd.randn(m, 1) $y = 0.5x^2 + x + 2 + noise$ .. 2020. 1. 23.
핸즈온 머신러닝(5) - 선형 회귀와 경사 하강법 2 이전 포스트에서 경사 하강법 알고리즘을 간단히 구현해 보았다. 코드를 다시 가져와보면 eta = 0.1 n_iterations = 1000 m = 100 theta = np.random.randn(2,1) for iteration in range(n_iterations): gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y) theta = theta - eta * gradients 여기서 eta 변수, 즉 학습률 $\eta$ 을 나타내는 변수의 값이 0.1로 설정되어 있는데, 학습률 $\eta$ 를 바꿔보면 어떻게 될까? 임의로 다른 학습률을 사용하여 경사 하강법의 스텝 처음 10개를 그래프로 그려보면 다음과 같다. theta_path_bgd = [] def plot_gr.. 2020. 1. 23.
핸즈온 머신러닝(5) - 선형 회귀와 경사 하강법 1 이번 장에서는 신경망(neural network)을 이해하고 구축, 훈련시키는데 필수적인 기반 지식이 되는 알고리즘의 작동 원리에 대해서 다루기로 한다. 구현체가 어떻게 작동하는지 잘 이해하면 적절한 모델, 올바른 훈련 알고리즘, 작업에 맞는 좋은 하이퍼파라미터를 빠르게 찾을 수 있으며, 디버깅이나 에러를 효율적으로 분석하는 데 도움이 된다. # 선형 회귀 일반적으로 선형 모델은 입력 특성의 가중치 합과 편향(bias)라는 상수를 더해 예측을 만든다. (사진 참고) 사진에 나와있는 것 처럼 선형 모델의 방정식은 벡터 형태로 간단하게 쓸 수 있다. 모델을 훈련시킨다는 것은 모델이 훈련 세트에 가장 잘 맞도록 모델 파라미터를 설정하는 것이다. 이를 위해서는 먼저 모델의 훈련 데이터에 대한 성능을 측정해야 하.. 2020. 1. 23.
Google CoLab 사용하기 - 머신러닝 프로젝트 * 도움 : 안경잡이개발자 티스토리 블로그 Google CoLab으로 머신러닝 공부 편하게 시작하기 ※ Google Colaboratory란? ※ Google Colaboratory를 이용하게 되면, 기존에 주피터 노트북(Jupyter Notebook) 환경에서 인공지능을 공부하던 사람들은 이제 더욱 편하게 공부할 수 있게 됩니다. 자신의 컴퓨터.. ndb796.tistory.com # Google Colaboratory 핸즈온 머신러닝에 대한 포스트를 진행하면서 연습문제를 해결하는 도중, 필자의 Jupyter 환경에서 머신러닝 분류기를 학습시키고, 정확도를 추출하는데 상당히 오랜 시간이 걸리고 cpu 자원만을 이용해 진행하는데에 차질이 있었기 때문에 대안으로 Google 의 Colaboratory 를 .. 2020. 1. 22.
핸즈온 머신러닝(4) - 연습문제 1 # MNIST 데이터셋으로 분류기를 만들어 테스트 세트에서 97% 정확도를 달성하라 97%의 정확도를 달성하기 위해서는 먼저 적절한 분류기 모델을 설정해야 한다. MNIST 데이터셋은 숫자 손글씨를 분류하는 것이며, 각각의 데이터들은 유사성을 띈 군집 하에 동일한 레이블을 가지므로, 이번 연습문제 풀이에서는 K-최근접 이웃 알고리즘 (KNeighborsClassifier)을 사용하도록 한다. 프로젝트를 처음부터 다시 시작하므로 데이터셋을 내려받도록 한다. from sklearn.datasets import fetch_openml import numpy as np mnist = fetch_openml('mnist_784', version=1) X, y = mnist["data"], mnist["target.. 2020. 1. 22.
핸즈온 머신러닝(4) - 분류 2 # 다중 분류 다중 분류기를 구현하는 기법으로는 랜덤 포레스트 분류기나 나이브 베이즈(naive Bayes)분류기 같은 알고리즘으로 여러 개의 클래스를 직접 처리하거나, 이진 분류기를 여러 개 사용해 다중 클래스를 분류하는 방법이 있다. 이진 분류기를 여러 개 사용하여 다중 클래스를 분류할 때에는 각 분류기의 결정 점수 중에서 가장 높은 것을 클래스로 선택하게 되는데, 이를 일대다(one-versus-all, OvA)전략 이라고 한다. 혹은 숫자를 분류할 때 0과 1 구별, 0과 2 구별, 1과 2 구별 등과 같이 각 클래스의 조합마다 이진 분류기를 훈련시키는 방법이 있는데, 이를 일대일(one-versus-one, OvO)전략이라고 한다. 이때 클래스가 N 개라면 분류기는 N(N-1)/2 개가 필요하다.. 2020. 1. 21.
핸즈온 머신러닝(4) - 분류 1 # MNIST 이번 포스트에서는 너무나도 유명한 MNIST 손글씨 데이터셋을 사용하여 분류 시스템에 대해 다뤄보려고 한다. 사이킷런에서 제공하는 여러 헬퍼 함수를 사용해 잘 알려진 데이터셋을 내려받을 수 있다. 다음은 MNIST 데이터셋을 내려받는 코드이다. from sklearn.datasets import fetch_openml mnist = fetch_openml('mnist_784', version=1) 데이터셋에서 이미지 하나를 확인해보기 위해 샘플의 특성 벡터를 추출하여 28*28 배열로 크기를 바꾸고 matplotlib의 imshow() 함수를 사용해 그릴 수 있다. %matplotlib inline import matplotlib import matplotlib.pyplot as plt s.. 2020. 1. 21.
반응형