[Coursera 강의] 앤드류 응 Supervised Machine Learning - 2주차

2026. 3. 5. 00:58·ETC



Andrew Ng의 지도학습 머신러닝 2주 차 강의 정리

코세라 강의 링크 : https://www.coursera.org/learn/machine-learning

 

지도 머신 러닝: 회귀 및 분류

머신 러닝 전문 과정의 첫 번째 과정에서는 다음과 같은 내용을 학습합니다. - 인기 있는 머신 러닝 라이브러리인 NumPy와 scikit-learn을 사용하여 Python으로 머신 러닝 모델 구축 - 선형 회귀 및 로지

www.coursera.org

 

 


 

00. Linear Regression with Multiple variables

1) Learning Objectives

  • 벡터화(Vectorization)을 통한 다중선형회귀(multiple linear regression) 구현 
  • feature scaling, feature engineering, polynomial regression(다항회귀)를 사용하여 모델 학습 개선 
  • 선형 회귀 코드 구현 

 

01. Multiple linear regression (다중 선형회귀)

 

1) Multiple features 

- 1주차 강의 내용까지는 하나의 변수를 이용한 univariate regression에 대한 설명이었지만,

  현실 데이터에서는 보통 여러 features를 가지기 때문에 아래의 사진(집값 예측)처럼

  다양한 변수들을 통해 집값을 예측하는 경우가 많음 

집값 예측

- 기존에는 집값 예측에 집의 사이즈만을 고려했다면, 2주 차부터는 multiple features,

  다변수로 확장하여 집값(Price)을 예측한다.(j = 1...4)

  • x1: 집 평수
  • x2: 방 개수 
  • x3: 층수 
  • x4: 건축 연식 

i=2일 경우 위와 같은 row vector(행 벡터)로 나타냄, 벡터임을 나타내기 위해 화살표(선택) 사용

 


2)  다중 선형회귀 가설 함수 (Hypothesis Function)

변수가 1개인 선형회귀 모델식
다중 선형 회귀 모델식

  •  w1: feature1 이 1 증가할 때 예측값이 얼마나 변하는지
  •  b: 전체적인 기준점(절편)

dot product 표기

  • feature가 늘어나면 w도 늘어나며, 즉 파라미터(학습해야 하는 값)가 여러 개가 됨.
  • 다중 선형회귀는 각 feature가 결과에 미치는 영향도를 weight로 학습하는 모델
  • 이 경향을 모델이 학습한 값이 w1, w2,..., wn
  • 예를 들어 w1=50이면 집크기(x1)가 1 증가할 때 집값이 약 50 증가한다고 모델이 '학습' 했다는 의미

 


02. Vectorization(벡터화)

2-1) Vectorization(벡터화)가 필요한 이유

- 다중 선형회귀는 위와 같이 본질적으로 "곱해서 더하는 작업"

- for문으로 작성하게 되면 코드가 길어지고, 데이터가 많을 경우, 느림 

- 이를 파이썬의 NumPy나 머신러닝 프레임워크(TensorFlow, PyTorch)에서 행렬 연산을 활용하여 이를 수행함으로써 

  반복문(for-loop)을 사용하는 것보다 계산 속도를 크게 향상할 수 있음.

 

✅ 경사하강법을 사용한 벡터화 예제

- 예를 들어 weight가 16개 있다고 가정 

- 미분값(gradient)

- 학습률 

- 벡터화를 하지 않은 경우 (Without Vectorization)

for j in range(16):
    w[j] = w[j] - 0.1 * d[j]

 

 

- 0 ~15까지 한 단계씩 각 weight를 하나씩 업데이트해야 함

- feature가 많아질수록 코드가 길어지고 계산도 느려짐


- 벡터화를 사용한 경우 (With Vectorization)

w = w - 0.1 * d

- 이 한 줄이 위의 모든 연산을 동시에 수행

 

✅  벡터화가 더 빠른 이유 

  • 파이썬 for 문은 한 번 반복할 때마다 파이썬 인터프리터가 처리해야 해서 느림
  •  np.dot 같은 연산은 내부적으로 C/Fortran 기반의 최적화된 선형대수 라이브러리(BLAS 등)를 씀
  • 즉, 파이썬 레벨에서 1만 번 반복하는 대신, 최적화된 저수준 코드가 한 번에 계산하기 때문에 더 빠름 
  • 때문에 대규모 데이터 셋의 학습의 경우 벡터화를 통해 학습의 효율성을 높일 수 있음

 

03. Gradient descent for multiple linear regression, 다중 선형회귀의 경사하강법 

1) Cost function (비용함수) 

벡터화 전후

✅ Parameter(모델 파라미터)

- 기존 표기법 

- 벡터 표기법  

  • w: 길이가 n인 벡터
  • b: 스칼라 값(숫자 하나)

✅ Model

- 기존 표기법 

- 벡터 표기법

✅ Cost Function (비용함수)

- 기존 표기법 

- 벡터 표기법

- 구체적인 식 

 

✅ Gradient Descent

- 기존 표기법 

- 벡터 표기법

* 이 과정에서 모든 파라미터는 

 

 

 

2) 다중 선형회귀에서의 경사하강법 

- 경사하강법은 비용함수를 최소화하기 위해 파라미터를 반복적으로 업데이트하는 알고리즘 

- 모든 파라미터는 동시에 업데이트되어야 함.

 

- feature가 1개인 경우 

- featrue가 n개인 경우

weight 업데이트
bias 업데이트

  • 반복 학습: 위 갱신 과정을 비용 함수가 최소값에 수렴할 때까지 반복.
  • 특성 스케일링: 독립 변수들의 단위가 다를 경우, 경사하강법 수렴 속도를 높이기 위해 피처 스케일링(정규화 등)이 필요할 수 있음.
  • 학습률 : 너무 작으면 학습 속도가 느리고, 너무 크면 최적값을 지나칠 수 있음

 


 

04. Gradient Descent in Practice 1  - Feature Scaling

 

다중 선형회귀(Multiple Linear Regression)에서 피처 스케일링(Feature Scaling)은 필수는 아니지만, 

모델의 학습 효율성을 높이고 해석 가능성을 향상시키기 위해 권장되는 전처리 과정

 

스케일링은 데이터의 단위(예: 평수, 연식, 가격 등)가 다를 때, 

이를 일정한 범위로 조정하여 모델이 특정 피처에 과도하게 의존하는 것을 막음

 

또한, 경사하강법을 쓸 때 피처 간 비슷한 스케일일수록 더 빠르게 global minimum에 더 빠르게 수렴할 수 있음.

 

 

1) 집값 예측 모델 

 

- Feature와 Parameter 값의 관계

각 feature의 범위

 

 

- 한 집의 데이터가 아래와 같을 때 

x1 = 2000
x2 = 5
price = $500k

 

(1) 경우 1: 파라미터 크기가 잘못된 경우 

$100,050,500

비현실적인 가격이 나옴 

 

(2) 경우 2 : 더 합리적인 파라미터 

이 값은 실제 가격과 훨씬 가까움 

이처럼 feature의 값 범위가 파라미터 크기에 영향을 줄 수 있다.

x1 범위 : 매우 큼
x2 범위 : 매우 작음

따라서 

w1 → 매우 작은 값 필요
w2 → 비교적 큰 값 필요 

 

- Feature 분포(Scatterplot)

 : 두 feature를 scatter plot으로 표현하면 아래와 같이 두 피처의 값 범위 차이가 매우 크기 때문에

    데이터는 한쪽으로 길게 늘어진 형태로 나타나게 됨 

 

- 비용함수 등고선(Contour Plot)

 : 비용함수는 길쭉한 타원 형태를 띠게 되며, Gradient Descent가 최적점(global minimum)으로 이동할 때

   최적점으로 바로 내려가지 못하고 좌우로 크게 흔들리며 지그재그로 이동하게 되어 수렴 속도가 매우 느려짐 

 

∴ 위와 같은 문제를 해결하기 위해서 Feature Scaling을 적용해야 함. 

 

x1 : 300 ~ 2000
x2 : 0 ~ 5

↓

x1 → 0 ~ 1
x2 → 0 ~ 1 로 스케일링 하게 되면 데이터의 범위가 고르게 분포되고 아래와 같이 그래프가 변함

- 비용함수의 contour plot도 타원에서 원형에 가까운 형태로 변하며 이 경우 

  Gradient Descent는 최적점으로 빠르게 이동하게 된다. 

 

 


 

2) Feature Scaling 방법

머신러닝에서는 여러 가지 Feature Scaling 방법이 사용되고,

강의 내에서는 세 가지 방법을 설명함. 

 

✅ 1. Maximum Scaling (최대값으로 나누기)

가장 단순한 방법은 feature 값을 최대값으로 나누는 것

예를 들어 집 크기 데이터가 다음과 같다면 

300, 500, 1000, 2000

최대값 = 2000

따라서 스케일링 후 값은 0.15, 0.25, 0.5, 1.0가 되는 것.

- 장점: 구현이 매우 간단하고, 빠르게 계산이 가능함

- 단점: 데이터 분포를 고려하지 않아, 최대값 기반 s

 

✅ 2. Mean Normalization

Mean Normalization은 평균을 기준으로 데이터를 이동시키는 방법

평균을 0으로, 범위를 약 -1~1 사이로 조정

여기서 

 

- feature의 값 범위가 

300 ≤ x1(평수) ≤ 2000
0 ≤ x2(침실 수) ≤ 5 일 때, 피처의 평균이 아래와 같음. 

 

- 즉 feature의 값이 0 근처를 중심으로 분포하게 되고, 이렇게 되면 Gradient Descent가 훨씬 빠르게 수렴함 

 

✅ 3. Z-score Normalization (Standardization)

가장 많이 사용되는 Feature Scaling 방법으로 

이 방법을 사용하면 데이터는 데이터의 평균을 0, 분산을 1로 조정,

데이터의 분포가 표준 정규분포(Gaussian 분포로 변환) 형태에 가까워짐

μ1 = 600
σ1 = 450, 
μ2 = 2.3
σ2 = 1.4 일 경우 

- 집평수  -0.67 ≤ x1 ≤ 3.1로 변환 / 방개수 -1.6 ≤ x2 ≤ 1.9로 변환

→ feature의 범위가 비슷해지고, 마찬가지로 Gradient Descent가 더 안정적으로 수렴하게 된다.

또한, 이상치(Outlier)가 있는 경우, 평균과 표준편차를 사용하므로 이상치의 영향을 덜 받기 때문에 

대부분의 경우 표준화가 권장

 


 

05. Checking gradient descent for convergence (수렴 확인)

경사하강법을 수행할 때 수렴여부를 어떻게 알 수 있을까

Gradient Descent가 제대로 작동하는지 확인하려면 비용함수(Cost)의 변화를 확인해야 됨

 

- 반복(iteration)을 할수록 Cost Function J(w, b) 값이 감소해야 함

 

✅ Cost vs Iteration 그래프 (learning curve)

경사하강법이 잘 작동하는 경우 아래와 같은 그래프가 나타남

- 정상적인 경우 iteration이 증가하면 cost가 감소하고,   즉 Cost 값이 계속 감소하면서 어느 시점에서 수렴하게 됨- cost가 증가하면 일반적으로 alpha(학습률)가 너무 크거나 코드에 버그가 있다는 뜻


 

06. Choosing the learning rate (적절한 학습률 선택)

Learning Rate α 는 Gradient Descent에서 매 반복마다 얼마나 이동할지를 결정하는 값

 

업데이트 식:

 

- gradient는 "비용이 증가하는 방향"을 가리키고

- 비용을 줄이려면 반대 방향(마이너스)으로 가야 함.

 

 

✅ α가 너무 큰 경우: 비용이 줄지 않고 커짐

α 가 너무 크면 업데이트가 너무 과격해서
최적점을 지나쳐버리며(overshoot) 다음 현상이 나타남 

- Cost vs Iteration 그래프에서의 징후

- 위 그래프인 경우는 학습률이 너무 크거나 코드 자체에 버그가 있음을 의미

- 때문에 너무 큰 학습률을 작게 조절하면서 global minimum에 수렴하도록 조정해야 됨

 

✅ α가 충분히 작은 경우: 매 iteration마다 J가 감소해야 함

- 학습률이 "충분히 작다면" 

  매 반복마다 비용함 수 값이 한 번도 증가하지 않고 꾸준히 감소하는 형태가 이상적임

 

✅ α가 너무 작은 경우: 수렴은 하지만 너무 느림

반대로 학습률이 너무 작으면, 업데이트 폭이 너무 작아

  • 비용은 감소하긴 하지만
  • 수렴(converge)까지 iteration(반복)이 매우 많이 필요 

 


 

07. Feature engineering (특성 공학)

Feature Engineering은 기존 feature를 변형하거나 조합하여 새로운 feature를 만드는 과정

 머신러닝 모델의 성능은 어떤 feature를 사용하느냐에 크게 영향을 받기 때문에
Feature Engineering은 모델의 성능을 향상 시키는 매우 중요한 단계

 

✅ 토지 가격 예측 모델 

- 기존 모델

  • frontage (토지의 가로길이)
  • depth (토지의 세로 길이)

 

 

하지만 실제 토지 가격은 면적(area)에 더 큰 영향을 받을 수 있음

그래서 새로운 feature를 만들 수 있는데, 

 

- 새로운 feature를 사용한 모델 

이렇게 하면 모델이 데이터의 패턴을 더 잘 학습할 수 있게 됨 

- 데이터의 패턴을 더 잘 표현하는 feature를 생성하는 Feature Engineering을 통해 모델 성능을 크게 향상 시킬 수 있음

 


 

08. Polynomial regression(다항 회귀)

선형회귀는 직선 형태의 모델만 만들 수 있다고 생각하기 쉽지만,
feature를 변형하면 곡선 형태의 관계도 표현할 수 있다.

데이터에 잘 fit 하는 형태로 나타내면 되는데, 예를 들면 2차 함수나 3차 함수 곡선, 또는 제곱근 함수 등의 형태를 이용

 

- Polynomial regression은 입력 feature를 변형하여 비선형 관계를 학습하지만,
  모델은 여전히 파라미터 w에 대해 선형(linear)이다. 

- Polynomial Regression에서 주의할 점

  : polynomial feature는 값이 매우 커질 수 있음

x = 1000
x² = 1,000,000
x³ = 1,000,000,000

  : 때문에 보통 다항 회귀에서는 보통 Feature Scaling을 함께 사용

 

'ETC' 카테고리의 다른 글

[Coursera 강의] 앤드류 응 Supervised Machine Learning - 3주차  (0) 2026.03.05
ETC | 감성분석 프로젝트  (0) 2023.01.04
'ETC' 카테고리의 다른 글
  • [Coursera 강의] 앤드류 응 Supervised Machine Learning - 3주차
  • ETC | 감성분석 프로젝트
갬보리
갬보리
제발 코드정리좀 하자 (R, SQL, SAS, Python , etc...)
  • 갬보리
    보딩코
    갬보리
  • 전체
    오늘
    어제
    • 분류 전체보기 (52)
      • R (32)
        • dplyr (7)
        • preprocessing (2)
        • EDA (0)
        • ggplot2 (10)
        • plotly (11)
        • leaflet (2)
      • SQL (15)
      • SAS (0)
      • Python (1)
        • preprocessing (0)
        • Library (0)
      • ETC (3)
        • ML (1)
  • hELLO· Designed By정상우.v4.10.3
갬보리
[Coursera 강의] 앤드류 응 Supervised Machine Learning - 2주차
상단으로

티스토리툴바