DrawingProcess
드프 DrawingProcess
DrawingProcess
전체 방문자
오늘
어제
«   2025/07   »
일 월 화 수 목 금 토
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
  • 분류 전체보기 (969)
    • Profile & Branding (25)
      • Career (18)
    • IT Trends (254)
      • Conference, Faire (Experien.. (31)
      • News (187)
      • Youtube (19)
      • TED (8)
      • Web Page (2)
      • IT: Etc... (6)
    • Contents (98)
      • Book (67)
      • Lecture (31)
    • Project Process (94)
      • Ideation (0)
      • Study Report (34)
      • Challenge & Award (22)
      • 1Day1Process (5)
      • Making (5)
      • KRC-FTC (Team TC(5031, 5048.. (10)
      • GCP (GlobalCitizenProject) (15)
    • Study: ComputerScience(CS) (72)
      • CS: Basic (9)
      • CS: Database(SQL) (5)
      • CS: Network (14)
      • CS: OperatingSystem (3)
      • CS: Linux (39)
      • CS: Etc... (2)
    • Study: Software(SW) (95)
      • SW: Language (29)
      • SW: Algorithms (1)
      • SW: DataStructure & DesignP.. (1)
      • SW: Opensource (15)
      • SW: Error Bug Fix (43)
      • SW: Etc... (6)
    • Study: Artificial Intellige.. (149)
      • AI: Research (1)
      • AI: 2D Vision(Det, Seg, Tra.. (35)
      • AI: 3D Vision (70)
      • AI: MultiModal (3)
      • AI: SLAM (0)
      • AI: Light Weight(LW) (3)
      • AI: Data Pipeline (7)
      • AI: Machine Learning(ML) (1)
    • Study: Robotics(Robot) (33)
      • Robot: ROS(Robot Operating .. (9)
      • Robot: Positioning (8)
      • Robot: Planning & Control (7)
    • Study: DeveloperTools(DevTo.. (83)
      • DevTool: Git (12)
      • DevTool: CMake (13)
      • DevTool: NoSQL(Elastic, Mon.. (25)
      • DevTool: Container (17)
      • DevTool: IDE (11)
      • DevTool: CloudComputing (4)
    • 인생을 살면서 (65)
      • 나의 취미들 (7)
      • 나의 생각들 (42)
      • 여행을 떠나자~ (10)
      • 분기별 회고 (6)

개발자 명언

“ 매주 목요일마다 당신이 항상 하던대로 신발끈을 묶으면 신발이 폭발한다고 생각해보라.
컴퓨터를 사용할 때는 이런 일이 항상 일어나는데도 아무도 불평할 생각을 안 한다. ”

- Jef Raskin

맥의 아버지 - 애플컴퓨터의 매킨토시 프로젝트를 주도

인기 글

최근 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
DrawingProcess

드프 DrawingProcess

[Study] 혼공학습단 10기: 혼자 공부하는 머신러닝+딥러닝(박해선) - Chapter 03 회귀 알고리즘과 모델 규제(2주차)
Project Process/Study Report

[Study] 혼공학습단 10기: 혼자 공부하는 머신러닝+딥러닝(박해선) - Chapter 03 회귀 알고리즘과 모델 규제(2주차)

2023. 7. 14. 10:49
반응형

스터디

스터디 범위

Chapter 03 회귀 알고리즘과 모델 규제

  • 03-1 k-최근접 이웃 회귀 ▶️회귀 문제를 이해하고 k-최근접 이웃 알고리즘으로 풀어 보기
  • 03-2 선형 회귀 ▶️ 사이킷런으로 선형 회귀 모델 만들어 보기
  • 03-3 특성 공학과 규제 ▶️특성 공학과 규제 알아보기

스터디 내용

03-1 k-최근접 이웃 회귀 ▶️회귀 문제를 이해하고 k-최근접 이웃 알고리즘으로 풀어 보기

  • numpy 라이브러리의 reshape() 메서드로 크기가 다른 배열을 생성할 수 있음
  • sklearn.neighbers 모듈에서 KNeighborsRegressor 메소드로 K-Nearest Neighbors 회귀 알고리즘 사용 가능
  • 분류 모델의 경우 score값이 테스트 세트의 샘플을 정확하게 분류한 개수의 비율이며, 회귀 모델의 경우 '결정계수'로 평가함
  • 결정계수(R^2)란? 
    • R^2 = 1 - (Σ(target - predict)^2 / Σ(target - average)^2) 
    • 만약 타깃의 평균 정도를 예측하는 수준이라면 R^2은 0에 가까워지고, 예측이 타깃에 가까워지면 1에 가까워짐
    • 여기서, sklearn.metrics 모듈에서 mean_absolute_error 메소드로 평균 절댓값 오차를 계산 가능
  • 일반적으로 훈련 세트의 점수보다 테스트 세트의 점수(score)가 조금 낮음
    • 테스트 세트의 점수가 너무 낮다면? 오버피팅이며, 모델을 덜 복잡하게 만들어야 함(knn의 경우, k 값 감소)
    • 반대로 테스트 점수가 너무 높거나 두 점수 모두 낮다면? 언터피팅이며, 모델을 덜 복잡하게 만들어야 함(knn의 경우, k 값 증가)

03-2 선형 회귀 ▶️ 사이킷런으로 선형 회귀 모델 만들어 보기

선형 회귀: 특정과 타깃 사이의 관계를 가장 잘 나타내는 선형 방정식

from sklearn.linear_model import LinearRegression
lr = LinearRegression()
# 선형 회귀 모델 훈련
lr.fit(train_input, train_target)
# 50cm 농어에 대한 예측: [1241.83860323]
print(lr.predict([[50]]))

// 방정식의 변수: [39.01714496] -709.0186449535477
print(lr.coef_, lr.intercept_)

# 훈련 세트의 산점도를 그립니다
plt.scatter(train_input, train_target)
# 15에서 50까지 1차 방정식 그래프를 그립니다
plt.plot([15, 50], [15*lr.coef_+lr.intercept_, 50*lr.coef_+lr.intercept_])
  • lr.fit을 통해 객체를 훈련하며, 계수(가중치)는 coef_, bias 은 intercept_ 에서 '모델 파라미터' 확인가능

다항 회귀: 특정과 타깃 사이의 관계를 가장 잘 나타내는 다항 방정식

train_poly = np.column_stack((train_input ** 2, train_input))
test_poly = np.column_stack((test_input ** 2, test_input))
print(train_poly.shape, test_poly.shape)

lr = LinearRegression()
lr.fit(train_poly, train_target)
# [1573.98423528]
print(lr.predict([[50**2, 50]]))

# [1.01433211 -21.55792498] 116.0502107827827
print(lr.coef_, lr.intercept_)

# 구간별 직선을 그리기 위해 15에서 49까지 정수 배열을 만듭니다
point = np.arange(15, 50)
# 훈련 세트의 산점도를 그립니다
plt.scatter(train_input, train_target)
# 15에서 49까지 2차 방정식 그래프를 그립니다
plt.plot(point, 1.01*point**2 - 21.6*point + 116.05)
  • numpy의 column_stck 메소드를 이용해서 특정 컬럼을 추가한 행렬을 생성할 수 있음

03-3 특성 공학과 규제 ▶️특성 공학(Feature Engineering)과 규제(Regularization) 알아보기

특정 공학(Feature Engineering): 주어진 특정을 조합하여 새로운 특성을 만드는 일련의 작업으로, numpy의 PolynomialFeatures 메서드로 주어진 특성을 곱셈 또는 제곱하여 새로운 특성 생성.

추가로, 이처럼 여러 개의 특성을 사용하는 회귀 모델을 '다중 회귀 모델'이라 함

from sklearn.preprocessing import PolynomialFeatures

poly = PolynomialFeatures()
poly.fit([[2, 3]])
train_poly = poly.transform([[2, 3]])
test_poly = poly.transform([[2, 3]])

# [[1. 2. 3. 4. 6. 9.]]
print(poly.transform([[2, 3]]))

# array(['1', 'x0', 'x1', 'x0^2', 'x0 x1', 'x1^2'], dtype=object)
poly.get_feature_names_out()
  • 하이퍼 파라미터: degree(최고 차수 지정), interaction_only(거듭제곱항 포함 여부), include_bias(절편특성 추가 여부)

규제(Regularization): 훈련 세트를 너무 과도하게 학습하지 못하도록 하는 방법으로, 선형 회귀의 경우 계수(기울기)의 크기를 작게 만듦

1) 정규화 전처리 과정: 특성의 스케일이 정규화되지 않으면 곱해지는 계수 값도 차이 나게 되기에 정규화 과정 필요.

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
ss.fit(train_poly)

train_scaled = ss.transform(train_poly)
test_scaled = ss.transform(test_poly)

중요! 여기에서 훈련세트의 통계 값으로 테스트 세트를 변환해야합니다!!

2) 규제 모델 사용: 선형회귀 모델에 규제를 추가한 모델을 릿지(ridge)와 라쏘(lasso)라고 부름. 

2-1) 릿지(Ridge): 규제가 있는 회귀 알고리즘으로 선형 모델의 계수를 작게 만들어 과대 적합을 완화시킴. 일반적으로 많이 사용.

from sklearn.linear_model import Ridge

ridge = Ridge()
ridge.fit(train_scaled, train_target)
print(ridge.score(train_scaled, train_target))
print(ridge.score(test_scaled, test_target))

2-2) 라쏘(Lasso): 규제가 있는 회귀 알고리즘으로 계수를 0으로도 만들 수 있어 필요한 feature를 뽑는데 사용하기도 함.

from sklearn.linear_model import Lasso

lasso = Lasso()
ridge.fit(train_scaled, train_target)
print(ridge.score(train_scaled, train_target))
print(ridge.score(test_scaled, test_target))

# 0이 된 계수의 개수 추출
print(np.sum(lasso.coef_ == 0)

2-3) 최적의 하이퍼 파라미터 alpha 값 찾기 - alpha: 규제의 강도 조절. 클수록 규제 강함.

alpha_list = [0.001, 0.01, 0.1, 1, 10, 100]
for alpha in alpha_list:
    # 릿지 모델을 만듭니다
    ridge = Ridge(alpha=alpha)
    # 릿지 모델을 훈련합니다
    ridge.fit(train_scaled, train_target)
    # 훈련 점수와 테스트 점수를 저장합니다
    train_score.append(ridge.score(train_scaled, train_target))
    test_score.append(ridge.score(test_scaled, test_target))

plt.plot(np.log10(alpha_list), train_score)
plt.plot(np.log10(alpha_list), test_score)
plt.xlabel('alpha')
plt.ylabel('R^2')
plt.show()

추가 하이퍼 파라미터

  • alpha: 규제의 강도 조절. 클수록 규제 강함.
  • solver: 최적의 모델을 찾기 위한 방법을 지정. 기본값 'auto'이며, 데이터에 따라 자동으로 선택됨. sag, saga 등 다양
    • sag: sklearn v0.17 이후 추가됨. 확률적 평균 경사 하강법 알고리즘. 특성과 샘플수가 많을 때 성능 좋음.
    • saga: sklearn v0.19 이후 추가됨. sag의 개선 버전.
  • random_state: 넘파이 난수 시드값 지정 가능

미션

기본 미션

Ch.03(03-1) 2번 문제 풀력 그래프 인증하기

# k-최근접 이웃 회귀 객체를 만듭니다
knr = KNeighborsRegressor()
# 5에서 45까지 x 좌표를 만듭니다
x = np.arange(5, 45).reshape(-1, 1)

# n = 1, 5, 10일 때 예측 결과를 그래프로 그립니다.
for n in [1, 5, 10]:
    # 모델 훈련
    knr.n_neighbors = n
    knr.fit(train_input, train_target)
    # 지정한 범위 x에 대한 예측 구하기 
    prediction = knr.predict(x)
    # 훈련 세트와 예측 결과 그래프 그리기
    plt.scatter(train_input, train_target)
    plt.plot(x, prediction)
    plt.title('n_neighbors = {}'.format(n))    
    plt.xlabel('length')
    plt.ylabel('weight')
    plt.savefig('n_neighbors_{}'.format(n))
    plt.show()

선택 미션

모델 파라미터에 대해 설명하기

>> 머신러닝 모델이 학습할 수 있는 파라미터. 반면에 사람이 지정하는 파라미터는 '하이퍼 파라미터'라 합니다. 추가로, 이 책에서는 함수와 클래스의 파라미터는 매개변수라 하고 모델과 관련된 파라미터(모델 파라미터, 하이퍼파라미터)는 그래도 파라미터라고 표현하였습니다.

참고

  • [Github] 예제 소스: https://github.com/rickiepark/hg-mldl
  • [Google Colab] 예제 소스: https://colab.research.google.com/github/rickiepark/hg-mldl 
  • Q&A: 박해선 저자님의 github: https://groups.google.com/g/ml-dl-book-qna?pli= 
  • 유튜브 강의: 👉전체 강의 목록: https://www.youtube.com/playlist?list=PLVsNizTWUw7HpqmdphX9hgyWl15nobgQX

혼공학습단, 혼공, ⁠혼공머신, 혼자 공부하는, 박해선, 혼자 공부하는 머신러닝+딥러닝

 

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Project Process > Study Report' 카테고리의 다른 글

[영어] 리얼클래스 학습 일기: 일상 회화 표현 정리(7월 3주차)  (0) 2023.07.25
[Study] 혼공학습단 10기: 혼자 공부하는 머신러닝+딥러닝(박해선) - Chapter 04 다양한 분류 알고리즘(3주차)  (0) 2023.07.20
[영어] 리얼클래스 학습 일기: 일상 회화 표현 정리(7월 2주차)  (0) 2023.07.16
[영어] 리얼클래스 학습 일기: 일상 회화 표현 정리(7월 1주차)  (0) 2023.07.10
[Study] 혼공학습단 10기: 혼자 공부하는 머신러닝+딥러닝(박해선) - Chapter 01-02 데이터 다루기(1주차)  (2) 2023.07.07
    'Project Process/Study Report' 카테고리의 다른 글
    • [Study] 혼공학습단 10기: 혼자 공부하는 머신러닝+딥러닝(박해선) - Chapter 04 다양한 분류 알고리즘(3주차)
    • [영어] 리얼클래스 학습 일기: 일상 회화 표현 정리(7월 2주차)
    • [영어] 리얼클래스 학습 일기: 일상 회화 표현 정리(7월 1주차)
    • [Study] 혼공학습단 10기: 혼자 공부하는 머신러닝+딥러닝(박해선) - Chapter 01-02 데이터 다루기(1주차)
    DrawingProcess
    DrawingProcess
    과정을 그리자!

    티스토리툴바