Sklearn (사이킷런)
지도/ 비지도 학습 알고리즘을 제공하는 대표적인 파이썬 라이브러리
- 오픈소스로서 누구나 무료로 사용가능
- 여러 알고리즘을 같은 구조의 코드로 사용할 수 있음
- 다양한 예제 데이터셋(토이 데이터 셋)을 포함하고 있음 ex) Iris, Boston
1. 환경 준비
기본 라이브러리와 대상 데이터를 불러오기
라이브러리 불러오기
# 라이브러리 불러오기
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)
2. 데이터 이해
** 좋은 모델을 위해 좋은 데이터는 필수임
** 충분히 탐색하고 적절히 전처리 해야함!
상위 데이터, 하위데이터, 변수, 기술통계, 상관관계 확인
# 상위 몇 개 행 확인
data.head()
# 하위 몇 개 행 확인
data.tail()
# 변수 확인
data.info()
# 변수 확인
data.info()
# 기술통계 확인
data.describe()
# 상관관계 확인 방법1
data.corr()
# 상관관계 확인 방법2
tmp = data.corr(numeric_only=True)
#numeric_only : 문자열 말고 수치형만 보여주기
tmp.style.background_gradient()
#상관관계 확인 방법3 (히트맵)
sns.heatmap(data.corr(numeric_only= True),
annot= True,
cmap='Blues',
cbar=False,
square=True,
fmt='.3f',
annot_kws={'size':8})
plt.show()
3. 데이터 준비
전저리 과정을 통해 머신러닝 알고리즘에 사용할 수 있는 형태의 데이터로 바꿈.
결측치 처리
결측치를 제거하거나 적절한 값으로 대체
# 결측치 확인
data.isna().sum()
# 전날 값으로 결측치 채우기
# data.fill(inplace=True)
data.interpolate(method='nearest',inplace=True)
# 확인
data.isna().sum()
#결측치가 채워지지 않은 것은 있나?
# 예를 들어 비워져있는 놈들 사이에서 가운데 있는 놈은 어떤 값으로 채워질까?
# 거리가 같으면 앞값을 우선 선택함?
변수 제거
분석에 의미가 없으면 변수 제거
# 변수 제거
drop_cols = ['Month','Day']
data.drop(columns=drop_cols,inplace=True)
#data = data.drop(colums=drops_cols,inplace=True)# inplace는 =과 같이 쓰일 수 없음
# 확인
data.head()
x,y 분리
- target 변수를 명확히 지정, 이외의 변수는 x로 선언 -> df
- tager 변수 데이터 y로 선언 -> 시리즈
# target 확인
target = 'Ozone'
# 데이터 분리
x= data.drop(columns=target) #inplace = false가 기본값임 -> 결과값만 반환되고 데이터로 받지 않음
#우리의 목표는 데이터를 변경시키는 것이 아니라 x만 결과값을 가르키게 하는 것
#x=data.drop(target,axis=1)
y= data['Ozone']
#y= data.loc[:,target] 생략하지 않고 쓰는 법
x.head() #df
x 값 확인
y.head() #시리즈
y 값 확인
학습용, 평가용 데이터 분리
# 모듈 불러오기
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)
#x_train과 행수가 같은건 y_train
#train_test_split 은 랜덤하게 데이터를 섞고 자르는거임 - > 그래서 결과가 다 다름
#같은 평가 데이터로 보려면 randaom_state 사용해서 같은 숫자를 주면 됨
# x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=1)
4. 모델링
- 회귀 문제/ 분류 문제인지 체크 -> 알고리즘, 평가 방법 선택
불러오기
- 사용할 알고리즘과 평가를 위한 함수 import
# 1단계: 불러오기
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error #평가는 여기서 다 불러옴
선언하기
- 사용할 알고리즘용 함수로 모델 선언
# 2단계: 선언하기
model = LinearRegression()
학습하기
- 모델 학습 시키기
# 3단계: 학습하기
#x_train 에 대한 정답인 y_train을 줘야함
model.fit(x_train,y_train)
예측하기
- 예측한 결과 변수로 저장
# 4단계: 예측하기
y_pred = model.predict(x_test)
평가하기
-실젯값과 예측값을 평가 함수에 전달하여 성능 평가
# 5단계: 평가하기
mean_absolute_error(y_test, y_pred)
#실젯값, 예측값
# print('실젯값',y_test) #시리즈
print('실젯값',y_test.values[:10]) #values -> 값만 뽑아줌 : array
print('예측값',y_pred[:10])
+추가) 시각화
#시각화 방법 2
plt.plot(y_test.values,label='Actual')
plt.plot(y_pred,label='Predicted')
plt.legend()
plt.show()
'Dev > 머신러닝' 카테고리의 다른 글
[머신러닝] 성능 평가 (0) | 2024.10.04 |
---|---|
[머신러닝] 머신 러닝의 이해와 개념 (0) | 2024.09.26 |