4.representing data and engineering features(epoch#2)

52
1 Introduction to Machine Learning with Python 4. Representing Data and Engineering Features Honedae Machine Learning Study Epoch #2

Upload: haesun-park

Post on 21-Jan-2018

121 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: 4.representing data and engineering features(epoch#2)

1

Introduction to

Machine Learning with Python

4. Representing Data and Engineering Features

Honedae Machine Learning Study Epoch #2

Page 2: 4.representing data and engineering features(epoch#2)

Contacts

Haesun Park

Email : [email protected]

Meetup: https://www.meetup.com/Hongdae-Machine-Learning-Study/

Facebook : https://facebook.com/haesunrpark

Blog : https://tensorflow.blog

2

Page 3: 4.representing data and engineering features(epoch#2)

Book

파이썬라이브러리를활용한머신러닝, 박해선.

(Introduction to Machine Learning with Python, Andreas

Muller & Sarah Guido의번역서입니다.)

번역서의 1장과 2장은블로그에서무료로읽을수있습니다.

원서에대한프리뷰를온라인에서볼수있습니다.

Github:

https://github.com/rickiepark/introduction_to_ml_with_python/

3

Page 4: 4.representing data and engineering features(epoch#2)

데이터표현과특성공학

4

Page 5: 4.representing data and engineering features(epoch#2)

연속형 vs 범주형

출력값이연속형회귀 , 출력값이범주형분류

입력이연속형특성continuous feature : 실수데이터, ex) 0.13493, 100.0

입력이범주형(이산형) 특성categorical feature : 연속적이지않은숫자나속성,

ex) 픽셀강도, 브랜드, 쇼핑카테고리

범주형특성의사이에는중간값이없고순서가없습니다. ex) 책과옷

특성공학feature engineering : 애플리케이션에가장적합한데이터표현을찾는것

알맞은데이터표현 >>> 매개변수탐색 ex) inch와 cm의스케일, 다항식특성등

5

Page 6: 4.representing data and engineering features(epoch#2)

범주형변수

61994년인구조사데이터베이스: 미국성인의소득데이터셋(Adult Data Set)

이진출력: 분류문제<=50 , >50k

연속형특성

범주형특성 𝑦 = 𝑤 0 × 𝑥 0 + 𝑤 1 × 𝑥 1 + ⋯+ 𝑤 𝑝 × 𝑥 𝑝 + 𝑏 > 0

?

Page 7: 4.representing data and engineering features(epoch#2)

원-핫-인코딩one-hot-encoding

범주형변수를 0 또는 1 의값을가진여러개의새로운특성으로바꿈(이진특성)

원-아웃-오브-엔인코딩one-out-of-N encoding, 혹은가변수dummy variable이라고도함

workclass 특성이 4개의새로운특성으로바뀜(workclass는 더이상사용하지않음)

7* 통계에서의더미인코딩은마지막값을모든변수가 0인것으로대신함(열랭크부족현상때문)

Page 8: 4.representing data and engineering features(epoch#2)

pandas.read_csv

8

import pandas as pd

헤더가없고, 행인덱스없음

DataFrame 객체(like Excel sheet)

Page 9: 4.representing data and engineering features(epoch#2)

pandas.get_dummies

9

범주형데이터자동변환

Page 10: 4.representing data and engineering features(epoch#2)

로지스틱회귀적용

10

occupation_ Transport-moving까지포함됨

훈련세트나누기전에먼저 get_dummies 적용

pd.read_csv()pd.get_dummies()DataFrame.valuesNumPy

DataFrame 객체

Page 11: 4.representing data and engineering features(epoch#2)

원-핫-인코딩변환시주의사항

훈련세트와테스트세트로나누기전에범주형데이터를변환합니다.

만약에훈련세트와테스트세트로나눈후에 get_dummies() 함수를사용하면훈련

세트와테스트세트에각각다른인코딩이적용됩니다.

훈련세트에만 “Private Employee”가있다면, 훈련세트와테스트세트의원-핫-

인코딩으로변환된특성의개수가맞지않을것입니다.

훈련세트에만 “Private Employee”가 있고테스트세트에만 “Self Employed”가있

있다면, 동일한원-핫-인코딩이다른의미로사용될수있습니다.

반드시원-핫-인코딩으로변환한후에훈련데이터와테스트데이터로나눕니다.

11

Page 12: 4.representing data and engineering features(epoch#2)

숫자로된범주형특성

숫자로되어있다고무조건연속형특성은아닙니다.

ex) workclass를객관식으로골랐다면 0, 1, 2, 3 와같은숫자로저장될수있습니다.

연속형인지범주형인지는특성의의미를알아야판단할수있는경우가많습니다.

ex) 별다섯개의평점데이터, 영화관람등급(범주형이지만순서가있음)

pandas의 get_dummies 또는 scikit-learn의 OneHotEncoder를사용할수있습니다.

OneHotEncoder는숫자로된범주형변수에만사용가능합니다.

(scikit-learn 0.20 버전에서문자열로된범주형을원-핫-인코딩으로 변환할수있는

CategoricalEncoder 클래스가추가될예정입니다)

12

Page 13: 4.representing data and engineering features(epoch#2)

get_dummies()로숫자로된범주형특성의변환

13

Page 14: 4.representing data and engineering features(epoch#2)

구간분할

14

Page 15: 4.representing data and engineering features(epoch#2)

wave + 선형회귀, 결정트리회귀

15

규제를조금추가해모든데이터포인트를지나지않도록했습니다.

Page 16: 4.representing data and engineering features(epoch#2)

구간분할bining

연속형특성하나를구간을나누어여러개의범주형특성으로만듭니다.

16

[10] : 2.4 <= x < 3

[11] : 3 <= x

연속형

범주형

[4] : -1.2 <= x < -0.6

[0] : x < -3

Page 17: 4.representing data and engineering features(epoch#2)

OneHotEncoder

17

일반 numpy 배열을반환합니다

선형모델은상수특성으로인해유연해졌으나결정트리는오히려더나빠졌음(결정트리는스스로좋은구간을학습합니다)

숫자로된범주형특성을원-핫-인코딩으로변환합니다.

𝑦 = 𝑤 0 × 𝑥 0 + 𝑤 1 × 𝑥 1 + ⋯+ 𝑤 𝑝 × 𝑥 𝑝 + 𝑏

Page 18: 4.representing data and engineering features(epoch#2)

상호작용과다항식

18

Page 19: 4.representing data and engineering features(epoch#2)

구간분할 + 원본데이터

19

각구간의기울기를하나의특성으로학습합니다.

Page 20: 4.representing data and engineering features(epoch#2)

구간분할 * 원본데이터

20

각구간의기울기를 10개의특성에서따로따로학습합니다.

Page 21: 4.representing data and engineering features(epoch#2)

PolynomialFeatures

원본특성에상호작용이나제곱항을추가합니다(가령 x[0]**2, x[0]*x[1] 등)

21

x**1 ~ x**10

Page 22: 4.representing data and engineering features(epoch#2)

다항회귀Polynomial Regression

22

민감한영역존재(데이터가부족한곳)

PolynomialFeatures의객체

Page 23: 4.representing data and engineering features(epoch#2)

SVR과비교

23

복잡도가높은모델로는특성을변환하지않고도고차원의예측을만듭니다.

(가우시안커널)

Page 24: 4.representing data and engineering features(epoch#2)

boston dataset + PolynomialFeatures

24

13

2=

14!

2! 12!= 91

중복을포함한조합

interaction_only=True 옵션이추가되면거듭제곱은모두제외됩니다.

MinMaxScaler로 0~1 사이로조정

Page 25: 4.representing data and engineering features(epoch#2)

boston + Ridge vs RandomForestClassifier

25

특성에상호작용을추가하면랜덤포레스트의성능은오히려감소합니다.

즉훈련데이터를전처리하지않아도됩니다.

Page 26: 4.representing data and engineering features(epoch#2)

일변량비선형변환

26

Page 27: 4.representing data and engineering features(epoch#2)

일변량변환

log, exp, sin 같은수학함수를적용하여특성값을변환할수있습니다.

선형모델이나신경망모델같은경우데이터스케일에민감합니다.

(신경망의 경우특성추출에대해서는강력하지만입력특성의스케일은평균 0, 표준편차

1로정규화하는것이좋습니다)

ex) 2장의컴퓨터메모리가격데이터예제

27

로그스케일로변환하여선형모델을적용할수있습니다.

Page 28: 4.representing data and engineering features(epoch#2)

카운트데이터

28

첫번째특성의히스토그램

입력데이터는푸아송분포로바꿉니다.

랜덤한가중치를만들어정규분포데이터에상응하는타깃을생성합니다.

푸아송분포를따르는데이터를로그스케일로바꾸면정규분포와비슷해집니다.

log(0)을방지하기위해 1을더함

Page 29: 4.representing data and engineering features(epoch#2)

카운트데이터 + Ridge

29

푸아송분포로바꾼데이터에서훈련한결과

로그스케일로바꾼데이터에서훈련한결과

Page 30: 4.representing data and engineering features(epoch#2)

특성변환은어렵습니다.

데이터와모델에맞는최적의변환을찾기가어렵습니다.

특성마다변환방법이모두다를수있습니다.

트리기반모델에서는불필요하지만선형모델에서는필수적입니다(특히특성의

개수가적을때).

SVM이나신경망같은모델은특성추가보다는특성의스케일을맞추는것이

중요합니다.

SVM은커널기법으로무한다항차원을매핑하는효과를낼수있으며, 신경망은

데이터에서유용한특성을만들수있습니다(표현학습representation learning).

30

Page 31: 4.representing data and engineering features(epoch#2)

특성자동선택

31

Page 32: 4.representing data and engineering features(epoch#2)

특성선택

새로운특성을만들어추가하면모델이복잡해지고과대적합될가능성이높습니다.

특성이추가되거나고차원인데이터셋에서는불필요한특성을제외하면모델이

간단해지고일반화성능을높일수있습니다.

일변량통계기반선택, 모델기반선택, 반복적선택방법이있습니다.

• 타깃값을사용합니다.

• 훈련세트와테스트세트로나눈다음훈련세트만사용해야합니다(6장정보누설).

32

Page 33: 4.representing data and engineering features(epoch#2)

일변량통계

개개의특성과타깃사이에관계가높은특성을선택합니다.

분류: 분산분석(ANOVAanalysis of variance)은클래스별평균을비교합니다. F 값이크면

그특성의클래스별평균이서로다르다는의미입니다(타깃예측에유용함).

𝐹 =𝑆𝑆𝑏𝑒𝑡𝑤𝑒𝑒𝑛/(𝑘 − 1)

(𝑆𝑆𝑡𝑜𝑡 − 𝑆𝑆𝑏𝑒𝑡𝑤𝑒𝑒𝑛)/(𝑛 − 𝑘)

𝑆𝑆𝑏𝑒𝑡𝑤𝑒𝑒𝑛 =

𝑗=1

𝑘

𝑛𝑗 𝑥𝑗 − 𝑥2, 𝑆𝑆𝑡𝑜𝑡 =

𝑖=1

𝑛

𝑥𝑖 − 𝑥 2

SelectKBest나 SelectPercentile에서 f_classif로지정

33

클래스별평균분산 전체분산

Page 34: 4.representing data and engineering features(epoch#2)

일변량통계

회귀: 상관계수를이용하여 F값을계산합니다.

𝐶𝑜𝑟𝑟 = 𝑖=1

𝑛 (𝑥𝑖 − 𝑥)(𝑦𝑖 − 𝑦)

𝑠𝑡𝑑 𝑥 𝑠𝑡𝑑(𝑦)

SelectKBest나 SelectPercentile에서 f_regression로지정

F-분포distribution에서계산된 F값(scores_ 속성)의이후의면적을

p-값value(pvalues_ 속성)이라합니다.

p-값이크면(F값이작으면) 타깃에미치는영향이작다고

판단합니다(기본 p-값은 0.05)

34

Page 35: 4.representing data and engineering features(epoch#2)

cancer + noise

35

절반을선택

SelectKBest():

k개의특성을선택훈련세트에만적용

Page 36: 4.representing data and engineering features(epoch#2)

SelectPercentile + LogisticRegression

36

성능향상을꾀할수있고모델을해석하기쉬어집니다.

노이즈때문에성능이저하됨(특성이너무많거나일부특성이도움이안된다고확신이들경우적용)

Page 37: 4.representing data and engineering features(epoch#2)

모델기반선택

feature_importances_(결정트리)나 coef_(선형모델) 값을사용합니다.

기본임계값 : L1 페널티(라쏘)가있는경우 10-5, 그외는평균값

37

mean

1.3*median

Page 38: 4.representing data and engineering features(epoch#2)

SelectFromModel + LogisticRegression

38

특성선택을위한모델(RandomForestClassifier)과학습

모델(LogisticRegression)이다를수있습니다.

4개특성을못잡아낸 SelectPercentile

보다성능이상승함

Page 39: 4.representing data and engineering features(epoch#2)

반복적특성선택

특성을하나씩추가하면서모델을만들거나, 모든특성에서하나씩제거하면서

모델을만듭니다.

여러개의모델을만들기때문에계산비용이많이듭니다.

scikit-learn은재귀적특성제거(RFErecursive feature elimination)를제공하며, 전체특성을

포함한모델에서지정된개수만큼남을때까지특성중요도가가장낮은특성을

제거해나갑니다.

feature_importances_(결정트리)나 coef_(선형모델) 값을사용합니다.

회귀모델의전진선택법(forward stepwise selection)과후진선택법(backward stepwise selection)은

제공하지않습니다. 특성을추가/제거하면서직접 R2 점수를가지고계산할수있습합니다.

39

Page 40: 4.representing data and engineering features(epoch#2)

RFE

40

SelectFromModel에서와동일한RandomForestClassifier를사용

40개의 RandomForestClassifier 모델을만듭니다(시간이오래걸림)

Page 41: 4.representing data and engineering features(epoch#2)

RFE + LogisticRegression

RFE에사용한모델을이용해평가에사용할수있습니다.

41

로지스틱회귀와랜덤포레스트의성능이비슷함

- 특성선택이좋으면로지스틱회귀의성능이랜덤포레스트와견줄수있음- 랜덤포레스트를사용하면특성선택의필요성이많이감소됨

RFE(RandomForestClassifier())

Page 42: 4.representing data and engineering features(epoch#2)

전문가지식활용

42

Page 43: 4.representing data and engineering features(epoch#2)

특성공학과도메인지식

특성공학은애플리케이션마다다른전문가의지식을사용할수있는영역입니다.

머신러닝은규칙기반시스템과다르지만분야의전문지식은여전히유효합니다.

예) 항공료를잘예측하려면날짜, 항공사, 출발지, 도착지외에그지역의

공휴일(양/음력)이나휴가기간을잘알아야합니다.

애플리케이션마다내재된지식이특성으로추가되어도알고리즘이반드시

사용하는것은아닙니다.

하지만사용되지않더라도특성을추가하는것이문제가되지는않습니다.

43

Page 44: 4.representing data and engineering features(epoch#2)

특성공학과도메인지식

뉴욕의시티바이크대여예측

(https://www.citibikenyc.com/system-data)

44

훈련데이터(24/3*23=184) 테스트데이터(24/3*8=64)

3시간간격의대여횟수(타깃)

pd.DateTimeIndex

Page 45: 4.representing data and engineering features(epoch#2)

Unix Time + RandomForestRegressor

45

트리모델의특징(외삽불능)

`[248, 1]

훈련데이터와테스트데이터로분리하여모델평가

Page 46: 4.representing data and engineering features(epoch#2)

Hour + RandomForestRegressor

46

[248, 1]

시간데이터만있으므로매일동일한패턴이학습됨

Page 47: 4.representing data and engineering features(epoch#2)

Hour,week + RandomForestRegressor

47

[248, 2]요일/시간데이터를사용하여주간패턴을학습함

Page 48: 4.representing data and engineering features(epoch#2)

Hour,week + LinearRegression

48

요일,시간이정수라연속형으로인식합니다.(2개의계수)

Page 49: 4.representing data and engineering features(epoch#2)

OneHotEncoder + LinearReression

49

[248, 15] : 7개요일, 8개시간간격(15개의계수)

범주형으로변경

요일/시간별패턴동일

희소행렬을넘파이배열로(sparse=True)

Page 50: 4.representing data and engineering features(epoch#2)

PolynomialFeatures + LinearRegression

50

[248, 120] : 152

+ 15 = 105 + 15 = 120

중복을제외한조합랜덤포레스트와비슷한수준의성능

Page 51: 4.representing data and engineering features(epoch#2)

LinearRegression’s coef_

선형모델은랜덤포레스트와는달리학습된모델파라미터를확인할수있습니다.

51

Page 52: 4.representing data and engineering features(epoch#2)

감사합니다.

-질문-

52