일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JavaScript
- 기초문법
- MySQL
- Django
- 코딩교육
- 스파르타코딩클럽
- HTML
- Model
- orm
- 디스코드봇
- 파이널프로젝트
- cs
- Wil
- 페이지네이션
- 웹프로그래밍A-Z기초
- error
- vscode
- 스파르타코딩클럽후기
- 선형회귀
- paginator
- 터미널
- Python
- 머신러닝
- musicbot
- 장고
- git
- 파이썬
- network
- predict
- 내일배움캠프
- Today
- Total
lution88
# 캐글-colab을 이용한 선형회귀 실습 본문
$$ Kaggle에서 데이터셋을 받아와 Colab을 이용하여 실습한다.
캐글 Kaggle 이란?
데이터 사이언티스트를 위한 커뮤니티인데 다양한 데이터셋이 공개되어 있다.
직접 분석해보고 결과를 공유하여 서로 비교할 수 있고,
기업 및 단체에서 올린 문제를 풀어 상품을 받을수도 있는 장소이다.
- 캐글에서 데이터셋을 다운로드 받는 방법.
1. 캐글에 가입 하고 로그인 하면 내 프로필 에 Account 탭에 들어간다.
2. API - Create New API Token 을 클릭해서 Kaggle.json 파일을 다운로드 받는다.
3. 브라우저로 다운받은 Kaggle.json 파일을 열어 username 과 key 값을 복사한다.
4. import os 하여 username과 key를 환경변수로 지정해 준다.
import os
os.environ['KAGGLE_USERNAME'] = '유저네임' # kaggle.json 의 username
os.environ['KAGGLE_KEY'] = 'abcdefg12345678' # kaggle.json 의 key
5. 원하는 데이터셋의 API를 복사해와서 실행한다.
TV 광고 금액으로 Sales 예측하는 모델.
- - Colab에서 시스템명령어 앞에 ! 를 붙여야 실행된다.
!kaggle datasets download -d ashydv/advertising-dataset # 복사해 온 데이터셋 API
6. 데이터셋 압축 풀기
!unzip /content/advertising-dataset.zip #unzip 으로 압축 풀기
압축을 풀면 csv 파일이 해당폴더에 나타나게 된다.
데이터를 받아왔으니 분석해 보자.
1. 필요한 라이브러리들 import 하기.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam, SGD
import numpy as np # ------------ 위에서부터 4개가 기본적으로 쓰이는 라이브러리
import pandas as pd # csv 파일을 읽는데 필요한 기능
import matplotlib.pyplot as plt # 그래프를 그리는데 필요하다
import seaborn as sns # 그래프를 그리는데 필요
from sklearn.model_selection import train_test_split # 트레이닝셋 과 테스트 셋을 분류해주는 기능
2. 데이터 셋을 불러와서 형태를 확인해 보자.
df = pd.read_csv('advertising.csv') # pandas 를 이용하여 csv 파일을 읽는다.
df.head(5) # 위에서 부터 5줄!
3. 데이터셋 크기 살펴보기
print(df.shape)
(200, 4) # 200줄과 4 열의 데이터
4. 데이터셋 간단하게 살펴보기.
- seaborn의 fairplot 이라는 메소드를 활용한 그래프 그리기.
df 라는 데이터를 넣어주고, 내가 보고싶은 variable 만 뽑아서 가로축과 세로축에 넣어서 이것들의 상관관계를 한눈에 파악할 수 있는 pairplot을 보여준다.
sns.pairplot(df, x_vars=['TV', 'Newspaper', 'Radio'], y_vars=['Sales'], height=4)
5. 데이터셋 가공
인풋은 TV 의 광고 데이터 / 아웃풋은 세일즈 데이터 이다.
x_data = np.array(df[['TV']], dtype=np.float32)
y_data = np.array(df['Sales'], dtype=np.float32)
df 에서 추출한 ['TV'] 와 ['Sales'] 를 Keras가 취급할 수 있도록 np.array로 바꿔주고
데이터타입은 tensorflow가 사용할 수 있는 float32 로 지정해준다.
그리고 x데이터와 y데이터의 shape을 찍어보면
print(x_data.shape)
print(y_data.shape)
(200, 1)
(200,)
x_date 는 (200,1) / y_date 는 (200,) 로 값이 다르게 나오는걸 확인할 수 있다.
이 때 reshape 이라는 메소드를 통해 (200, 1) 로 통일시켜 준다.
x_data = x_data.reshape((-1, 1)) # -1 = 남은수만큼 알아서 변형해라 라는 뜻.
y_data = y_data.reshape((-1, 1)) # 1은 뒤에가 무조건 1이 되어야 한다 라는 뜻.
# 원래는 (200,) 였지만 뒤를 1로 맞추고 200으로 reshape 을 해라 라는 뜻.
print(x_data.shape)
print(y_data.shape)
(200, 1)
(200, 1)
데이터셋 자체는 값은 변하지 않지만, reshape을 해야 Keras가 인식하기가 편하다.
5. 데이터셋 분할 (트레이닝셋80% 검증데이터 20%)
실무에서는 [학습, 검증, 테스트]로 총 3가지 데이터셋으로 나누지만 실습에선 2가지로..
x_train, x_val, y_train, y_val = train_test_split(x_data, y_data, test_size=0.2, random_state=2021)
print(x_train.shape, x_val.shape)
print(y_train.shape, y_val.shape)
(160, 1) (40, 1)
(160, 1) (40, 1)
train_test_split을 사용해서 데이터셋을 분할하는데
test_size=0.2 란 테스트셋 20% 트레이닝셋 80%로 나눠줘라 라는 의미이다.
트레이닝 데이터는 160개, 밸리데이션 데이터는 40개가 나오는데
이 말은 우리의 트레이닝 데이터는 160이고 검증은 40개로 하겠다 라는 걸 알 수 있다.
6. 학습시키기
model = Sequential([ # Sequential 이라고 정의해주고
Dense(1) # 출력이 1 (Sales 1개)이므로 Dense는 1.
])
model.compile(loss='mean_squared_error', optimizer=Adam(lr=0.1))
# loss는 mean_squared_error 를 쓰고, optimizer는 Adam, learning rate는 0.1.
model.fit(
x_train,
y_train,
validation_data=(x_val, y_val), # 검증 데이터를 넣어주면 한 epoch이 끝날때마다 자동으로 검증
epochs=100 # 100번 반복 학습해라!
)
epoch가 끝날때마다 검증된 val_loss의 값이 최소값이 될 수 있도록
loss 나 optimizer, learning rate를 바꿔가며 테스트 해본다.
100번째 Epoch를 보면 loss 값과 val_loss 가 많이 줄어든 것을 볼 수 있다.
loss가 많이 줄었으니까 학습이 잘 됐다고 볼 수 있고,
val_loss가 많이 줄었으니 검증이 잘 되었다 라고 볼 수 있다.
7. 검증 데이터로 예측하기
y_pred = model.predict(x_val) # 모델 predict를 사용하여 예측값 y_pred 값을 구하고.
# scatter = 점을 다다다 찍는 그래프 모양.
plt.scatter(x_val, y_val) # y_val = 정답값
plt.scatter(x_val, y_pred, color='r') # y_pred 예측값 (color=빨간색)
plt.show() # 그래프를 보여주라!
정답값과 예측값이 잘 모여있어서 학습이 잘 되었다는 사실을 알 수 있다.
위 그래프로 [TV] 광고에 돈을 쓴 만큼 [Sales]가 비례하게 늘어난다는 것을 예측해 볼 수 있다.
'개발일지 > # 머신러닝' 카테고리의 다른 글
# 전처리 pre-processing (0) | 2022.01.10 |
---|---|
# 논리회귀 Logistic regression (0) | 2022.01.09 |
# 다중 선형 회귀 실습 Multi-variable linear regression (0) | 2022.01.09 |
# 선형 회귀 와 경사하강법 (0) | 2022.01.09 |
# 머신러닝이란? (0) | 2022.01.07 |