inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정판] 파이썬 머신러닝 완벽 가이드

경사하강법을 통한 비용함수 RSS 최소화 - 파이썬 코드로 경사 하강법 구현하기

경사하강법 질문드립니다

750

조윤희

작성한 질문수 2

3

강사님 안녕하세요 ㅎㅎ 경사하강법 강의를 듣다가 잘 이해가 가지 않아 질문드립니다. 강의 5.4의 get_weight_updates 함수에서 y_pred 에서 X의 개수가 여러개고 W1이 1개인데 왜 w1.T인지 설명해주실수 있을가요?? 어차피 w1은 하나인데 전치가 필요한 이유를 잘 모르겠습니다. 안해도 괜찮나요? 그리고 w1_update와 w0_update에서는 x와 factors에서 전치행렬을 사용했기에 두가지 경우에서 전치행렬을 다르게 쓰인점이 궁금합니다!!!

python 머신러닝 배워볼래요? 통계

답변 3

6

권 철민

두번째 답변입니다.

2-1.  W1_update 시에는 위와 같은 식을 구하려면 X집합과 실제값 - 예측값 집합을 내적하면 구할 수 있습니다. (개별   X 데이터 원소들을 하나씩 더하고 곱하는 식을 반복할 필요 없이 한번에 내적으로 구하는 방식입니다. )

X 데이터 셋의 Shape가 (100, 1) 즉 100개의 행을 가지는 1개의 feature로 되어 있으며 실제값 -예측값 집합 역시 각 개별 X 데이터 별로 타겟값과의 차이를 나타내는 diff 변수로서 Shape가 (100, 1)입니다. 이때 X.T (즉 (1, 100)으로 Shape 변환)한 결과와 diff 를 dot 연산하면 쉽게 결과를 얻을 수 있습니다.

2-2. W0_update는 약간 복잡한데, 먼저 구하려는 식이 아래와 같이 개별 데이터들에 대한 실제값과 예측값들의 차이의 합만 계산하면 됩니다.

그런데 이게 오히려 선형 대수의 dot 같은 연산으로 바로 구하기가 어려워서 일부로 전체가 1의 값을 가지는 w0_factors = np.ones((100, 1)) 즉 100개의 행을 가지는 1개의 feature되어 있는 행렬을 만들고 이를 이용하여 dot 연산으로 유도하였습니다. 1에 각각 자기 원소를 곱하면 원래 자기 원소임을 이용한 것입니다.

w0_factors = np.ones((100,1))

w0_update = -(2/100)*learning_rate*(np.dot(w0_factors.T, diff))

감사합니다.

0

minglet

강사님 안녕하세요! 강의 잘 듣고있습니다.
추가로 이 답변에 대해서 질문이 있는데요.

w1의 shape이 (1,1)임에도 불구하고 전치행렬로 넣어서 y_pred를 구성하는 것은 feature가 여러개일 경우엔 w1의 shape이 달라지는 걸 고려해서 저렇게 코드를 구성하신것은 이해가 됐습니다.

그런데 w0_factors의 경우 단지 diff의 합을 구하기 위한 보조 장치(?)로서 1의 값을 가진 shape이 (N, 1)로 고정이 되어있는데

그렇다면

 w0_update = -(2/N)*learning_rate*(np.dot(w0_factors, diff))

dot 연산을 할 때 전치행렬을 굳이 사용하지않고 애초에 w0_factors를 선언할 때 np.ones((1, N))으로 해도 되는 부분인지, 아니면 통상 코드를 구현할 때 선언을 저런식으로 하고 전치행렬로 바꿔 dot 연산을 하는 것인지 궁금합니다!

5

권 철민

안녕하십니까, 그림이 들어가 있어 보시는데 불편하실수 있을거 같아 답변을 2개로 이어서 만들었습니다.

먼저 첫번째 답변입니다.

1. 예제는 1개의 Feature를 가지는 X 데이터의 건수가 100개 입니다. 따라서 X feature의 갯수가 단 한개이기에 W1도 단 한개이므로 말씀하신대로 전치행렬을 사용할 필요가 없습니다.그러나 일반적으로는 다중 선형회귀를 사용하므로 X Feature의 갯수가 여러개가 보통입니다. 만일 Feature가 m개 있다고 하면 이 경우에는 가중치는 [W1, W2, W3,,,Wm] 과 같은 벡터 형태로 표현 될 수 있는데, 이 경우에는 X feature 행렬과 가중치 벡터가 내적하여 올바른 회귀식을 도출하려면 가중치 벡터의 전치 행렬을 사용해야 합니다.이를 일반화 하기 위해서 W1.T를 적용하였습니다.

0

celestial_

와 저도 dot 연산이 선형대수에서 많이 쓰이는 연산인건 알아도 익숙하진 않아서 질문할까말까 고민했는데.. 여기 전부 답이 있군요. 

모델 서빙과 관련된 강좌가 출시되는지 질문드립니다.

0

11

2

안녕하세요 열심히 수강중인 학생입니다

0

63

2

정수 인덱싱

0

68

2

넘파이 오류

0

85

2

11강 numpy의 axis 축 질문 드립니다.

0

85

2

Kaggle 에서 Santander customer satisfaction data 를 다운로드 되지가 않습니다.

0

79

2

Feature importances 를 보여주는 barplot 이 그래프로 안보여져요.

0

70

2

타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.

0

75

2

타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.

0

64

2

5강 강의 오류가 있어요.

0

84

1

실무에서 LTV 관련 모델 선택 질문입니다!

0

72

2

14강 강의 듣는중에 궁금한게 있어서 질문합니다~

0

69

3

파이썬 다운그레이 후 사이킷런 재설치

0

117

2

좋은 강의 감사합니다.

0

74

2

scoring 함수 음수값

0

67

2

6번 강의에 사이킷런, 파이썬, 아나콘다 각각 버전 일치 안 시키고 진행해도 강의 따라가 지나요?

0

100

2

분류 평가 정확도 예측

0

79

2

안녕하세요. 강의 들으면서 업무에 적용하고 싶은 수강생입니다.

0

99

1

카카오톡 채널 있나요

0

108

1

혹시 강의에서 사용하시는 ppt 받을 수 있는건가요

0

190

2

pca 스케일링 관련하여 질문드립니다.

0

100

2

주피터 대신 구글 코랩

0

172

2

강의에서 사용하는 pdf or ppt자료는 따로 없는 건가요?

0

148

2

실루엣 스코어..

0

86

2