Machine Learning Tutorial 01 - Regression (1)
I 지도 학습 VS 비지도 학습
머신러닝은 크게 두 가지 유형으로 분류한다. 우선 아래 표를 보자.
구분 | 지도학습(Supervised Learning) | 비지도 학습(Unsupervised Learning) |
---|---|---|
알고리즘(분석모형) | 회귀분석분류모형 | 군집분석 |
특징 | 정답을 알고 있는 상태에서 학습모형 평가 방법이 다양한 편 | 정답이 없는 상태에서 서로 비슷한 데이터를 찾아서 그룹화모형 평가 방법이 제한적 |
지도학습(Supervised Learning)
은 종속변수(Dependent Variable) 선정이 매우 중요하며. 종속변수 선정과 함께 데이터 분석도 같이 병행이 된다. 그러나 비지도학습(Unsupervised Learning)
은 데이터가 많은데, 어떻게 분류하면 좋을지 모를 때 서로 비슷한 특징끼리 결합 및 그룹화 하는 것을 말한다.
II. 회귀모형 예제
우선 회귀모형 모형부터 만들자. 아래 코드를 그대로 실행하면 될 것이다. 만약 파이썬(Python)
설치가 필요한 사람은 Tensorflow 2.0 Installation에서 설치 방법을 따라 설치를 진행하기를 바란다.
## 기본 라이브러리 불러오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn import metrics
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-1-5e3e002ab9bf> in <module>
2 import pandas as pd
3 import numpy as np
----> 4 import matplotlib.pyplot as plt
5 import seaborn as sns
6 from sklearn.model_selection import train_test_split
ModuleNotFoundError: No module named 'matplotlib'
(1) No Module Names ’name_of_library'
가끔 이런 모듈이 없다고 나올 때가 있다. 이해하기 어려운 것은 아니다. 가장 좋은 것은 언제나 에러 메시지 전체를 복사해서 구글에서 검색을 한 뒤 해결책을 빠르게 찾는 것이 좋다.
위 에러는 matplotlib
모듈이 없다는 뜻이다.
그럼 설치를 해보자. 어떻게? 자세한 내용은 공식문서를 참고한다. matplotlib 간단한 설치방법은 아래와 같다.
터미널에서 아래와 같이 입력한다. 참고로 MacOS / 필자는 pip3로 설치할 예정이다. 윈도우 아나콘다 설치 버전
$ python3 -m pip install -U pip
$ python3 -m pip install -U matplotlib
matplotlib
와 마찬가지로 seaborn
그리고 scikit-learn
모듈도 같이 위와 같은 형태로 설치를 하면 된다.
(2) Sample Tutorial
전체 소스코드를 실행한 뒤, 하나씩 간단하게 설명을 진행하도록 한다.
import io
import requests
import pprint
url = "https://raw.githubusercontent.com/chloevan/datasets/master/weather/Weather.csv"
url = requests.get(url).content
weather_df = pd.read_csv(io.StringIO(url.decode('utf-8')))
pprint.pprint(weather_df.head())
STA Date Precip WindGustSpd MaxTemp MinTemp MeanTemp \
0 10001 1942-7-1 1.016 NaN 25.555556 22.222222 23.888889
1 10001 1942-7-2 0 NaN 28.888889 21.666667 25.555556
2 10001 1942-7-3 2.54 NaN 26.111111 22.222222 24.444444
3 10001 1942-7-4 2.54 NaN 26.666667 22.222222 24.444444
4 10001 1942-7-5 0 NaN 26.666667 21.666667 24.444444
Snowfall PoorWeather YR ... FB FTI ITH PGT TSHDSBRSGF SD3 RHX RHN \
0 0 NaN 42 ... NaN NaN NaN NaN NaN NaN NaN NaN
1 0 NaN 42 ... NaN NaN NaN NaN NaN NaN NaN NaN
2 0 NaN 42 ... NaN NaN NaN NaN NaN NaN NaN NaN
3 0 NaN 42 ... NaN NaN NaN NaN NaN NaN NaN NaN
4 0 NaN 42 ... NaN NaN NaN NaN NaN NaN NaN NaN
RVG WTE
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
[5 rows x 31 columns]
pprint.pprint(weather_df.describe())
STA WindGustSpd MaxTemp MinTemp \
count 119040.000000 532.000000 119040.000000 119040.000000
mean 29659.435795 37.774534 27.045111 17.789511
std 20953.209402 10.297808 8.717817 8.334572
min 10001.000000 18.520000 -33.333333 -38.333333
25% 11801.000000 29.632000 25.555556 15.000000
50% 22508.000000 37.040000 29.444444 21.111111
75% 33501.000000 43.059000 31.666667 23.333333
max 82506.000000 75.932000 50.000000 34.444444
MeanTemp YR MO DA DR \
count 119040.000000 119040.000000 119040.000000 119040.000000 533.000000
mean 22.411631 43.805284 6.726016 15.797530 26.998124
std 8.297982 1.136718 3.425561 8.794541 15.221732
min -35.555556 40.000000 1.000000 1.000000 2.000000
25% 20.555556 43.000000 4.000000 8.000000 11.000000
50% 25.555556 44.000000 7.000000 16.000000 32.000000
75% 27.222222 45.000000 10.000000 23.000000 34.000000
max 40.000000 45.000000 12.000000 31.000000 78.000000
SPD ... FT FB FTI ITH PGT SD3 RHX RHN RVG \
count 532.000000 ... 0.0 0.0 0.0 0.0 525.000000 0.0 0.0 0.0 0.0
mean 20.396617 ... NaN NaN NaN NaN 12.085333 NaN NaN NaN NaN
std 5.560371 ... NaN NaN NaN NaN 5.731328 NaN NaN NaN NaN
min 10.000000 ... NaN NaN NaN NaN 0.000000 NaN NaN NaN NaN
25% 16.000000 ... NaN NaN NaN NaN 8.500000 NaN NaN NaN NaN
50% 20.000000 ... NaN NaN NaN NaN 11.600000 NaN NaN NaN NaN
75% 23.250000 ... NaN NaN NaN NaN 15.000000 NaN NaN NaN NaN
max 41.000000 ... NaN NaN NaN NaN 23.900000 NaN NaN NaN NaN
WTE
count 0.0
mean NaN
std NaN
min NaN
25% NaN
50% NaN
75% NaN
max NaN
[8 rows x 24 columns]
X = weather_df['MinTemp'].values.reshape(-1,1)
y = weather_df['MaxTemp'].values.reshape(-1,1)
# 데이터 셋 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 모형 개발 선언
regressor = LinearRegression()
regressor.fit(X_train, y_train) # 알고리즘 트레이닝
# intercept: 상수
pprint.pprint(regressor.intercept_)
# slope: 기울기
pprint.pprint(regressor.coef_)
# 예측
y_pred = regressor.predict(X_test)
# 데이터 셋 비교
pred_df = pd.DataFrame({'실제값': y_test.flatten(), '예측값': y_pred.flatten()})
pprint.pprint(pred_df.head())
array([10.66185201])
array([[0.92033997]])
실제값 예측값
0 28.888889 33.670351
1 31.111111 30.091251
2 27.222222 26.512151
3 28.888889 31.113851
4 23.333333 15.774852
# 테스트 데이터와 예측값의 기울기 비교
plt.scatter(X_test, y_test, color='gray')
plt.plot(X_test, y_pred, color='red', linewidth=2)
plt.show()
# 모형 성능
print('MAE:', metrics.mean_absolute_error(y_test, y_pred))
print('MSE:', metrics.mean_squared_error(y_test, y_pred))
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))
MAE: 3.19932917837853
MSE: 17.631568097568447
RMSE: 4.198996082109204
위 소스코드의 구체적인 설명자료는 Machine Learning Tutorial 02 - Regression (2)를 참고하시기를 바랍니다.
III. Reference
Chauhan, N. S. (2019, September 7). A beginner’s guide to Linear Regression in Python with Scikit-Learn. Retrieved March 19, 2020, from https://towardsdatascience.com/a-beginners-guide-to-linear-regression-in-python-with-scikit-learn-83a8f7ae2b4f
End of Document