opentutorials.org/course/4570/28974
레모네이드 판매 예측(강의)
1. 과거의 데이터를 준비한다.
2. 모델의 구조를 만듭니다.
3. 데이터로 모델을 학습(FIT)합니다.
4. 모델을 이용합니다.
우리는 지도학습 강의에서 다음과 같은 순서로 진행을 하기로 배웠습니다. 이제 이 부분을 자세하게 코드로 알아보는 시간을 가지도록 하겠습니다.
먼저 전체적인 코드의 구조는 다음과 같습니다. 조금더 구체적으로 코드를 알아보도록 하겠습니다.
#1. 과거의 데이터를 준비한다.
# 데이터를 준비합니다.
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/lemonade.csv'
레모네이드 = pd.read_csv(파일경로)
레모네이드.head()
# 종속변수, 독립변수
독립 = 레모네이드[['온도']]
종속 = 레모네이드[['판매량']]
print(독립.shape, 종속.shape)
앞에 강의에서 한번 언급했던 내용입니다. 먼저 과거의 데이터를 준비하고 읽어온 후 종속변수와 독립변수를 분리를 해줘야 합니다.
#2. 모델의 구조를 만듭니다.
X = tf.keras.layers.Input(shape=[1])
Y = tf.keras.layers.Dense(1)(X)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')
다음은 모델 구조를 만드는 부분입니다. 다음 코드는 가장 간단한 형태로 신경망을 구현한 코드입니다. 이 단계는 아직 학습이 되기 전 상태입니다.
여기서 우리가 중요하게 봐야 할 부분이 있습니다.
X = tf.keras.layers.Input(shape=[1])
Y = tf.keras.layers.Dense(1)(X)
바로 파란색으로 칠해져 있는 숫자 부분입니다. 이 숫자의 의미는 무엇일까요?? 먼저 X 변수에 담긴 1의 의미는 바로 우리가 가지고 있는 독립변수의 수가 1이기 때문에 1을 넣어주는 것입니다. 다음으로 Y 변수에 담긴 변수는 종속변수의 수가 1개 이기 때문에 마찬가지로 1을 넣어주는 것입니다. 모델의 구조를 만들때 이 숫자의 역할이 굉장히 중요합니다!!
#3. 데이터로 모델을 학습(FIT)합니다.
model.fit(독립, 종속, epochs=1000, verbose=0)
model.fit(독립, 종속, epochs=10)
다음은 모델을 학습하는 부분입니다. fit이라는 도구가 모델을 학습시키는 도구입니다. 여기서 epochs의미는 무엇일까요?? 우리는 한번만 듣고 알아들을 수 있지만 더 많이 학습을 하고 반복을 하면 더 잘 이해하게 됩니다. 그 의미가 바로 epochs의 의미입니다. 즉 전체 데이터를 몇번 반복해서 학습을 하는가를 의미하게 됩니다. 이제 우리는 학습을 완료한 모델을 얻었습니다.
#4. 모델을 이용합니다.
print(model.predict(독립))
print(model.predict([[15]]))
이제 우리가 만든 모델에게 새로운 값을 넣어서 반환해주는 값을 확인할 수 있습니다.
레모네이드 판매 예측(손실)
전체 코드를 다시 살펴보기 전에 Loss에 대해 알아보는 시간을 가지도록 하겠습니다.
model.fit(독립, 종속, epochs=10)
다음 코드를 입력하면 아래와 같은 값이 나오게 됩니다. 먼저 fit 함수를 구체적으로 영역별로 나누어서 알아보도록 하겠습니다.
파란색 영역 : 이번 학습이 몇번째 학습인지 알려주는 부분입니다.
주황색 영역 : 각 학습마다 얼마의 시간이 걸리는지 알려주는 부분입니다.
초록색 영역 : 학습이 어느정도 진행이 됬는가 즉 정답에 얼마나 가깝게 맞추고 있는가를 알려주는 부분입니다.
학습을 많이 하면 할수록 Loss 값이 조금씩 줄어드는 것을 알 수 있습니다!!
그렇다면 Loss의 의미는 무엇일까요??
우리는 독립변수를 모델에 넣으면 모델은 예측값을 만들어줍니다. 이 예측값과 종속값(실제 정답)을 비교하는것이 중요합니다. 이를 통해 이 모델이 얼마나 좋은지를 알 수 있기 때문입니다.
이때 차이의 제곱을 한 결과로 평균을 구한면 이 값이 바로 Loss입니다. 즉 Loss가 0에 가까울수록 학습이 잘되는 모델이라고 할 수 있습니다. 그래서 우리는 이 Loss값을 보면서 epoch마다 줄어들고 있는지 확인하는 것이 중요합니다.
전체 코드는 다음 github 주소에서 확인할 수 있습니다.
github.com/jaaaamj0711/Machine_learning_yahac/blob/main/lemon.ipynb
'머신러닝 야학 2기' 카테고리의 다른 글
[머신러닝 야학 2기] 3일차 - 학습의 실제 (0) | 2021.01.06 |
---|---|
[머신러닝 야학 2기] 3일차 - 보스턴 집값 예측 (0) | 2021.01.06 |
[머신러닝 야학 2기] 2일차 - 표를 다루는 도구 '판다스' (0) | 2021.01.05 |
[머신러닝 야학 2기] 1일차 - 지도학습의 빅픽쳐 (0) | 2021.01.04 |
[머신러닝 야학 2기] 1일차 - 목표와 전략 (0) | 2021.01.04 |