머신 러닝이란 ?
컴퓨터에 여러 경험 데이터를 주고 인공 신경망으로 학습시켜서 예측하게 하는 것
지도 학습 (Supervised Learning)
학습 대상이 되는 데이터에 정답을 주어 규칙성
즉, 데이터의 패턴을 배우게 하는 학습 방법
비지도 학습 (Unsupervised Learning)
정답이 없는 데이터만으로 배우게 하는 학습 방법
강화 학습 (Reinforcement Learning)
선택한 결과에 대해 보상을 받아 행동을 개선하면서 배우게 하는 학습 방법
분류 문제(Classification)
이미 적절히 분류된 데이터를 학습하여 분류 규칙을 찾고, 그 규칙을 기반으로 새롭게 주어진 데이터를 적절히 분류하는 것을 목적으로 함 (지도학습)
회귀 문제 (Regression)
이미 결과값이 있는 데이터를 학습하여 입력 값과 결과 값의 연관성을 찾고, 그 연관성을 기반으로 새롭게 주어진 데이터에 대한 값을 예측하는 것을 목적으로 함 (지도 학습)
클러스터링 (Clustering)
주어진 데이터를 학습하여 적절한 분류 규칙을 찾아 데이터를 분류함을 목적으로 함. 정답이 없으니 성능을 평가하기 어려움 (비지도 학습)
y= ax + b
데이터 셋을 학습용, 검증용, 평가용 데이터로 분리
실전 : 학습용, 검증용, 평가용
🌟 평가 데이터는 미래의 데이터이기때문에 한 번 평가를 하면 과거로 돌아가 성능을 개선할 수 없음 !
# x, y 분리
target = 'Ozone'
x = data.drop(target, axis=1)
y = data.loc[:, target]
# 학습용, 평가용 데이터 분리
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)
# 라이브러리 불러오기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings(action='ignore')
%config InlineBackend.figure_format = 'retina'
# 데이터 읽어오기
path = 'https://raw.githubusercontent.com/Jangrae/csv/master/airquality_simple.csv'
data = pd.read_csv(path)
# 결측치 확인
data.isna().sum()
# 가까운 값으로 결측치 채우기
data['Solar.R'].interpolate(method='nearest',inplace=True)
# 변수 제거
drop_cols = ['Month','Day']
data.drop(columns=drop_cols,inplace=True)
# 확인
data.head()
# target 확인
target = 'Ozone'
# 데이터 분리
x = data.drop(columns=target)
y = data.loc[:,'Ozone']
# 모듈 불러오기
from sklearn.model_selection import train_test_split
# 7:3으로 분리
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=42)
# 1단계: 불러오기
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
# 2단계: 선언하기
model = LinearRegression()
# 3단계: 학습하기
model.fit(x_train, y_train)
# 4단계: 예측하기
y_pred = model.predict(x_test)
# 5단계: 평가하기
mean_absolute_error(y_test,y_pred)
# 실제값, 예측값
print('실제값:', y_test.values[:10]) #array
print('예측값:', y_pred[:10] )
# 시각화 비교
plt.plot(y_test.values)
plt.plot(y_pred)
plt.legend(['Actural','Predicted'])
plt.show()