기본 콘텐츠로 건너뛰기

[ML] 결정트리(Decision Tree) 모델

R 수학과 통계등의 내장함수들

내용

데이터 관리를 위한 함수들과 제어문

함수들

수학함수

수학함수
함수설명
abs(x) 절대값반환
abs(-4) → 4.
sqrt(x) 제곱근,
sqrt(25) → 5 &eqiv; 25^(0.5).
ceiling(x) x보다 작지않은 가장 작은 정수
ceiling(3.21) → 4
floor(x) x보다 크지않은 가장 큰 정수
floor(3.21) → 3
trunc(x)x의 값 중 숫점 이하의 값을 버림으로서 형성된 정수
trunc(3.21) → 3
round(x, digits=n) x의 지정한 자릿수+1 에서 반올림
round(3.475, digits=2) → 3.48.
signif(x, digits=n ) x를 지정된 유효 자릿수로 반올림
signif(3.475, digits=2) → 3.5.
cos(x) , sin(x) , tan(x) Cosine, sine, and tangent
cos(2) → -0.416.
acos(x) , asin(x) , atan(x) 삼각함수의 역함수, arc-cosine, arc-sine, and arc-tangent
acos(-0.416) → 2.
cosh(x) , sinh(x) , tanh(x) 쌍곡선 함수인 hyperbolic cosine, sine, and tangent
sinh(2) → 3.627.
acosh(x) , asinh(x) , atanh(x)Hyperbolic arc-cosine, arc-sine, and arc-tangent
asinh(3.627) → 2.
log(x, base=n)밑수가 a인 로그함수
log(10, 2) = log(10)/log(2) \→ 3.321928
log(x)자연로그함수
log(10) → 2.3026.
log10(x)상용로그함수
log10(10) → 1.
exp(x)지수함수=$e^x$
exp(2.3026) → 10.00015

위의 함수들은 원자형(atomic type)에 작동되므로 벡터, 행렬, 배열에 적용됩니다.
exp(c(1,2,4))
[1]  2.718282  7.389056 54.598150
x<-matrix(1:4, ncol=2);x
     [,1] [,2]
    [1,]    1    3
   [2,]    2    4
log(x)
          [,1]     [,2]
  [1,] 0.0000000 1.098612
  [2,] 0.6931472 1.386294

통계함수

일반적으로 대부분의 통계함수는 매개변수를 포함합니다. 예를 들어 다음은 평균을 계산하는 함수입니다.
mean(x):
객체 x이 산술평균을 반환
mean(x, trim=0.05, na.rm=TRUE)
객체 x의 상위와 하위 각각 5%에 해당하는 값들을 삭제하고 평균을 계산하는 trim mean을 반환, na.rm은 결측치 제거를 선택하는 매개변수.
통계함수
함수설명
mean(x)평균
mean(c(1,2,3,4)) →2.5.
median(x) 중간값
median(c(1,2,3,4)) →2.5.
sd(x) 표준편차
sd(c(1,2,3,4)) →1.29.
var(x) 분산
var(c(1,2,3,4)) →1.67.
mad(x) Median absolute deviation
mad(c(1,2,3,4)) →1.48.
quantile(x, probs) 객체 x를 백분위수로 정렬할 경우 지정된 위치(probs)의 값(들)을 반환, probs의 범위 [0, 1]
30, 84번째의 값들, y <- quantile(x, c(.3,.84))
range(x)객체의 범위
range(c(1,2,3,4)) → c(1,4).
sum(x)
sum(c(1,2,3,4)) → 10.
diff(x, lag=n) 지정된 간격(n)의 값들의 차이를 계산, lag의 기본값은 1
x<- c(1, 5, 23, 29); diff(x) → c(4, 18, 6). : 5-1, 23-5,...
diff(x, 2) → 22 24: 23-1, 29-5
min(x) 최소값
min(c(1,2,3,4)) → 1.
max(x) 최대값
max(c(1,2,3,4)) → 4.
scale(x, center=TRUE, scale=TRUE)객체를 표준화합니다. center = mean, scale=sd
표준화의 예 참조

표준화는 데이터들을 평균 0, 표준편차가 1이 되도록 이동시킨 것으로 그 결과를 z-score라고 합니다. $$\text{z-score}=\frac{x-\mu}{\sigma}$$ scale() 함수를 사용하여 표준화합니다. 이 함수는 수치형인 벡터, 배열, 데이터 프레임 등에서 작동됩니다.
x<-sample(1:100, 15); x
[1] 95 84 55 90 91 53 49 60 42  1 14 73 43 31 89
scale(x, center=FALSE, scale=TRUE) 
           [,1]
 [1,] 1.42390452
 [2,] 1.25903137
⋮
[14,] -0.92773098
[15,]  1.06517261
attr(,"scaled:center") #=mean
[1] 58
attr(,"scaled:scale") #=sd
[1] 29.10326
mean(x)
[1] 58
sd(x)
[1] 29.10326
위 표준화된 결과는 평균이 0, 표준편차가 1입니다. 이 데이터를 평균이 10, 표준편차가 1.2인 세로운 데이터 셋을 생성한다고 가정하면 표준화 식을 역으로 적용하면 됩니다. $$x=\text{z-score}*\sigma+\mu$$ 위 객체 x가 data.frame 형식일 경우 위 식에 의해 계산된 값들을 새로운 열에 첨가할 수 있습니다. 이 작업은 transform()함수를 사용할 수 있습니다.
x<-data.frame(data=sample(1:100, 15)); head(x)
  data
1   34
2   86
3   20
4    6
5   63
6   16
new<-scale(x)*1.2+10;head(new)
         data
[1,]  9.469190
[2,]  8.827081
[3,] 11.438324
[4,]  7.928129
[5,]  9.982877
[6,] 10.881829
x<-transform(x, new=new);head(x) 
  data    data.1
1   34  9.469190
2   86  8.827081
3   20 11.438324
4    6  7.928129
5   63  9.982877
6   16 10.881829

확률함수

R에서 확률함수는 다음 형태를 취합니다.
[ dpqr] distributtion 의 약어()
  • d=확률 분포 함수(Probability distribution function)
  • p=누적확률분포함수(Cumulative probability distribution function)
  • q=백분위수 함수(quantile function)
  • r=랜덤 발생(random generation, random deviates)
다음은 R에서 제공하는 확률분포이름과 그 약어입니다.
확률분포
함수약어함수약어
Beta beta Logistic logis
Binomial binom Multinomial multinom
Cauchy cauchy Negative binomial nbinom
Chi-squared (noncentral) chisq Normal norm
Exponential exp Poisson pois
F f Wilcoxon Signed Rank signrank
Gamma gamma T t
Geometric geom Uniform unif
Hypergeometric hyper Weibull weibull
Lognormal lnorm Wilcoxon Rank Sum wilcox
위 통계함수들의 작동 방식을 살표보기 위해 정규 분포와 관련된 함수들을 실행해 봅니다.


평균과 표준 편차를 지정하지 않으면 표준 정규 분포가 가정됩니다(평균=0, sd=1). 밀도(dnorm), 분포(pnorm), 분위수(qnorm) 및 무작위 편차 생성(rnorm) 함수의 결과는 다음과 같습니다.

x<-pretty(c(-3, 3), 30)
y<-dnorm(x)
plot(x, y, type="l", xlab="Normal Deviate", ylab="Density", yaxs='i')
z-score 1.96까지의 표준정규분포의 면적을 계산하기 위해 접두어 'p'를 적용합니다.
pnorm(1.96)
[1] 0.9750021
평균이 500이고 표준 편차가 100인 정규 분포의 90번째 백분위수 값은 얼마입니까?
qnorm(0.9, mean=500, sd=100)
[1] 628.1552
평균이 50이고 표준 편차가 10인 임의의 정규 편차 50개를 생성합니다.
rnorm(50, mean=50, sd=10)
[1] 50.76424 40.82784 43.02894 59.34081 52.01408 64.51677 44.30565 42.01822
…
[49] 50.35609 35.42057
위의 난수(랜덤수)생성은 코드 실행시마다 다른 수가 반환됩니다. 결과의 재현을 이루기 위해 set.seed()함수를 사용합니다. 다음은 균일분포를 따르는 랜덤수 5개를 생성합니다.
runif(5)
[1] 0.3926972 0.8138806 0.3762485 0.3808122 0.2649184
set.seed(12)
runif(5)
[1] 0.06936092 0.81777520 0.94262173 0.26938188 0.16934812
set.seed(12)
runif(5)
[1] 0.06936092 0.81777520 0.94262173 0.26938188 0.16934812
위와 같이 set.seed() 함수에 의해 생성된 난수를 고유객체로 등록하는 효과를 가집니다. 즉, 난수의 재현을 보장할 수 있습니다. 시뮬레이션 연구와 몬테카를로 연구에서는 종종 주어진 평균 벡터와 공분산 행렬을 사용하여 다변량 정규 분포에서 데이터를 추출하려고 합니다. MASS 패키지mvrnorm() 함수는 이것을 쉽게 해줍니다. 함수 호출은
mvrnorm(n, mean, sigma)
n: 난수의 크기, mean: 평균 벡터, sigma: 분산-공분산 행렬 또는 상관관계 행렬
다음은 세그룹에 대한 평균과 공분산 행렬에 따르는 샘플들을 추출합니다.
library(MASS)
options(digits=3)
set.seed(1)
mu<- c(230.7, 146.7, 3.6)
std<- matrix(c(15360.8, 6721.2, -47.1, 6721.2, 4700.9, -16.5, -47.1, -16.5, 0.3), nrow=3, ncol=3)
da1 <- mvrnorm(500, mu, std) 
da1 <- as.data.frame(da1)
names(da1) <- c("y","x1","x2")
dim(da1) 
[1] 500   3
head(da1)
    y    x1   x2
1 155 106.9 4.25
2 248 167.8 4.00
3 108 137.7 3.75
4 427 241.0 3.10
5 288 132.2 3.36
6 156  43.3 3.03
sapply(da1, mean)
    y    x1    x2
232.7 149.6   3.6 
cov(da1)
        y     x1      x2
y  15575.5 6971.6 -49.278
x1  6971.6 5104.0 -16.164
x2   -49.3  -16.2   0.321
위의 샘플들에 대한 평균과 공분산행렬의 결과는 원시데이터의 값과 차이를 발생합니다. 다음은 smpling 수를 10000으로 증가시킨 결과로 원시데이터에 근접함을 나타냅니다.
set.seed(2)
da2 <- mvrnorm(10000, mu, std)  
da2<-as.data.frame(da2)
sapply(da2, mean)
   V1    V2    V3 
232.0 147.4   3.6
cov(da2)
        V1     V2      V3
V1 15414.7 6657.4 -47.444
V2  6657.4 4670.4 -16.389
V3   -47.4  -16.4   0.302

문자함수

수학 및 통계 함수는 숫자 데이터에서 작동하지만 문자 함수는 텍스트 데이터에서 정보를 추출하거나 인쇄 및 보고를 위해 텍스트 데이터의 형식을 다시 지정합니다. 다음은 문자에 사용되는 주요함수 입니다.
문자함수
함수설명
nchar(x) 객체 x의 문자의 수를 반환
nchar('string') → 6
substr(x, start, stop )문자 벡터의 부분을 추출 또는 대체 합니다.
x <- "abcdef"
substr(x, 2, 4)
[1] "bcd"
substr(x, 2, 4)<-"2222"
x
[1] "a222ef"
grep(pattern, x, ignore.case=FALSE, fixed=FALSE) x에서 패턴을 검색합니다. fixed=FALSE이면 pattern은 정규식입니다. fixed=TRUE이면 pattern은 텍스트 문자열입니다. 일치하는 인덱스를 반환합니다.
grep("A", c("b","A","c"), fixed=TRUE) → 2
sub(pattern, replacement, x, ignore.case=FALSE, fixed=FALSE)x의 패턴을 결정하고 지정된 문구(replacement)로 대체합니다. fixed=FALSE이면 정규식, TRUE이면 패턴은 문자열입니다.
sub("\\s",".", "hello there") 
[1] "hello.there"
"\s"는 빈칸(whitespace)를 나타내는 정규식이며 R에서 "\"는 escape 문자이므로 "\\s"으로 나타냄
strsplit(x, split, fixed=FALSE) 문자형 벡터 x의 요소를 기준(split)에 따라 분할합니다. fixed=FALSE 이면 기준이 정규식이며 TRUE이면 문자(열)입니다. 결과는 list입니다.
y <- strsplit("abc", "")
class(y)
[1] "list"
y
[[1]]
[1] "a" "b" "c"
unlist(y)
[1] "a" "b" "c"
unlist(y)[2]
[1] "b"
sapply(y,'[', 2)
[1] "b"
paste(..., sep="") sep 문자열을 사용하여 문자열을 분리한 후 문자열을 연결합니다.
paste("x", 1:3, sep="_")
[1] "x_1" "x_2" "x_3"
paste("오늘 날짜:", date()) 
[1] "오늘 날짜: Sun Oct  9 13:22:17 2022"
toupper(x) 알파벳 대문자로 전환
toupper("abc") → “ABC”.
tolower(x) 알파벳 소문자로 전환
tolower("ABC") → “abc”
함수 grep(), sub(), strsplit() 함수는 텍스트 문자열(fixed=TRUE) 또는 정규식(fixed=FALSE)(기본값은 FALSE)을 검색할 수 있습니다.(정규식 참조)

유용한 함수들

R의 대부분의 객체에 적용되는 유용한 함수들입니다.
유용한 함수
함수설명
length(x)객체 x의 길이
Lx <- c(2, 5, 6, 9) length(x) [1] 4
seq(from, to, by) 수열생성
seq(1,10,2)
[1] 1 3 5 7 9
rep(x, n) x를 n번 반복
> rep(1:3, 2)
[1] 1 2 3 1 2 3
rep(1:3, each=2)
[1] 1 1 2 2 3 3
cut(x, n) 연속변수를 범주화하는 것으로 x를 n 수준의 인수로 나눕니다. 순서가 지정된 요소를 생성하려면ordered_result = TRUE 옵션을 포함합니다.
x<-rnorm(100)
y<-cut(x, 10) #10구간으로 그룹화 
y[1:4]
[1] (1.67,2.16]     (-1.18,-0.708]  (-2.14,-1.66]   (-1.66,-1.18]  
y2<-cut(x, -3:3, ordered_result=TRUE) #n을 벡터로 제시하므로서 소구간을 설정
levels(y2)
[1] "(-3,-2]" "(-2,-1]" "(-1,0]"  "(0,1]"   "(1,2]"   "(2,3]"  
table(y2) #각 구간의 빈도수를 반환 
y2
(-3,-2] (-2,-1]  (-1,0]   (0,1]   (1,2]   (2,3]
      2      13      33      37      12       3
pretty(x, n)중단점을 만듭니다. 동일한 간격의 반올림 값 n+1을 선택하여 연속 변수 x를 n 간격으로 나눕니다. 플로팅에 자주 사용됩니다.
cat(… , file ="myfile", append =FALSE)객체를 연결합니다.
firstname <- c("Jane")
cat("Hello" , firstname, "\n")
Hello Jane 
위 마지막 부분에서 나오는 escape 문자의 경우 '?Quotes'를 참조합니다.

댓글

이 블로그의 인기 게시물

[Linear Algebra] 유사변환(Similarity transformation)

유사변환(Similarity transformation) n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사행렬(similarity matrix)이 되며 행렬 A를 가역행렬 P와 B로 분해하는 것을 유사 변환(similarity transformation) 이라고 합니다. $$\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B $$ 식 2는 식 1의 양변에 B의 고유값을 고려한 것입니다. \begin{align}\tag{식 2} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align} 식 2의 행렬식은 식 3과 같이 정리됩니다. \begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \textsf{det}(I)\end{aligned}\end{align} 유사행렬의 특성 유사행렬인 두 정방행렬 A와 B는 'A ~ B' 와 같

[matplotlib] 히스토그램(Histogram)

히스토그램(Histogram) 히스토그램은 확률분포의 그래픽적인 표현이며 막대그래프의 종류입니다. 이 그래프가 확률분포와 관계가 있으므로 통계적 요소를 나타내기 위해 많이 사용됩니다. plt.hist(X, bins=10)함수를 사용합니다. x=np.random.randn(1000) plt.hist(x, 10) plt.show() 위 그래프의 y축은 각 구간에 해당하는 갯수이다. 빈도수 대신 확률밀도를 나타내기 위해서는 위 함수의 매개변수 normed=True로 조정하여 나타낼 수 있다. 또한 매개변수 bins의 인수를 숫자로 전달할 수 있지만 리스트 객체로 지정할 수 있다. 막대그래프의 경우와 마찬가지로 각 막대의 폭은 매개변수 width에 의해 조정된다. y=np.linspace(min(x)-1, max(x)+1, 10) y array([-4.48810153, -3.54351935, -2.59893717, -1.65435499, -0.70977282, 0.23480936, 1.17939154, 2.12397372, 3.0685559 , 4.01313807]) plt.hist(x, y, normed=True) plt.show()

R 미분과 적분

내용 expression 미분 2차 미분 mosaic를 사용한 미분 적분 미분과 적분 R에서의 미분과 적분 함수는 expression()함수에 의해 생성된 표현식을 대상으로 합니다. expression expression(문자, 또는 식) 이 표현식의 평가는 eval() 함수에 의해 실행됩니다. > ex1<-expression(1+0:9) > ex1 expression(1 + 0:9) > eval(ex1) [1] 1 2 3 4 5 6 7 8 9 10 > ex2<-expression(u, 2, u+0:9) > ex2 expression(u, 2, u + 0:9) > ex2[1] expression(u) > ex2[2] expression(2) > ex2[3] expression(u + 0:9) > u<-0.9 > eval(ex2[3]) [1] 0.9 1.9 2.9 3.9 4.9 5.9 6.9 7.9 8.9 9.9 미분 D(표현식, 미분 변수) 함수로 미분을 실행합니다. 이 함수의 표현식은 expression() 함수로 생성된 객체이며 미분 변수는 다음 식의 분모의 변수를 의미합니다. $$\frac{d}{d \text{변수}}\text{표현식}$$ 이 함수는 어떤 함수의 미분의 결과를 표현식으로 반환합니다. > D(expression(2*x^3), "x") 2 * (3 * x^2) > eq<-expression(log(x)) > eq expression(log(x)) > D(eq, "x") 1/x > eq2<-expression(a/(1+b*exp(-d*x))); eq2 expression(a/(1 + b * exp(-d * x))) > D(eq2, "x") a * (b * (exp(-d * x) * d))/(1 + b