일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 데이터분석
- 의사결정나무
- LogisticRegression
- 분류
- 시계열데이터
- 비지도학습
- 지도학습
- 로지스틱회귀분석
- ML
- 선형회귀분석
- deeplearning
- DataScience
- 하이퍼파라미터
- GridSearchCV
- LinearRegression
- 손실함수
- 잔차분석
- 시계열 데이터
- 단순선형회귀분석
- machinelearning
- scikitlearn
- OrdinalEncoder
- time series
- RegressionTree
- 다중선형회귀분석
- 결정계수
- 딥러닝
- Python
- 데이터전처리
- dataframe
- Today
- Total
IE가 어른이 되기까지
[Machine Learning] Scikit - Learn을 이용한 데이터 분석 (지도학습 / 분류) 본문
Machine Learning (머신러닝) 이란
기계가 스스로 학습하는 것을 의미합니다.
특히 사람이 지정해준 규칙이나 모델을
스스로 학습하게 됩니다.
https://piscesue0317.tistory.com/27
[Data Science] 지도학습과 비지도학습이란 ?
데이터 마이닝이란 대량의 데이터를 탐색하고 분석하여 의미 있는 패턴과 규칙을 발견하는 것입니다. 또한, 예측이 주된 목적입니다. 이러한 데이터 마이닝에는 다양한 기법들이 존재합니다.
piscesue0317.tistory.com
위 글에서 머신러닝의 종류인
지도학습과 비지도학습에 대해 알아볼 수 있습니다.
이 글에서는 다양한 머신러닝 라이브러리 중
가장 손쉽게 활용할 수 있는 Scikit - Learn에 대해 알아보고자 합니다.
Scikit - Learn은
아래와 같은 다양한 모듈을 제공합니다.
- sklearn.datasets : 내장된 예제 데이터 세트
- sklearn.preprocessing : 다양한 데이터 전처리 기능 제공 (변환, 정규화, 스케일링 등)
- sklearn.pipeline : 묶어서 실행할 수 있는 유틸리티 제공
- sklearn.feature_selection : 특징 (feature) 을 선택할 수 있는 기능 제공
- sklearn.feature_extraction : 특징 (feature) 추출에 사용
- sklearn.model_selection : 교차 검증을 위해 데이터를 학습 / 테스트용으로 분리, 최적 파라미터 추출 (GridSearch)
- sklearn.metrics : 다양한 성능 측정 방법 제공 (Accuracy, Precision, Recall, ROC-AUC, RMSE 등)
* 알고리즘에 필요한 모듈, 클래스, 함수는
각 알고리즘에 따라 별도로 정리되어 있습니다.
먼저, 지도학습 중 분류를 하기 위한
데이터 분석에 활용할 데이터셋입니다.
기본 패키지 불러오기
import sklearn
import numpy as np
import pandas as pd
np.random.seed(42)
먼저, 필요한 라이브러리를 호출해 줍니다.
데이터 불러오기
from sklearn.datasets import load_iris
iris = pd.read_csv("iris.csv")
display(iris)
'pd.read_csv' 함수를 통해
csv 파일을 불러온 후, 'iris'라는 이름을 가진
DataFrame을 만들어줍니다.
해당 데이터에서 우리가 예측해야 하는 것은
'Species'이며 이는 범주형 변수입니다.
범주형 변수가 y일 때는
주어진 데이터를 학습하고 새로운 데이터를 받아들였을 때
학습을 기반으로 분류해주는 분석이 진행됩니다.
위 DataFrame에서는 'Speices' 이라는 변수가
우리가 예측하고자 하는 변수이므로 y로 지정을 하고
나머지 변수들은 x로 지정합니다.
데이터 분할 (X, y)
X = iris.drop(['Species'], axis=1)
y = iris['Species']
앞서 설명했던 바와 같이
'Species' 을 y로, 'Species' 을 제외한 나머지 변수들은 x로 지정해 줍니다.
이때 '.drop( )'이라는 함수를 사용해서
'Species'이라는 함수를 제거한 것을 'X' 라는 변수에 넣어줍니다.
데이터 분할 (학습 데이터, 평가 데이터)
과적합을 피하기 위해
데이터를 학습 데이터와 평가 데이터로
분할하도록 하겠습니다.
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, random_state = 42, shuffle=True, stratify = y)
데이터를 분할할 때는 앞서 설명드린 모듈 중 하나인
sklearn.model_selection 중 train_test_split( ) 함수를 사용하도록 하겠습니다.
또한, 본 데이터의 'size' 변수의 비율을 맞춰주기 위해
stratify 옵션을 사용하였습니다.
test_size 라는 옵션을 통해
평가 데이터를 전체 데이터의 0.3로 지정해 주었습니다.
결과적으로 X, y 모두 분할해주었기 때문에
총 4등분으로 나오게 됩니다.
* random_state : 나눠주는 고정값
* shuffle = Ture : 섞어서 나눠주겠다는 의미 (보다 정확해짐)
* stratify : 층을 나눈다는 의미
데이터 전처리 (수치형 변수, 범주형 변수)
전처리를 수행할 때는 수치형 변수와 범주형 변수로
분리하여 수행합니다.
주어진 데이터를 보았을 때
모든 변수가 수치형임을 알 수 있습니다.
num_var = ['Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width']
cat_var = []
# num_var = X_train.select_dtypes(include=np.number).columns.tolist()
# cat_var = X_train.select_dtypes(exclude=np.number).columns.tolist()
따라서 먼저 수치형과 범주형 변수로 나누어주었습니다.
아래의 방식을 사용해도 됩니다.
보통 전처리 과정은 fit (학습), transform (적용)
이라는 두 단계를 거쳐 적용됩니다.
수치형 변수 전처리 파이프라인
수치형 변수의 방법인 결측치 처리와
정규화 / 표준화 방법을 따로 진행할 수도 있지만
Scikit - Learn의 sklearn.pipeline의 모듈을 사용해 한꺼번에
진행할 수도 있습니다.
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
num_pipeline = Pipeline([
('imputer_num', SimpleImputer(strategy="median")),
('std_scaler', StandardScaler()),
])
먼저 수치형 전처리에 필요한 라이브러리인
SimpleImputer (결측치 처리용), StandardScaler (표준화방법)을
불러옵니다.
수치형 변수 전처리를 위한 파이프라인을 설정하기 위해
Pipeline을 불러와주고 위와 같은 코드식을 작성해 주면
모든 과정을 한꺼번에 수행할 수 있습니다.
* 정규화 방법 라이브러리 : from sklearn.preprocessing import MinMaxScaler
전처리 과정까지 마쳤다면
해당 데이터셋에 적절한 알고리즘을 선택하여
모델을 생성하고 평가하게 됩니다.
* 모델링 과정은 각 알고리즘에 따라 별도로 정리되어 있습니다.
'ML > Python' 카테고리의 다른 글
[Machine Learning] 의사결정나무 (CART) Scikit Learn으로 구현하기 (0) | 2023.01.12 |
---|---|
[Machine Learning] 회귀분석 Scikit Learn으로 구현하기 (0) | 2023.01.09 |
[Machine Learning] Scikit - Learn을 이용한 데이터 분석 (비지도학습) (0) | 2023.01.06 |
[Machine Learning] Scikit - Learn을 이용한 데이터 분석 (지도학습 / 예측) (0) | 2023.01.05 |
[DACON] 서울시 따릉이 대여량 예측 경진대회 (0) | 2022.12.26 |