52
회귀 분석 (Regression Analysis) 1

MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

회귀 분석 (Regression Analysis)

1

Page 2: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

회귀 분석

회귀 분석이란?

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

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

찾아내는 것

• 예를 들어

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

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

2

Page 3: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

변수 간의 관계

확정적 (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: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

회귀 분석을 통해

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

이에 대한 적합성 검증 가능

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

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

4

Page 5: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

회귀 모형

regression model

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

• 예를 들어,

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

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

5

Page 6: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

회귀 모형

확률 오차 ε (random error)

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

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

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

선형 회귀 모형 (linear regression model)

• 단순 회귀 모형 :

– Y = β0 + β1x + ε

• 다중 선형 회귀 모형 :

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

6

ε

Page 7: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

단순 회귀 모형

7

Page 8: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

단순 회귀 모형

8

Page 9: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Quiz

9

관측번호 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

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

Page 10: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Quiz Sol.

10

β0 = 14.5714, β1 = 0.9524

Page 11: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

다중 회귀 모형

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

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

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

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

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

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

• 예를 들어, Y = β0 + β1x + β2x2 + β3x

3 + ε 의 경우, x1 = x, x2=x2, x3=x3 으로

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

11

Page 12: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

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

12

Page 13: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

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

13

Page 14: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

다중 회귀 모형

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

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

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

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

14

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

대리점 번호 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

Page 15: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

다중 회귀 모형

15

대리점 번호 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

Page 16: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Quiz

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

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

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

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

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

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

16

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

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

Page 17: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Quiz Sol.

17

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

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

Page 18: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Basic Fitting Tool

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

18

Page 19: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Basic Fitting Tool

19

β0 = 14.5714, β1 = 0.9524

Page 20: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Basic Fitting Tool

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

20

Page 21: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Quiz

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

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

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

그려라.

21

x -3 -2 -1 0 1 2 3

y 0 0 1 1 0 0 -1

Page 22: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Quiz Sol.

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

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

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

22

x -3 -2 -1 0 1 2 3

y 0 0 1 1 0 0 -1

Page 23: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Quiz Sol.

polyfit을 이용하는 방법

• p = polyfit(x, y, n)

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

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

23

Page 24: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

톨게이트 통과 차량 (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: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

다항식 Fitting

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

해보자.

25

Page 26: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

다항식이 아닌 함수로 Fitting

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

더욱 잘 표현할 수 있음

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

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

26

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)

Page 27: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

다항식이 아닌 함수로 Fitting

27

데이터 plot 선형 변환 후 Fitting

Page 28: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Quiz

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

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

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

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

28

Page 29: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Quiz Sol.

29

Page 30: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

보간법 (Interpolation)

30

Page 31: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

라그랑지 보간법 (Lagrange Interpolation)

31

Page 32: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

32

Page 33: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

1차원 보간법

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

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

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

해당하는 벡터

보간 방법

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

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

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

• ‘pchip’ : 3차 Hermite 보간

33

Page 34: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

각 보간법들의 차이

34

Page 35: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

spline 이용한 보간법

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

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

다양한 방법이 있음

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

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

spline 함수:

• 3차 스플라인

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

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

35

Page 36: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

spline

p = spline(x, y, t)

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

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

36

x -2 -1 0 1 2

y 0.1429 0.3333 1.0000 1.0000 0.3333

Page 37: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

pchip

spline 과 거의 비슷

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

있음)

spline 과 pchip 과의 차이

• spline은 overshoot 가 발생할 수 있음

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

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

• pchip은

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

– spine보다 계산이 덜 복잡함

37

Page 38: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

pchip vs. spline

38

Page 39: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Basic Fitting Tool 이용한 보간

39

Page 40: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Quiz

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

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

40

x 0 1 2 3 4 5

y 1 -0.6240 -1.4704 3.2402 -0.7363 -6.3715

Page 41: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Quiz Sol.

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

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

41

x 0 1 2 3 4 5

y 1 -0.6240 -1.4704 3.2402 -0.7363 -6.3715

Page 42: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

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: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

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

43

Page 44: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

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

44

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

Page 45: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

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

45

“nearest” :

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

“natural” :

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

“linear” :

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

Page 46: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Vectorization

46

Page 47: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Vectorization

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

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

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

• find 함수 등

47

n = 100

for i = 1:n

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

end

n = 100;

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

Page 48: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Vectorization

48

% 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));

end

toc;

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.

Page 49: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Quiz

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

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

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

속도를 비교해 봅시다.

• 힌트:

– Vectorized Code의 경우,

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

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

49

Page 50: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Quiz

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

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

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

속도를 비교해 봅시다.

50

% 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;

Page 51: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

Quiz Sol.

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

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

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

51

% 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;

Page 52: MATLAB for C/C++ Programmers · 2014-01-28 · 변수 간의 관계 확정적 (deterministic) 관계 • 두 변수 사이에 수학적 공식 y = f(x) 가 성립한다는 것 •

find 함수 사용 시 속도

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

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

52

% find를 쓰지 않는 경우

N = 1000;

m = rand(N);

idx = [];

tic;

for i=1:N^2

if (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.