본문 바로가기
  • 데이터에 가치를 더하다, 서영석입니다.

핸즈온머신러닝5

Hands-on ML : 4. 6 로지스틱 회귀 4.6 로지스틱 회귀 로지스틱 회귀(logistic regression)는 샘플이 특정 클래스에 속할 확률을 추정하는 데 널리 사용된다. 추정 확률이 50% 이상이면 모델은 그 샘플이 해당 클래스에 속한다고 예측, 아니면 클래스에 속하지 않는다고 예측한다. -> 이진 분류기이다. 4.6.1 확률 추정 로지스틱 회귀 모델은 입력 특성의 가중치 합에 편향을 더해 계산한다. 이때 선형 회귀처럼 바로 결과를 출력하지 않고, 결과값의 로지스틱(logistic)을 출력한다. 로지스틱은 0 과 1 사이의 값을 출력하는 시그모이드 함수(sigmoid function)이다. 이 함수를 거쳐나온 확률값으로 최종적으로 주어진 데이터가 어느 클래스에 속할지에 대해 결정하게 된다. 보통 확률값이 0.5 이상이면 1 (양성 클래.. 2022. 5. 26.
Hands-on ML : 4. 3 다항회귀 및 4.4 학습곡선 4.3 다항회귀 import numpy as np import matplotlib.pyplot as plt m = 100 X = 6 * np.random.rand(m,1) - 3 y = 0.5 * X**2 + X + 2 + np.random.randn(m,1) # 약간의 노이즈 포함 plt.plot(X,y,"b.") plt.show() 사이킷런의 PolynomialFeatures를 사용하여 훈련 데이터를 변환 from sklearn.preprocessing import PolynomialFeatures poly_features = PolynomialFeatures(degree=2, include_bias=False) X_poly = poly_features.fit_transform(X) print(X[0.. 2022. 5. 19.
Hands-on ML : 4. 2 확률적 경사하강법, 미니배치 경사 하강법 배치 경사 하강법 문제점 배치 경사 하강법의 문제는 매 스텝에서 전체 훈련 세트를 사용해 그레디언트를 계산한다는 것이다. 훈련 세트가 커지면 매우 느려지는 이유로 확률적 경사하강법을 사용한다. 확률적 경사하강법 매 스텝에서 한 개의 샘플을 무작위 선택하고 그에 대한 그레이디언트를 계산한다. 매 반복에서 적은 데이터를 처리하기에 속도가 매우 빠르며, 1개 샘플에 대한 메모리만 필요하므로 매우 큰 훈련 데이터 셋도 가능하다. 반면에 확률적이기에 배치 경사 하강법보다 불안정하다는 단점이 있다. 또한 매끄러운 하강이 아닌 요동치는 것을 볼 수 있는데, 요동치는 것은 지역 최솟값을 뛰어넘어서 전역 최솟값을 찾게 도와줄 수 있다. 학습률이 너무 천천히 줄어들면 오랫동안 최솟값 주변을 맴돌거나 지역 최솟값에 머무를 .. 2022. 5. 18.
Hands-on ML : 4. 2 경사 하강법 경사 하강법 (gradient descent) 최적의 해법을 찾을 수 있는 일반적인 최적화 알고리즘 아이디어 : 비용 함수를 최소화하기 위해 반복해서 파라미터 조정해가는 것. 제시된 함수의 기울기로 최소값을 찾아내는 머신러닝 알고리즘 1. 특정 파라미터 값으로 시작 : 가중치 W1에 대한 시작점을 선택한다. 2. 비용 함수 (Cost function) 계산 : 모델을 구성하는 가중치 W의 함수 3. 반복 학습 (iteration) : 과정을 n번 반복하며 최소값으로 수렴. (스텝의 크기가 중요) -> numeric analysis에서의 수치적 접근법과 같다. ( ex) Bisection algorithm etc..) 4.2.1 배치 경사 하강법 경사 하강법을 구현하기 위해 각 모델 파라미터에 대한 비용 .. 2022. 5. 17.
Hands-on ML : 4. 선형 회귀 및 계산 복잡도 (시간복잡도, 공간복잡도) 4.1 선형 회귀 (Linear regression) 4.1.1 정규방정식 (normal equation) 통계에서 일반 최소 제곱은 선형 회귀 모델에서 알려지지 않은 매개변수를 추정하기 위한 선형 최소제곱 방법의 한 유형 이를 파이썬으로 나타내보자. X=2*np.random.rand(100,1) y=4+3*X+np.random.randn(100,1) 정규방정식으로 Theta 구하기. X_b=np.c_[np.ones((100,1)),X] theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y) X_new=np.array([[0],[2]]) X_new_b=np.c_[np.ones((2,1)),X_new] y_predict=X_new_b.dot(theta_.. 2022. 5. 12.