[강의노트]_KDT_day5_260110

by 아르떼

사이킷런 기본


사이킷런(scikit-learn) 소개(sklearn)

사이킷런은 파이썬 머신러닝 알고리즘 중 가장 많이 사용되는 라이브러리이다.


사이킷런의 특징

사이킷런 기반의 다른 머신러닝 패키지도 사이킷런 스타일의 API를 지향할 정도로 쉽고 가장 파이썬스러운 API를 제공

머신러닝을 위한 매우 다양한 알고리즘과 개발을 위한 편리한 프레임워크와 API를 제공

오랜기간동안 실전 환경에서 검증되었으며 매우 많은 환경에서 사용되는 성숙한 라이브러리


iris 데이터셋을 사용하여 분류 모델 학습

- 지도학습의 대표적인 모델인 분류 모델을 통해 붓꽃의 측정데이터로 품종 예측

- 지도학습의 방법은 학습을 위한 다양한 특성(변수)와 레이블(정답)을 이용해 모델을 학습한 후 별도의 테스트셋을 통해 미지의 품종을 예측하는 방법

- 명확한 정답이 주어진 데이터를 먼저 학습한 후 미지의 데이터로 예측하는 방식

- 학습을 위해 사용하는 데이터셋을 훈련 데이터셋 혹은 학습 데이터셋이라고 하고 머신러닝 모델이 학습을 마친 후 모델의 성능 평가에 사용하는 데이터를 테스트 데이터셋 혹은 평가 데이터셋이라고 부름


사이킷런에서 데이터셋, 디시전트리 모델, 데이터셋 조작을 위한 모듈 불러오기

from sklearn.datasets import load_iris

#붓꽃 데이터셋을 사용하기 위해 sklearn.datasets에서 load_iris()를 이용

from sklearn.tree import DecisionTreeClassifier

#머신러닝 알고리즘은 DecisionTreeClassifider를 적용하여 의사결정나무 알고리즘 사용

from sklearn.model_selection import train_test_split

#sklearn.model_selection은 학습 데이터와 테스트데이터로 데이터를 분리하거나 최적의 하이퍼 파라미터로 모델을 최적화하기 위한 다양한 모듈들의 집합

# 데이터셋을 학습데이터셋과 테스트데이터셋으로 분리하기 위해 train_test_split 함수를 사용


학습 데이터와 테스트 데이터를 분리

- 테스용 데이터를 통해 모델이 얼마나 잘 학습을 진행했는지 평가할 수 있음

- 학습데이터와 테스트 데이터의 분리는 train_test_split() 메서드를 이용

- test_size라는 파라미터를 사용해 전체 데이터 중 테스트 데이터의 비율을 결정


X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label,

test_size=0.2, random_state=42)

# iris_data와 iris_label 데이터를 X-train, X_test, y_train, y_test 네 개의 데이터셋으로 나누어 저장

# 분리 비율은 학습데이터 80, 테스트데이터 20의 비율로 지정(test_size=0.2)

# 데이터 분리는 매회 랜덤하게 이루어지기 때문에 난수 발생 경우의 수를 일정한 숫자로 고정해야 반복 수행 시에도 같은 결과를 얻음(random_state=42)


의사 결정 나무를 이용해 예측 모델을 훈련

- 사이킷런의 의사결정나무 클래스를 사용하기 위하여 DecisionTreeClassifider를 객체로 생성

# DecisionTreeClassifier 객체 생성

dt_clf = DecisionTreeClassifier(random_state=42)

#dt_clf라는 변수에 DecisionTreeClassifier의 모든 기능을 집어 넣음.

# 학습 수행

dt_clf.fit(X_train, y_train)

- DecisionTreeClassifier의 fit() 메서드에 학습용 데이터셋의 학습용 특성데이터와 결과값 데이터를 입력해 호출하면 학습 과정 완료


훈련된 모델을 사용해 결과값 예측

- 학습이 완료된 디시젼트리 모델을 사용하여 새로운 데이터의 결과값을 예측

- 새로운 값을 사용해서 예측을 수행해야 되는데 새로운 값에 해당하는 데이터는 이전 작업에서 따로 분리해 학습에 사용되지 않는 데이터(X-test)를 사용


# 학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행.

pred = dt_clf.predict(X_test)

# 예측값과 테스트셋의 결과값 데이터를 비교하여 예측 모델의 성능을 평가

# 머신러닝의 성능을 평가하는 방법에는 여러가지가 있으나 일반적인 방법으로 정확도를 사용


from sklearn.metrics import accuracy_score

print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))

# accuracy_score() 함수를 사용하여 원래의 결과값과 모델을 통해 예측된 예측값이 얼마나 일치했는지 비교해보고 정확하게 맞춘 비율을 정확도로 표현


사이킷런 기반 프레임 워크 익히기

Estimator 이해 및 fit(), predict() 메서드

- 사이킷런 모델 학습을 위해서는 fit()을 사용하고 학습된 모델의 예측을 위해서는 predict()를 사용

# 학습시킬 때는 모델.fit(x_train, y_train) 예측할 때는 모델.predict(x_test, y_test)

- 지도학습의 두 축인 분류와 회귀 알고리즘을 구현한 모든 사이킷런 클래스는 fit()과 predict()만을 이용해서 학습과 예측 결과치를 얻을 수 있음

- 분류를 수행하는 Classifider와 회귀 알고리즘을 수행하는 Regressor 클래스를 통칭하여 Estimator 클래스라고 부르며 fit()과 predict()를 내부에서 구현

- cross_validation()과 같은 evaluation 함수, GridSearchCV와 같은 하이퍼파라미터 최적화 클래스의 경우 Estimatior를 인자로 받음


사이킷런 기초 실습

https://colab.research.google.com/drive/1Qt3-rrRPgKP2R6xMFe0GRYEvSFR9hRl3?usp=sharing


iris 분류 모델 연습

https://colab.research.google.com/drive/19QJ0ZIN0EduKzfXQvI6ryEOHdF1jm5zq?usp=sharing


데이터 전처리

1. 결측치 처리 -> fillna(값 / Method = "bfill")

2. 이상치 처리

3. Categorical Data(성별, 생존여부, 탑승장소, 등급) #타이타닉 데이터 예시

Categorical Data는 수치형으로 바꿔야 한다. 이 과정을 encoding

4. 숫자 데이터(가족, Fare) -> 0-1까지의 값으로 바꾼다. -> 정규화 Normalisation

평균이 0이고 표준편차가 1인 값으로 바꾼다. -> 표준화 Standardisation


타이타닉 생사 예측 모델 연습

https://colab.research.google.com/drive/1eA5m_bTf6UvhWzNsG0c7fT4AJI_CXq6E?usp=sharing


선형회귀 개요

회귀(Regression) 문제는 독립 변수값(Feature)들의 경향성을 보고 연속성을 갖는 숫자형 종속 변수 값(Target)을 예측하는 문제

다중 회귀 분석 : 변수가 2개 이상 있는 경우로 확장하면 다중 회귀 분석


선형 회귀 분석의 4가지 기본 가정

선형성 독립성 등분산성 정규성

선형성 : 독립변수와 종속변수 간의 분포 관계가 선형의 관계를 가진다.

독립성 : 독립성은 다중 회귀분석의 중요한 기본 가정으로 독립변수와 다른 독립변수간의 상관관계가 적을 경우 선형 회귀 모델의 에측력이 좋아진다.

등분산성 : 분산이란 데이터의 분포 정도에 대한 척도인데, 데이터가 특정한 패턴 없이 고르게 분포하는 것이, 특정한 좁은 구간에만 집중해서 분포하는 것보다 더 나은 예측을 보인다.

정규성 : 잔차residual란 회귀직선과 관측값과의 차이인데, 오차error라고도 한다. 이 잔차가 정규 분포를 이루면 좋은 선형 회귀 모델이라고 할 수 있다.


오차 계산

MSE(Mean Squared Error)

RMSE(Root Mean Squared Error)

MAE(Mean Absolute Error)

R^2(R squared, 결정계수)


SSE = (Actual - Expected)^2

SST = (Real - Expected)^2

SSR = (Estimated - Expected)^2

SST = SSR + SSE


R^2 = SSR / SST = 1 - SSE/SST

결정계수(Coefficient of determination)

표본으로 추정된 회귀선이 관찰치를 얼마나 적절히 설명하는가를 나타내는 척도.


선형 회귀의 종류

일반선형 회귀

릿지(Ridge)

릿지 회귀는 선형 회귀에 L2 규제를 추가한 회귀 모델이다. 릿지 회귀는 L2 규제로 상대적으로 큰 회귀 계수 값의 예측 영향을 감소시키기 위해 회귀 계수값을 더 작게 만드는 규제 모델이다.

라쏘(Lasso)

라쏘 회귀는 선형 회귀에 L1 규제를 적용한 방식이다. L2 규제가 회귀 계수 값의 크기를 줄이는데 반해, L1 규제는 예측 영향력이 적은 특성의 회귀 계수를 0으로 만들어 회귀 예측 시 특성이 선택되지 않게 하는 것이다. 이러한 특성 때문에 L1 규제는 특성 선택 기능으로도 불린다.

엘라스틱넷(Elastic Net)

L1, L2 규제를 함께 결합한 모델이다.

로지스틱 회귀(Logistic Regression)

로지스틱 회귀는 회귀라는 이름이 붙어 있지만, 사실은 분류에 사용되는 선형 모델이다. 로지스틱 회귀는 매우 강력한 분류 알고리즘이다. 일반적으로 이진 분류뿐만 아니라 희소 영역의 분류, 예를 들어 텍스트 분류와 같은 영역에서 뛰어난 예측 성능을 보인다.


wine quality data 선형회귀 실습

https://colab.research.google.com/drive/10MCYH6z3gNQUv2Bq1qNz_SVI60mILNBy?usp=sharing


작가의 이전글[강의노트] KDT_day4_260109