1
2
3
4
5
dbinom(3,10,0.1) # 확률질량함수
dbinom(3.3,10,0.1)
Warning message:
In dbinom(3.3, 10, 0.1) : non-integer x = 3.300000
# ↑확률질량함수이기 때문에 연속형일때는 연산불가

cs


d함수 :

x가 특정 값 하나일때만 됨

P(X=x) 확률 계산 : dbinom(x, size, prob)


- 확률질량함수 또는 확률밀도함수 제공
- 확률변수 x가 x일때의 매칭되는 y값(확률) 제공

- ex) dbinom, dnorm, dt ......
       dbinom( ) 함수 : 이항분포의 확률값

p함수 :
P(X<=x) 확률 계산 : pbinom(x, size, prob, lower.tail= TRUE )
P(X>x) 확률 계산 : pbinom(x, size, prob, lower.tail= FALSE)


- P(X<=x) 값 제공 # n회 이하일 때의 확률
- ex) pbinom, pnorm, pt......

pbinom( ) 함수 : 이항분포의 누적확률값

q함수 :
가설검정시 중요한 함수


- P(X<=x) = p를 갖는 x 값 출력
- 이항분포에서 성공횟수가 몇 회 이하일 확률이 50%일까?
- ex) qbinom, qnorm, qt......
       qbinom( ) 함수 : 이항분포의 백분위수



1
2
3
4
5
6
7
8
9
# 이항분포 테스트
# 1. n=10, p=0.1인 이항분포 출력
dbinom(0, 10, 0.1) # P(X=0)
dbinom(1, 10, 0.1) # P(X=1)
dbinom(2, 10, 0.1) # P(X=2)
 
p1 <- dbinom(0:10, 10, 0.1) # P(X=x), 0 <= x <= 10
dev.new()
plot(0:10, p1, type='l')
cs




1
2
3
4
5
6
7
8
9
# 2. 위의 이항분포에서 성공횟수가 2회 이하일 확률(P(x<=2))
# => 0회,1회,2회 성공할 확률의 합
# => P(X=0) + P(X=1) + P(X=2)
dbinom(0, 10, 0.1) + dbinom(1, 10, 0.1) + dbinom(2, 10, 0.1)
pbinom(2,10,0.1) # n회 이하일때의 확률
 
plot(0:10, p1, type='l')
abline(v=2) # 수직선
abline(h=0) # 수평선
cs




1
2
3
4
5
6
7
8
9
10
# (0,0), (0,f(0)), (1,f(1)), (2,f(2)), (2,0)
# 3. polygon(vector_x, vector_y) #주어진 점을 연결(도형생성)
 
f <- function(x) {
  dbinom(x, 10, 0.1)
}
 
polygon(c(0, 0, 1, 2, 2),
        c(0, f(0),f(1), f(2), 0),
        col = 'red')
cs




1
2

# 4. P(X<=a) = p 인 값 찾기
qbinom(0.8, 10, 0.1)
[1] 2
cs


1
2
3
4
5
6
7
8
9
10
11
12
# 5. P(X<=a) = 0.8을 만족하는 임계값(a) 시각화
dev.new()
par(mar=c(5,3,1,1))
plot(0:10, p1, type='l', ylim = c(-0.05,0.5), ann=F, axes=F)
axis(2, ylim = c(-0.05,0.5))
abline(h=0) # 수평선
 
polygon(c(0, 0, 1, 2, 2),
        c(0, f(0),f(1), f(2), 0),
        col = 'red')
text(1,0.2,'80%')
arrows(2, -0.5, 2, 0, length = 0.1) #화살표 그리기
cs



[정규분포]


- 확률변수 x와 그 확률과의 관계가 종모양을 띄는 경우(평균을 중심으로 좌우대칭)
- 이항분포가 정규분포가 될 수도 있음
- 평균과 표준편차로 분포의 모양을 결정
- 확률의 총합이 1


[표준정규분포]


- 평균으로 뺀 값을 표준편차로 나눈 표준화된 값이 가지는 분포 X~N(0,1)
- 해당 확률 변수를 평균으로 나누고 그것의 표준편차로 나눠주는 작업
- 어떤 정규분포든 표준화시키면 평균이 0, 분산이 1
- 모든 정규분포는 표준정규분포로 변환 가능



1
2
3
4
5
6
7
8
9
10
11
# 정규분포 그리기
x1 <- seq(-3,3,0.01)
y1 <- dnorm(x1,0,1)
 
dev.new()
plot(x1, y1, type= 'l', col = 'red', ann = F, axes = F)
abline(h=0)
abline(v=0, lty=2) # lty=2 : 점선
text(0, 0, '0', cex=0.8)
text(-3, 0, '-3', cex=0.8)
text(3, 0, '3', cex=0.8)
cs



'R > 통계' 카테고리의 다른 글

이항분포  (0) 2019.02.07


[ 이항 분포 ]


베르누이 시행 시 성공할 확률이 각 반복마다 동일할때
성공한 횟수(확률변수)가 취할 수 있는 확률분포를 이항분포라 정의함
X ~ B(n,p)



1. 이항분포 test
동전 던지는 시행을 10회 반복, 앞면이 나오는 사건,
각 확률변수가 취하는 분포 확인

n <- 10

p <- 0.5
FFFFFFFFF => 0.5 * 0.5 * 0.5 * ......
P(X=0) = 10C0 * (0.5)^0 * (0.5)^10 = choose(10,0) * (0.5)^0 * (0.5)^10
P(X=1) = 10C1 * (0.5)^1 * (0.5)^9 = choose(10,1) * (0.5)^1 * (0.5)^9
HFFFFFFFFF = (0.5)^1 * (0.5)^9
FHFFFFFFFF =
FFHFFFFFFF
.....

P(X=4) = choose(10,4) * (0.5)^4 * (0.5)^6



1
2
3
4
5
6
7
8
# 이항분포의 확률 밀도함수를 사용한 확률 계산
dbinom(4,size = 10, prob = 0.5)  # 10회중 4번 성공할 확률
b1 <- dbinom(0:10,size = 10, prob = 0.5) 
 
# 이항분포의 시각화
dev.new()
barplot(b1)
plot(b1, type = 'l')
cs




1
2
3
4
5
6
7
8
9
10
11
12
13
# n의 변화에 따른 이항분포 비교
p <- 0.3
x1 <- 0:5
x2 <- 0:10
x3 <- 0:30
 
p1 <- dbinom(x1,5,p)
p2 <- dbinom(x2,10,p)
p3 <- dbinom(x3,30,p)
 
plot(x3, p3, type = 'l', col = 'black', ylim = c(0,0.4))
lines(x2, p2, type = 'l', col = 'blue', ylim = c(0,0.4))
lines(x1, p1, type = 'l', col = 'red', ylim = c(0,0.4))

cs



※ 이항분포는 시행횟수를 크게하면 정규분포에 근사하다.


'R > 통계' 카테고리의 다른 글

정규분포  (0) 2019.02.07

# decision tree in R - iris data 분류 분석


install.packages('rpart')

install.packages('doBy)

library(rpart)
library(doBy)



# 1. data sampling : train data set, test data set 분리

# 1-1) 그룹번호 할당을 통한 샘플링
sample(1:5, -- 원본 데이터
       30,  -- sample size
       replace = T) -- 원본 데이터 수 < sample size 인 경우 반드시 필요

result <- sample(1:2, size = nrow(iris), replace = T,
                 prob = c(0.7,0.3)) # prob : 확률로 1이 조금 더 많이 선택되도록 출력하는것 뿐,
                                          정확히 7:3비율로 분리되지는 않는다. 정확히 분류하기 위해선 size라는 변수를 사용해야 함



train <- iris[result == 1,]
test <- iris[result == 2,]

# 1-2) row 번호 할당을 통한 샘플링

sn <- sample(nrow(iris), size = nrow(iris) * 0.7)
train2 <- iris[sn, ]
test2 <- iris[-sn, ]

# 1-3) sampleBy 함수를 이용한 균등 샘플링

train3 <- sampleBy(~Species, frac = 0.7, data = iris)

strsplit('virginica.129','\\.')[[1]][2]

# 균등 샘플링 여부 확인 : 종별 균등 샘플링
table(train$Species)
table(train2$Species)
table(train3$Species)


# 2. 모델 생성
m <- rpart(Species ~ . , # fomula : Y ~ X
           data=train)   # 모델 학습에 필요한 데이터 셋

m$cptable # cp: 직접적으로 가지치기를 수행하는 매게변수로
                     모델마다 cp값이 달라지므로 확인하면서 튜닝 필요

m$control # control: 현재 모델에 적용된 모든 매게변수의 기본값 확인
# minsplit: split할수있는 최소 split의 기준

# 2-1) 모델의 매개변수의 변경
m <- rpart(Species ~ . ,
           data=iris,
           control = rpart.control(minbucket = 2))


# 3. 모델 평가


# 3-1) 새로운 데이터 셋(test)에 대한 예측력 확인
val_var <- predict(m, newdata=test, type="class")
val_var == test$Species

# 모델의 평가점수 = TRUE 개수/TEST DATA의 전체건수 * 100
sum(val_var == test$Species)/nrow(test) * 100  # 95.55556

# 3-2) overfit(과대적합) 확인 : train set score >>> test set score

val_var <- predict(m, newdata=train, type="class")
val_var == train$Species

# 모델의 평가점수 = TRUE 개수/TEST DATA의 전체건수 * 100
sum(val_var == train$Species)/nrow(train) * 100  # 96.19048


# 4. 모델을 통한 예측


new_data <- data.frame(Sepal.Length = 5, Sepal.Width = 3,
                       Petal.Length = 1, Petal.Width = 0.3)

predict(m, newdata=new_data, type="class")


# 5. 모델 시각화

dev.new()
plot(m)



'R > 분석' 카테고리의 다른 글

중간정리  (0) 2019.01.18

1. 기계 학습의 분류

 

- 지도 학습: 예측하고자 하는 값(Y, 종속변수)이 반드시 필요

 1) 회귀분석

    - Y가 연속형인 경우

           - 통계적 가설에 의한 모델

            (아버지의 키로 아들의 키 유추, 부동산 가격 변화 추이 등 정확한 수치 예측)

           - R-square, p-value ... 모델을 평가하는 통계량 제시(해석필요)

           - 인과관계 파악 가능 : 회귀식 추정을 통한 회귀계수 확인 가능

             Y = a1*1 + a2*2 + .... + an*n + b (n개의 설명변수)

 

 2) 분류분석

    - Y가 범주형인 경우

           - 통계적 가설이 필요 없음

           - 통계적 모델 평가 기법 불가 => 검정데이터를 사용한 모델의 평가

           - 단점* : 트리기반 모델을 제외하고는 대부분 black box 모델

             => 모델 내부 확인 불가능

             => 인과관계 파악 불가

           - 때에 따라 연속형Y값을 예측가능하게 하는 분류 알고리즘 존재

 

- 비지도 학습: 예측하고자 하는 값이 없이 데이터를 세분화 하거나 연관성 파악

 1) 군집분석: 거리기반

 2) 연관분석

 

 

분석의 단계

1. 목적

  - ex) 학원 이탈생을 예측해보자(지도학습)

2. 데이터 수집 : 종속변수가 포함된 데이터 필요(지도학습일 경우),

                또한 종속변수에 영향을 미칠만한 발생 가능한 모든 데이터의 수집 필요

  - ex) 학원을 이탈하는 요인 수집

3. 기본적 데이터 전처리

  - NA, NULL 처리

  - 필요 데이터의 추출 및 치환

  - 구간분할 : 연속형 변수의 factor(연속형data에 대해, 범주형data를 만드는 작업)

               ex) 성적을 상중하 그룹으로 분류해서 모델에 적용

4. feature selection(변수의 선택)

  - 경험적 선택(전문가의 견해)

  - 모델을 통한 선택(변수의 중요도 파악)

   1) feature selection model

   2) decision tree, regressor처럼 모델을 학습하는 과정에서 발견된

      feature importance를 활용한 선택

      대부분의 딥러닝 모델은 내부에서 자동 변수 선택 과정을 거침

      변수가 많아지면 변수끼리 정보 중복-> 각각 개별적 요인의 크기를 파악하기가 까다로움

5. 모델 선택 및 학습을 통한 생성

   - test data set으로 모델 학습

   - test data set은 모델 평가용으로 따로 분리

6. 모델 튜닝 및 모델 평가

   - 목적 : 정확도 개선, 일반화(overfit 해소)

   - 각 모델들 마다 매개변수 값을 조절하면서 모델에 대한 튜닝이 이루어 짐

   - 매개변수의 선택은 정확도를 개선하는 측면도 있지만,

     모델의 일반화를 위해 사용되는게 일반적

 

7. 해석 및 활용

 

[decision tree : 의사결정나무]

   - 분류모델 중 tree기반 모델의 기본이 되는 모델

   - 모델 학습 시 각 설명변수마다 feature importace

     => 불순도 특정(각 변수로 인해 나뉘어진 지식노드의 각 class의 혼합도

     => 단순한 트리를 생성기 위해 불순도가 가장 낮은,

            feature importane가 가 가장 높은 설명변수를 상위 노드에 고정

            (만약 비슷한 불순도를 갖는 설명변수가 있다면,

             더 많은 level을 갖는 변수가 우선순위를 갖는 특징을 가짐)

 

- 매개변수의 튜닝이 많이 필요하진 않지만 일반화 과정에서 필요하기도 함

1) cp

  - 가지치기 변수로, 0~1의 값을 갖음

  - cptable을 통해 더 작은 size의 트리를 구성하기 위한 값 확인

Cp

Nsplit

Size of tree

0.5

3

4

0.15

4

5

0.01

5

6

 

2) max_depth

  - 재사용 가능한 설명변수의 개수

  - 클수록 재사용 가능한 변수가 많아질 수 있음

    => 복잡한 트리의 생성 확률이 높아짐

    => 과대적합 확률도 높아짐

 

3) minsplit 또는 minbucket

  minbucket = round(minsplit/3)

  - 각 리프 노트마다 오분류 데이터의 수를 확인하여 더 split할지 여부를

    결정하는 최소 분기 지점을 의미

    ex) minbucket 5로 설정된 경우 오분류 데이터가 5 이상이면 추가 split

  - 값이 작을수록 트리는 복잡해짐(오분류 데이터를 줄이기 위해 더 많은 split이 생기기 때문)

 

# [ decision tree in R - iris ]

1. train set test set 분리

 ** 원본 데이터가 각 class별로 균등하지 않은 경우는

    sampling한 데이터도 균등하지 않기 때문에 좋지 않음

    => 업샘플링, 다운샘플링을 통해 데이터를 균등하게 만들어 놓고

       train set test set으로 분리 필요

 

'R > 분석' 카테고리의 다른 글

실습)decision tree in R - iris data 분류 분석  (0) 2019.01.18

http://www.r-project.org에 접속해서 R 최신버전을 다운로드 받습니다





우측 'TO DOWNLOAD R' 링크 클릭





아래로 내려 KOREA탭에서 다운받으시면 됩니다.

아무 링크에서나 받으셔도 무방합니다.




본인의 OS에 맞춰 선택해줍니다.


처음 까시는 분이라면 BASE나 우측 상단의 'INSTALL R FOR THE FIRST TIME'을 클릭해줍니다.



왼쪽 상단의 DOWNLOAD R을 클릭합니다.




파일을 다운로드 받은 후 관리자 권한으로 실행



설치 언어- 한국어



설치 위치를 선택해줍니다.



구성 요소 설치에서 64BIT, 32BIT 중 본인의 컴퓨터와 맞는 설정에 선택 해 줍니다.



다음을 눌러줍니다.



딱히 바꿀 필요 없으므로 다음을 눌러줍니다.



기본설정으로 놔두고 다음을 눌러줍니다.



압축이 풀리고 해당 창이 떴다면 설치 완료입니다.



설치된 r을 실행해 명령어가 잘 듣는지 봐줍니다.

var1 <- 1 을 입력 한 후 엔터를 눌러줍니다.

var1함수에 1의값을 삽입하는 과정입니다.


그리고 var1 을 입력하고 다시 엔터를 눌러 줍니다.



> var1 <- 1

> var1

[1] 1

이 출력된다면 명령어가 정상적으로 작동한다는걸 알 수 있습니다.

+ Recent posts