52
MATLAB Programming Regression Analysis 김탁은 [email protected] 1

Lec 10. Regression Analysis

Embed Size (px)

Citation preview

Page 1: Lec 10. Regression Analysis

MATLAB Programming

Regression Analysis

김 탁 은[email protected]

1

Page 2: Lec 10. Regression Analysis

MATLAB Programming

회귀 분석

회귀 분석이란?

• 연관된 변수들 간의 관계를 찾는 통계적 방법

• 즉, 어떠한 변수 x가 변수 Y에 함수 관계를 통해 영향을 미친다는 것을

찾아내는 것

• 예를 들어

– 강우량 (변수 x)이 곡물의 수확량 (변수 Y)에 미치는 영향

– 화학 공정의 수율(변수 x)이 촉매의 사용량(변수 Y)에 따라 어떻게 변하는지..

2

Page 3: Lec 10. Regression Analysis

MATLAB Programming

변수 간의 관계

확정적 (deterministic) 관계

• 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것

• 함수 f의 상태를 모를 수도 있으나, y는 x에 따라 확정되는 것이 확실한 관계

확률적 (probabilistic) 관계

• x의 일정한 값에 대해 관측되는 Y의 값이 일정하게 나타나지는 않지만,

평균적으로 일정한 경향을 나타내는 것

• Y = f(x) + ε

– x 는독립변수, Y 는종속변수, ε는확률적효과

– Note: Y는확률변수이나, x는확률변수가아님

• 다른용어로, x 를설명변수(regression variable), Y를반응변수 (response

variable) 이라고부르기도함

3

Page 4: Lec 10. Regression Analysis

MATLAB Programming

회귀 분석을 통해

설명 변수 (독립 변수 x) 와 반응 변수 (종속 변수 Y)의 관계를 수식으로 나타내고,

이에 대한 적합성 검증 가능

추정된 평균 반응값에 포함된 오차의 범위 (신뢰구간)을 얻을 수 있음

설명 변수의 값을 알면 평균 반응값을 추정하거나, 새로운 관측 값을 예측 가능

4

Page 5: Lec 10. Regression Analysis

MATLAB Programming

회귀 모형

regression model

• 변수 간의 관계를 확률적으로 나타낸 것

• 예를 들어,

– 키와 폐활량의 관계를 알아보기 위해 20명의 실험 대상에 대해 데이터를 얻음

– 두 변수간에 선형적인 관계식이 존재함을 알 수 있음: E(Y) = β0 + β1x

5

Page 6: Lec 10. Regression Analysis

MATLAB Programming

회귀 모형

확률 오차 ε (random error)

• 관측 값과 β0 + β1x 간의차이

• 다른변수의영향이나측정오류에기인

• 확률 오차를 고려하여 두 변수의 관계는 Y = β0 + β1x + ε로나타낼수있음

선형 회귀 모형 (linear regression model)

• 단순 회귀 모형 :

– Y = β0 + β1x + ε

• 다중 선형 회귀 모형 :

– Y = β0 + β1x1 + β2x2 + β3x3 + … + βkxk + ε ε

6

Page 7: Lec 10. Regression Analysis

MATLAB Programming

단순 회귀 모형

Y = β0 + β1x + ε

β0, β0 : 회귀계수 (regression coefficient)

확률오차 ε는평균 0, 분산 σ2 인분포를따른다고가정

Fitting

변수간의관계를회귀모형으로가정한다음, 회귀모형의모수들을추정

최소 제곱법 (method of least squares)

모수를추정하는방법중의하나

실험을통해설명변수 x 의여러값 x1, x2, …, xn 에대응하는반응변수Y의관측값 y1,

y2, …, yn 을얻었을때오차 εi 를제곱하여모두합한값을최소로하는추정방법

𝑄𝑄 𝛽𝛽0,𝛽𝛽1 = ∑𝑖𝑖=1𝑛𝑛 𝜀𝜀2 = ∑𝑖𝑖=1𝑛𝑛 𝑦𝑦𝑖𝑖 − 𝛽𝛽0 − 𝛽𝛽1𝑥𝑥𝑖𝑖 2

7

Page 8: Lec 10. Regression Analysis

MATLAB Programming

단순 회귀 모형

최소 제곱법 (method of least squares)

𝑄𝑄 𝛽𝛽0,𝛽𝛽1 = ∑𝑖𝑖=1𝑛𝑛 𝜀𝜀2 = ∑𝑖𝑖=1𝑛𝑛 𝑦𝑦𝑖𝑖 − 𝛽𝛽0 − 𝛽𝛽1𝑥𝑥𝑖𝑖 2

𝑄𝑄 𝛽𝛽0,𝛽𝛽1 을최소화하는 𝛽𝛽0, 𝛽𝛽1 을다음연립방정식을계산하여구함

𝜕𝜕𝑄𝑄 𝛽𝛽0,𝛽𝛽1𝜕𝜕𝛽𝛽0

= −2∑𝑖𝑖=1𝑛𝑛 𝑦𝑦𝑖𝑖 − 𝛽𝛽0 − 𝛽𝛽1𝑥𝑥𝑖𝑖 = 0

𝜕𝜕𝑄𝑄 𝛽𝛽0,𝛽𝛽1𝜕𝜕𝛽𝛽1

= −2∑𝑖𝑖=1𝑛𝑛 𝑦𝑦𝑖𝑖 − 𝛽𝛽0 − 𝛽𝛽1𝑥𝑥𝑖𝑖 𝑥𝑥𝑖𝑖 = 0

두 식을 정리하면,

𝛽𝛽1 = ∑𝑖𝑖=1𝑛𝑛 (𝑥𝑥𝑖𝑖−�̅�𝑥)(𝑦𝑦𝑖𝑖− �𝑦𝑦)∑𝑖𝑖=1𝑛𝑛 (𝑥𝑥𝑖𝑖−�̅�𝑥)^2

𝛽𝛽0 = �𝑦𝑦 − 𝛽𝛽1�̅�𝑥

여기서, �̅�𝑥, �𝑦𝑦 는 xi, yi의 평균

8

Page 9: Lec 10. Regression Analysis

MATLAB Programming

Quiz

기계의 사용 기간(개월수)과 정비 비용(만원) 사이에 어떠한 관계가 있는지

알아보기 위해 기계의 사용기간에 따른 정비비용을 조사하였다.

(1) 단순 회귀 모형을 통해 관계를 분석하고, (2) 각 데이터들과 선형 함수를

그래프로 그리고, (3) 사용기간이 48개월일 때 정비 비용을 알아보자.

𝛽𝛽1 = ∑𝑖𝑖=1𝑛𝑛 (𝑥𝑥𝑖𝑖−�̅�𝑥)(𝑦𝑦𝑖𝑖− �𝑦𝑦)∑𝑖𝑖=1𝑛𝑛 (𝑥𝑥𝑖𝑖−�̅�𝑥)^2

𝛽𝛽0 = �𝑦𝑦 − 𝛽𝛽1�̅�𝑥

여기서, �̅�𝑥, �𝑦𝑦 는 xi, yi의 평균

관측번호 1 2 3 4 5 6 7 8 9 10

사용기간 (xi) 18 6 30 48 6 36 18 18 30 36

정비비용 (yi) 25 17 48 58 23 40 30 39 40 60

통계학 응용과 이론, 청문각에서 발췌

9

Page 10: Lec 10. Regression Analysis

MATLAB Programming

Quiz Sol.

β0 = 14.5714, β1 = 0.9524

10

Page 11: Lec 10. Regression Analysis

MATLAB Programming

다중 회귀 모형

설명 변수(x) 하나 만으로 반응 변수(Y)의 변화를 충분히 설명하지

못하여, 여러 개의 설명 변수를 사용해야 하는 경우에 사용하는 모형

설명 변수의 수가 k개인 다중 회귀 모형

• Y = β0 + β1x1 + β2x2 + β3x3 + … + βkxk + ε

• 각각의회귀계수 βi는 i번째설명변수만의변화가반응변수에미치는영향

설명변수의선형결합도다중회귀모형으로분석가능

• 예를들어, Y = β0 + β1x + β2x2 + β3x3 + ε의경우, x1 = x, x2=x2, x3=x3 으로

치환하면다중회귀모형 Y = β0 + β1x1 + β2x2 + β3x3 + ε으로해석가능

11

Page 12: Lec 10. Regression Analysis

MATLAB Programming

다중 회귀 모형의 최소 제곱 추정

단순 회귀 모형의 최소 제곱 추정 방법과 비슷하게 계산

Y1 = β0 + β1x11 + β2x12 + β3x13 + … + βkx1k + ε1

Y2 = β0 + β1x21 + β2x22 + β3x23 + … + βkx2k + ε2

Yn = β0 + β1xn1 + β2xn2 + β3xn3 + … + βkxnk + εn

상기수식을행렬로정의가능

Y = Xβ + ε이며

Y = [Y1, Y2, …, Yn]’ , 𝑿𝑿 =𝟏𝟏 𝒙𝒙𝟏𝟏𝟏𝟏𝟏𝟏 𝒙𝒙𝟐𝟐𝟏𝟏

𝒙𝒙𝟏𝟏𝟐𝟐 … 𝒙𝒙𝟏𝟏𝟏𝟏𝒙𝒙𝟏𝟏𝟏𝟏 … 𝒙𝒙𝟐𝟐𝟏𝟏… …

𝟏𝟏 𝒙𝒙𝒏𝒏𝟏𝟏… … …𝒙𝒙𝒏𝒏𝟐𝟐 … 𝒙𝒙𝒏𝒏𝟏𝟏

, ε = [ε1, ε2, …, εn]’

12

Page 13: Lec 10. Regression Analysis

MATLAB Programming

다중 회귀 모형의 최소 제곱 추정

오차의 제곱의 합이 최소가 되도록 하는 회귀 계수들을 찾음

• Q(β) = ∑𝑖𝑖=1𝑛𝑛 𝜀𝜀𝑖𝑖2 = ε’ε = (Y - Xβ)’(Y – Xβ)

위의식을풀어서정리하면,

• Q(β) = Y’Y – β’X’Y – Y’Xβ + β’X’Xβ

= Y’Y – 2β’X’Y + β’X’Xβ

• 𝜕𝜕𝑄𝑄𝜕𝜕𝛽𝛽

= −2𝑋𝑋′𝑌𝑌 + 2𝑋𝑋′𝑋𝑋𝛽𝛽 = 0 X’Xβ = X’Y

• 따라서최소제곱추정량 β = (X’X)-1X’Y

13

Page 14: Lec 10. Regression Analysis

MATLAB Programming

다중 회귀 모형

A 전자회사는 전국적으로 수백 개의 대리점을 갖고 있는데, 각 대리점의 월 매출액(억원)은

관할 구청의 인구수(십만명)와 그 구역의 가구당 월평균 수입(백만원)에 크게 영향을

받는다고 판단된다. 10개의 대리점을 무작위로 뽑아 다음과 같은 자료를 얻었다. 이 자료를

다중 회귀 모형에 fitting 시켜보자.

통계학 응용과 이론, 청문각에서 발췌

대리점번호 1 2 3 4 5 6 7 8 9 10

월매출액( yi) 2.0 1.3 2.4 1.5 0.6 2.0 1.0 2.0 1.3 0.9

인구수 (xi1) 3.0 1.1 3.5 2.5 0.6 2.8 1.3 3.3 2.0 1.0

월평균수입 (xi2) 3.2 3.0 3.6 2.6 1.9 3.5 2.1 3.4 2.8 2.3

최소 제곱 추정량 β = (X’X)-1X’Y

14

Page 15: Lec 10. Regression Analysis

MATLAB Programming

다중 회귀 모형대리점번호 1 2 3 4 5 6 7 8 9 10

월매출액( yi) 2.0 1.3 2.4 1.5 0.6 2.0 1.0 2.0 1.3 0.9

인구수 (xi1) 3.0 1.1 3.5 2.5 0.6 2.8 1.3 3.3 2.0 1.0

월평균수입 (xi2) 3.2 3.0 3.6 2.6 1.9 3.5 2.1 3.4 2.8 2.3

β0 = -0.4503β1 = 0.3067β2 = 0.4589

추정 회귀식

y(x1,x2) = -0.4503 + 0.3067 x1 + 0.4589 x2

15

Page 16: Lec 10. Regression Analysis

MATLAB Programming

Quiz

국민의 생활 수준을 알아보는 지표로 총 생계비 중에서 식비가 차지하는 비율인 엥겔지수가

있다. 한 가계당 평균 얼마의 식비를 지출하는지 알아보기 위해 서울에 거주하는 10가구를

무작위로 뽑아 월 평균식비 (단위: 만원) y, 월 평균소득 (단위: 만원) x1, 가족의 수 (단위: 명)

x2, 그리고 평균 연령 (단위: 세) x3을 조사하여 다음과 같은 자료를 얻었다.

다음의 다중 회귀 모형을 가정하고 회귀식을 추정하라.

Y = β0 + β1x1 + β2x2 + β3x3 + ε

통계학 응용과 이론, 청문각에서 발췌

y 36.2 39.0 81.7 39.0 68.3 106.3 123.9 114.8 97.0 100.2

x1 206.2 218.6 264.6 330.5 334.7 365.6 379.3 456.4 502.7 531.0

x2 1 4 4 2 3 4 5 6 3 7

x3 32 39 41 33 37 31 35 29 27 36

최소 제곱 추정량 β = (X’X)-1X’Y

16

Page 17: Lec 10. Regression Analysis

MATLAB Programming

Quiz Sol.

통계학 응용과 이론, 청문각에서 발췌

y 36.2 39.0 81.7 39.0 68.3 106.3 123.9 114.8 97.0 100.2

x1 206.2 218.6 264.6 330.5 334.7 365.6 379.3 456.4 502.7 531.0

x2 1 4 4 2 3 4 5 6 3 7

x3 32 39 41 33 37 31 35 29 27 36

β0 = 88.7125β1 = 0.0517β2 = 11.9010β3 = -2.1480

추정 회귀식

y(x1,x2,x3) = 88.7125 + 0.0517 x1 + 11.9010 x2 -2.1480 x3

17

Page 18: Lec 10. Regression Analysis

MATLAB Programming

Basic Fitting Tool

주어진 데이터에 대해 다양한 regression model 을 적용해 볼 수 있음

18

Page 19: Lec 10. Regression Analysis

MATLAB Programming

Basic Fitting Tool

β0 = 14.5714, β1 = 0.9524

19

Page 20: Lec 10. Regression Analysis

MATLAB Programming

Basic Fitting Tool

여러 회귀 모형의 결과를 동시에 확인 가능

20

Page 21: Lec 10. Regression Analysis

MATLAB Programming

Quiz

다음 자료를 포물선 회귀모형을 이용하여 분석하고자 한다.

Y = β0 + β1x + β2x2 + ε

Basic Fitting Tool을 이용하여 추정 회귀식을 구하고, 이를 산점도와 함께

그려라.

x -3 -2 -1 0 1 2 3

y 0 0 1 1 0 0 -1

21

Page 22: Lec 10. Regression Analysis

MATLAB Programming

Quiz Sol.

다음 자료를 포물선 회귀모형을 이용하여 분석하고자 한다.

Y = β0 + β1x + β2x2 + ε

Basic Fitting Tool을 이용하여 추정 회귀식을 구하고, 이를 산점도와 함께 그려라.

x -3 -2 -1 0 1 2 3

y 0 0 1 1 0 0 -1

22

Page 23: Lec 10. Regression Analysis

MATLAB Programming

Quiz Sol.

polyfit을 이용하는 방법

• p = polyfit(x, y, n)

– (x, y) 좌표의 점, n차 회귀 모형으로 회귀분석

– p : 회귀 곡선의 다항식 벡터를 반환

23

Page 24: Lec 10. Regression Analysis

MATLAB Programming

톨게이트 통과 차량 (traffic.txt)

시간 톨게이트 A 톨게이트 B 톨게이트 C

03:00 ~ 04:00 12 11 9

04:00 ~ 05:00 8 14 11

05:00 ~ 06:00 14 17 20

06:00 ~ 07:00 11 13 9

07:00 ~ 08:00 43 51 69

08:00 ~ 09:00 38 88 115

09:00 ~ 10:00 28 36 55

10:00 ~ 11:00 12 12 14

11:00 ~ 12:00 18 27 30

12:00 ~ 13:00 18 19 29

13:00 ~ 14:00 17 15 18

14:00 ~ 15:00 19 36 48

15:00 ~ 16:00 32 47 10

16:00 ~ 17:00 42 65 151

17:00 ~ 18:00 114 145 257

18:00 ~ 19:00 35 58 68

19:00 ~ 20:00 13 9 15

20:00 ~ 21:00 11 12 15

21:00 ~ 22:00 10 9 7

24

Page 25: Lec 10. Regression Analysis

MATLAB Programming

다항식 Fitting

톨게이트 C를 통과하는 자동차의 수를 6차 항을 갖는 다항식으로 fitting

해보자.

25

Page 26: Lec 10. Regression Analysis

MATLAB Programming

다항식이 아닌 함수로 Fitting

어떤 데이터 집합의 경우, 다항식이 아닌 다른 함수로 fitting 하는 것이 데이터를

더욱 잘 표현할 수 있음

MATLAB의 polyfit 함수로 데이터를 fitting 하기 위해서는, 다항식이 아닌

fitting 함수를 선형으로 변형해 주어야 함

fitting 할함수 선형변환 polyfit 사용법

y = a emx ln(y) = mx + ln(a) p = polyfit( x, ln(y), 1 )

y = a 10mx log(y) = mx + log(a) p = polyfit( x, log(y), 1 )

y = m ln(x) + b 그대로사용 p = polyfit( ln(x), y, 1 )

y = m log(x) + b 그대로사용 p = polyfit( log(x), y, 1 )

y = 1 / (mx + b) 1/y = mx + b p = polyfit( x, 1./y, 1)

26

Page 27: Lec 10. Regression Analysis

MATLAB Programming

다항식이 아닌 함수로 Fitting

데이터 plot 선형변환후 Fitting

27

Page 28: Lec 10. Regression Analysis

MATLAB Programming

Quiz

다음과 같은 데이터가 있다. 다음 데이터는 아래와 같은 수식으로 부터

만들어 낼 수 있다. 데이터 Fitting 하라.

• x = linspace(0, 2, 10);

• y = 1./(5*x+1) + 0.2*rand(1,length(x));

28

Page 29: Lec 10. Regression Analysis

MATLAB Programming

Quiz Sol.

29

Page 30: Lec 10. Regression Analysis

MATLAB Programming

보간법(Interpolation)

30

Page 31: Lec 10. Regression Analysis

MATLAB Programming

라그랑지 보간법 (Lagrange Interpolation)

보간법은 데이터 점들 사이의 값을 추정하는 방법

평면상에 서로 다른 n개의 점 (xk, yk)가 주어진다면, 이들을 지나는 (최대) n차의

유일한 다항식 p가 존재하며, 이 다항식 p는 항상 주어진 n개의 점을 지난다.

• 𝑃𝑃 𝑥𝑥 = ∑𝑘𝑘 ∏𝑗𝑗≠𝑘𝑘𝑥𝑥−𝑥𝑥𝑗𝑗𝑥𝑥𝑘𝑘−𝑥𝑥𝑗𝑗

𝑦𝑦𝑘𝑘 이며,

• 다음을 항상 만족함 : 𝑃𝑃 𝑥𝑥𝑘𝑘 = 𝑦𝑦𝑘𝑘, k=1..n

예를 들어, (0,-5), (1,-6), (2,-1), (3,16) 점을 지나는 다항식은 다음과 같다.

• 𝑃𝑃 𝑥𝑥 = 𝑥𝑥−1 𝑥𝑥−2 𝑥𝑥−3−6

−5 + 𝑥𝑥 𝑥𝑥−2 𝑥𝑥−32

−6 + 𝑥𝑥 𝑥𝑥−1 𝑥𝑥−3−2

−1 + 𝑥𝑥 𝑥𝑥−1 𝑥𝑥−26

(16)

MATLAB을 통해 구해보면

31

Page 32: Lec 10. Regression Analysis

MATLAB Programming

32

Page 33: Lec 10. Regression Analysis

MATLAB Programming

1차원 보간법

yi = interp1(x, y, t, 보간방법)

• xi, yi – 데이터 쌍 (좌표값)

• t – 위의 데이터에 대해 보간(interpolate)된 그래프를 그릴 때, x축 값에

해당하는 벡터

보간 방법

• ‘nearest’ : 가장 근접한 이웃 보간

• ‘linear’ : 선형 보간 (기본값)

• ‘spline’ : 3차 스플라인 보간

• ‘pchip’ : 3차 Hermite 보간

33

Page 34: Lec 10. Regression Analysis

MATLAB Programming

각 보간법들의 차이

34

Page 35: Lec 10. Regression Analysis

MATLAB Programming

spline 이용한 보간법

주어진 데이터 점들을 지나면서 점들 사이에 부드러운 곡선을 형성

2차 미분이 연속이며, 동일한 보간 제약 조건들을 만족해야 함

다양한 방법이 있음

• 1차 스플라인: 붉은 색 선

• 2차, 3차 스플라인: 녹색선 (포물선)

spline 함수:

• 3차 스플라인

– 연속된 두 점 xi, xi+1 사이에 3차 다항식으로 생성되는 곡선으로 연결

– 각 점에서 스플라인 라인은 1차 2차 미분 가능 (즉, 구간이 부드럽게 연결)

35

Page 36: Lec 10. Regression Analysis

MATLAB Programming

spline

p = spline(x, y, t)

• 데이터 점 (x, y)가 주어지면 해당 데이터 점들을 가지고 spline 을 그림

• 데이터 점 외에 t로 주어지는 점들에 대해 spline(t) 의 값을 p로 반환

x -2 -1 0 1 2

y 0.1429 0.3333 1.0000 1.0000 0.3333

36

Page 37: Lec 10. Regression Analysis

MATLAB Programming

pchip

spline 과 거의 비슷

• 2차 미분을 갖지 않을 수도 있음 (즉, 구간이 부드럽게 연결 되지 않을 수도

있음)

spline 과 pchip 과의 차이

• spline은 overshoot 가 발생할 수 있음

– 즉, 데이터가 smooth function 모양인 경우에는 overshoot가 발생하지 않지만,

데이터가 smooth 하지 않게 배치된 경우에는 보간된 라인이 진동함

• pchip은

– 데이터가 smooth 하게 배치되지 않은 경우 overshoot 하지 않음

– spine보다 계산이 덜 복잡함

37

Page 38: Lec 10. Regression Analysis

MATLAB Programming

pchip vs. spline

38

Page 39: Lec 10. Regression Analysis

MATLAB Programming

Basic Fitting Tool 이용한 보간

39

Page 40: Lec 10. Regression Analysis

MATLAB Programming

Quiz

다음 데이터들을 spline, linear, pchip 보간법을 이용하여 그려보자. 각

그래프에 데이터 점들도 함께 표시하여 보자.

x 0 1 2 3 4 5

y 1 -0.6240 -1.4704 3.2402 -0.7363 -6.3715

40

Page 41: Lec 10. Regression Analysis

MATLAB Programming

Quiz Sol.

다음 데이터들을 spline, linear, pchip 보간법을 이용하여 그려보자. 각

그래프에 데이터 점들도 함께 표시하여 보자.

x 0 1 2 3 4 5

y 1 -0.6240 -1.4704 3.2402 -0.7363 -6.3715

41

Page 42: Lec 10. Regression Analysis

MATLAB Programming

2차원 보간법

griddata(x, y, z, X, Y, 보간 방법)

• 임의의 데이터 점에 대해 2차원 보간

• x, y, z – 입력 데이터에 대한 x, y, z 좌표값

• X, Y – 보간할 X-Y plane의 grid 좌표값

보간 방법

• ‘nearest’ : 가장 근접한 이웃 보간

• ‘linear’ : 선형 보간 (기본값)

• ‘cubic’ : 삼각형 기반 3차 보간

42

Page 43: Lec 10. Regression Analysis

MATLAB Programming

주어진 3차원 데이터의 보간

43

Page 44: Lec 10. Regression Analysis

MATLAB Programming

보간 방법에 따른 그래프의 모양 변화

“nearest” : griddata(x,y,z,X,Y, ‘nearest’) “nearest” : griddata(x,y,z,X,Y, ‘natural’)

44

Page 45: Lec 10. Regression Analysis

MATLAB Programming

보간 방법에 따른 그래프의 모양 변화

“nearest” :griddata(x,y,z,X,Y, ‘nearest’)

“natural” :griddata(x,y,z,X,Y, ‘natural’)

“linear” :griddata(x,y,z,X,Y, ‘linear’)

45

Page 46: Lec 10. Regression Analysis

MATLAB Programming

Vectorization

46

Page 47: Lec 10. Regression Analysis

MATLAB Programming

Vectorization

반복문 대신 벡터 또는 행렬 연산으로 계산하는 방법

• 프로그램 처리 속도 향상됨

각종 행렬 연산을 위해 제공되는 함수들을 최대한 사용

• find 함수 등

n = 100for i = 1:n

A(i) = B(i) + C(i);end

n = 100;A(1:n) = B(1:n) + C(1:n);

47

Page 48: Lec 10. Regression Analysis

MATLAB Programming

Vectorization

Vectorized Code와 그렇지 않은 코드의 속도 비교

• 예를 들어 𝑓𝑓 𝑥𝑥 = 𝐴𝐴 sin( ⁄𝑥𝑥 2𝜋𝜋) 를 𝑥𝑥 = 0~2𝜋𝜋 까지 계산

% no vectorization

n = 100000;A = 5;f = zeros(1,100);

tic;t = linspace(0, 2*pi, n);for i = 1:n

f(i) = A * sin(t(i)/(2*pi));endtoc;

Elapsed time is 0.027193 seconds.

% vectorization

n = 100000;A = 5;

tic;t = linspace(0, 2*pi, n);f = A * sin(t/(2*pi));toc;

Elapsed time is 0.004632 seconds.

48

Page 49: Lec 10. Regression Analysis

MATLAB Programming

Quiz

10만개의 3차원 포인트와 주어진 한 포인트 간의 유클리디언 거리를

계산하여, 가장 가까운 거리를 갖는 포인트를 찾는 코드를 반복문 (for

문)을 사용하여 작성하고, 다른 하나는 vectorized code로 작성하여

속도를 비교해 봅시다.

• 힌트:

– Vectorized Code의 경우,

• 주어진 한 포인트를 repmat 함수를 사용하여 10만 x 3 행렬 rQ로 만들고, 10만개 포인트와

rQ의 행렬 뺄셈 등을 이용하여 계산

49

Page 50: Lec 10. Regression Analysis

MATLAB Programming

Quiz

10만개의 3차원 포인트와 주어진 한 포인트 간의 유클리디언 거리를

계산하여, 가장 가까운 거리를 갖는 포인트를 찾는 코드를 반복문 (for

문)을 사용하여 작성하고, 다른 하나는 vectorized code로 작성하여

속도를 비교해 봅시다.

% no vectorization

N = 100000;D = 3;PTs = rand(N, D);Q = rand(1, D);

tic;

% 이곳에코드를작성하세요.

toc;

% vectorization

N = 100000;D = 3;PTs = rand(N, D);Q = rand(1, D);

tic;

rQ = repmat(Q, N, 1);

% 이곳에코드를작성하세요.

toc;

50

Page 51: Lec 10. Regression Analysis

MATLAB Programming

Quiz Sol.

10만개의 3차원 포인트와 주어진 한 포인트 간의 유클리디언 거리를 계산하여,

가장 가까운 거리를 갖는 포인트를 찾는 코드를 반복문 (for 문)을 사용하여

작성하고, 다른 하나는 vectorized code로 작성하여 속도를 비교해 봅시다.

% no vectorization

N = 100000;D = 3;PTs = rand(N, D);Q = rand(1, D);

tic;

D2 = zeros(N,1);for i=1:N

PT = PTs(i,:);D2(i) = sqrt(sum((Q-PT).^2));

end

[VAL2, IDX2] = min(D2)

toc;

% vectorization

N = 100000;D = 3;PTs = rand(N, D);Q = rand(1, D);

tic;

rQ = repmat(Q, N, 1);D = sqrt(sum((rQ-PTs).^2, 2));[VAL1, IDX1] = min(D)

toc;

51

Page 52: Lec 10. Regression Analysis

MATLAB Programming

find 함수 사용 시 속도

행렬에서 특정 조건을 만족하는 원소들을 찾기 위해 find 함수를 쓰는

경우와 쓰지 않는 경우의 속도 비교

% find를쓰지않는경우

N = 1000;m = rand(N);

idx = [];

tic;

for i=1:N^2if (m(i) < 0.2)

idx = [idx i];end

end

toc;

Elapsed time is 2.242514 seconds.

% find를쓰는경우

n = 1000;A = 5;

tic;

idx = find(m < 0.2);

toc;

Elapsed time is 0.002795 seconds.

52