Download presentation
Presentation is loading. Please wait.
Published byUtami Hermanto Modified 5년 전
1
2014년 가을학기 손시운 (ssw5175@kangwon.ac.kr) 지도 교수: 문양세 교수님
벡터 2014년 가을학기 손시운 지도 교수: 문양세 교수님
2
벡터란? 사전적 의미(네이버 지식백과) R의 기본 데이터 타입
크기와 방향을 동시에 나타내는 물리량 (e.g. 변위 · 힘 · 속도 · 가속도 등) R의 기본 데이터 타입 한 개의 숫자로 이뤄진 변수인 스칼라와 다르게 취급 ‘숫자 값’ 같은 것은 존재하지 않으며, 하나의 원소를 갖는 벡터 형으로 취급 2014년 가을학기
3
벡터의 선언 (1/2) Python이나 Perl 등의 스크립트 언어와 유사하게 선언이 필요하지 않음
e.g.) 벡터 z에 한 개의 숫자(3)로 이뤄진 벡터를 연결 이전에 z에 대해 전혀 언급하지 않아도 문법적으로 완벽 c() 함수를 이용하여, 여러 개의 데이터로 이뤄진 벡터를 연결할 수 있음 2014년 가을학기
4
벡터의 선언 (2/2) 벡터의 특정 원소를 언급하고 싶다면, 그 내용을 미리 R에게 알려줘야 함
“값을 연결한다”라는 면에서, 형식의 제한 없이 변수 사용이 가능 2014년 가을학기
5
벡터의 원소 추가/삭제 벡터는 원소를 추가하거나 삭제할 수 없음 벡터의 크기는 처음 만들어 질 때 정해짐
원소를 추가/삭제하려면, 벡터를 새로 할당 e.g.) 네 개의 원소(88, 5, 12, 13) 사이에 새 원소(168)를 추가 벡터 사이에 원소를 추가하기 위해, 기존의 벡터를 나누고, 새로운 벡터와 함께 하나의 벡터로 묶어서 연결 실제로 ‘새롭게 만든’ 벡터를 x에 저장한 것 어떤 경우 이는 R의 빠른 성능을 제한하는 요인이 될 수 있음 2014년 가을학기
6
벡터의 길이 length() 함수: 벡터의 길이를 파악하는 함수
이 예에서는 x의 길이를 이미 알고 있으므로, length() 함수가 불필요 일반적인 함수 코드를 작성 시, 벡터의 길이를 구할 필요가 있음 e.g.) 벡터에서 1이 처음 나오는 위치를 찾는 함수 2014년 가을학기
7
재사용 두 벡터를 사용하는 연산을 할 때 각각의 길이가 같아야 한다면, R은 자동으로 더 짧은 쪽을 재사용하여 긴 쪽에 맞춤
짧은 벡터 (1,2,4)는 재사용돼, 실제로는 다음과 같이 수행 2014년 가을학기
8
일반 벡터 연산 (1/5) 벡터의 산술 및 논리 연산 R은 함수형 언어 R에서 사용되는 산술 및 논리 연산도 실제로는 함수
벡터 간의 산술 연산은 각 원소 단위로 진행 2014년 가을학기
9
일반 벡터 연산 (2/5) 벡터 인덱싱 vector1[vector2]: vector1에서 vector2의 인덱스에 해당하는 원소를 추출 벡터의 인덱스를 음수로 표시하는 것은 해당 위치의 원소를 제거하고 반환 2014년 가을학기
10
일반 벡터 연산 (3/5) 콜론(:) 연산자를 통한 벡터 생성 콜론(:) 연산자는 일정 범위의 숫자로 이뤄진 벡터를 생성
주의해야 할 점은, 콜론(:)이 산술 연산자보다 우선 순위가 높다는 것 기타 연산자 우선 순위는 ?Syntax 명령어를 통해 확인 2014년 가을학기
11
일반 벡터 연산 (4/5) seq()를 이용해 벡터 순서 생성
seq() 함수는 빈 벡터를 처리할 때 유용하게 사용 (p.6 함수의 오류를 해결) 2014년 가을학기
12
일반 벡터 연산 (5/5) rep()을 이용해 숫자 반복 벡터 생성 rep() 함수: 긴 벡터에 쉽게 같은 숫자를 채움
rep(x, times)로 호출 시, times * length(x) 개의 원소로 채워진 벡터가 생성 each 인수: x를 복사해 사이사이에 끼워 넣음 2014년 가을학기
13
all() 함수와 any() 함수 사용 all() 함수: 모든 인자의 값이 TRUE가 맞는지 확인
any() 함수: 하나 이상의 값이 TRUE가 맞는지 확인 2014년 가을학기
14
벡터화 연산 벡터에 함수를 적용할 경우, 실제로는 내부의 원소에 각각 함수가 적용됨 연산자 “>”는 벡터화 함수
따라서, 두 벡터에서 각 원소를 비교하여 결과를 추출 2014년 가을학기
15
NA와 NULL값 NA: 존재하지만 불확실한 값 NULL: 존재하지 않으며 답이 없는 경우
많은 R의 통계 함수에서 NA는 건너뛰고 실행되도록 할 수 있음 NULL: 존재하지 않으며 답이 없는 경우 반복문에서 매번 원소를 추가해가며 벡터를 생성할 때 사용 2014년 가을학기
16
필터링 (1/3) 벡터에서 특정한 어떤 조건을 만족하는 원소들을 추출 필터링된 인덱스 생성
z의 제곱 값이 8보다 큰 원소를 찾아 w에 연결 2014년 가을학기
17
필터링 (2/3) subset() 함수로 필터링 subset() 함수와 기존 필터링 방식의 차이는 NA 처리 여부
2014년 가을학기
18
필터링 (3/3) 선택 함수 which() 해당 조건을 만족하는 원소들의 위치(인덱스)만 찾는 함수
which() 함수를 통해 p.6 함수를 간결하게 나타낼 수 있음 2014년 가을학기
19
벡터화된 조건문: ifelse() 함수 ifelse(b, u, v)
2014년 가을학기
20
벡터 원소의 이름 names() 함수: 벡터의 원소들에 이름을 지정
이름이 지정된 벡터의 원소는, 원소의 이름을 인덱스로 사용 가능 벡터 원소의 이름에 NULL을 지정해 이름을 삭제 가능 2014년 가을학기
21
확장 예제: 기상데이터 예측 결과 분석 (1/6) 매 시간 단위마다 0 또는 1의 값을 갖는 데이터가 있다고 가정
해당 시간에 비가 올 경우 1, 비가 오지 않을 경우 0 지난 k일의 기상 기록을 기반으로 내일의 날씨를 예측 다수결의 원칙으로 k일 중, 반 이상이 비가 왔을 경우 내일은 비가 온다고 예측 e.g. 3일간의 데이터가 1, 0, 1일 경우 다음 값은 1이라고 예측 신뢰성 높은 k값을 계산하기 위한 함수를 구현하는 것이 목표 데이터와 k를 입력 받아, 이 때의 오차율을 계산하는 함수 e.g. k가 3일 경우, 7번의 예측 중 3회 오류 발생 오차율=3/7 시간 1 2 3 4 5 6 7 8 9 10 데이터 예측값 NA 결과 X O 2014년 가을학기
22
확장 예제: 기상데이터 예측 결과 분석 (2/6) 함수 생성 데이터의 길이와 k의 절반 값을 변수에 저장
매개 변수는 데이터 값(x)과 예측에 사용될 k값 데이터의 길이와 k의 절반 값을 변수에 저장 빈번히 사용될 값을 변수에 저장하여, 벡터 생성을 최소화 predict <- function(x, k) { } predict <- function(x, k) { n <- length(x) k2 <- k/2 } 2014년 가을학기
23
확장 예제: 기상데이터 예측 결과 분석 (3/6) 예측 값이 저장될 벡터 생성 데이터의 누적합을 계산
전체 길이에서 예측하지 않는 기존 데이터 k개는 제외 데이터의 누적합을 계산 cumsum() 함수: 누적합을 계산 첫 번째 인덱스를 고려하여 누적합의 벡터는 0부터 시작하도록 고정 predict <- function(x, k) { n <- length(x) k2 <- k/2 pred <- vector(length=n-k) } predict <- function(x, k) { n <- length(x) k2 <- k/2 pred <- vector(length=n-k) csx <- c(0, cumsum(x)) } 2014년 가을학기
24
확장 예제: 기상데이터 예측 결과 분석 (4/6) k개의 원소가 시작하는 부분과 끝나는 부분에서 누적합의 차이를 계산
predict <- function(x, k) { n <- length(x) k2 <- k/2 pred <- vector(length=n-k) csx <- c(0, cumsum(x)) for (i in 1:(n-k)) { pred[i] <- ifelse(csx[i+k]-csx[i] >= k2, 1, 0) } 시간 1 2 3 4 5 6 7 8 9 10 데이터 csx pred 2014년 가을학기
25
확장 예제: 기상데이터 예측 결과 분석 (5/6) 예측값과 실제값을 비교 두 값의 차에 대한 절대값이 1일 경우 오류
abs() 함수: 절대값 계산 따라서 절대값의 평균이 오차율 mean() 함수: 평균 계산 predict <- function(x, k) { n <- length(x) k2 <- k/2 pred <- vector(length=n-k) csx <- c(0, cumsum(x)) for (i in 1:(n-k)) { pred[i] <- ifelse(csx[i+k]-csx[i] >= k2, 1, 0) } return(mean(abs(pred-x[(k+1):n]))) 2014년 가을학기
26
확장 예제: 기상데이터 예측 결과 분석 (6/6) 적용 결과 결과 값이 3/7 (=0.4285714)임을 확인
2014년 가을학기
27
과제 #1 기상데이터 예측에서 최소 오차율의 k값 계산 제출 방법 앞의 확장 예제에서 오차율을 계산하는 함수를 다룸
k값이 1부터 length(x)/2의 범위에서 최소 오차율의 k 값을 계산하는 함수 작성 데이터는 임의의 값으로 20개 이상 생성하여 진행 제출 방법 과제는 제출 제목 양식: [학번][이름]HW#1 과제에 사용한 데이터, 함수 실행 과정 및 결과 값을 캡쳐 작성한 함수의 소스코드를 함께 포함하여 제출 제출 기한은 다음 주 수업시간 전까지이며, 그 후에 제출할 경우 20% 감점 2014년 가을학기
Similar presentations