키, 몸무게, 일생누적연습시간이다.
1. 189cm, 80kg, 1000시간
2. 173cm, 70kg, 1400시간
3. 180cm, 60kg, 110시간
4. 167cm, 70kg, 10022시간
....
그리고 이 선수들의 2014년도 성공여부가 Y, N으로 주어졌다.
즉,
1. 189cm, 80kg, 1000시간, Y
2. 173cm, 70kg, 1400시간, N
3. 180cm, 60kg, 110시간, N
4. 167cm, 70kg, 10022시간, Y
....
와 같다.
자, 이와 같은 데이터가 많이 있다고 할 경우, 우리는
야구선수들의 키, 몸무게, 일생누적연습시간에 따른 2014년도 성공여부에 대한 모델을 만들 수 있다.
Y또는N이라는 2개의 분류 중 하나를 결정하는 것이기 때문에
로지스틱 회귀 모델이라는 것을 한번 사용해보자.
위에 해당하는 데이터는 존재하지 않으니까 임의로 생성을 하겠다.
R에서 데이터를 임의로 생성해서 data frame으로 만드는 과정부터 시작하겠다.
우선은 선수들의 키 정보를 임의로 생성하자.
height <- sample(165:200, 100, replace=T)
165:200 사이에서 중복 포함해서 100개의 숫자를 임의로 뽑아서 height라는 벡터에 넣었다.
동일한 방법으로 몸무게와 연습시간을 임의로 생성한다.
weight <- sample(60:100, 100, replace=T)
practice_hour <- sample(1000:10000, 100, replace=T)
여기에다가 Y와 N까지 임의로 값을 주자.
success <- sample(c('y','n'), 100, replace=T)
자 그럼, 이 네가지 vector들을 묶어서 data_frame 으로 만들자.
baseball.player <- data.frame(height, weight, practice_hour, success)
여기까지 진행한 것에 대한 데이터를 살펴보면 다음과 같다.
그럼, 이제 로지스텍 회귀모델을 돌려보자.
m <- glm(success ~., data=baseball.player, family="binomial")
파라메터 1: sucess를 설명해주는 모델을 만들어주세요~
파라메터 2: data는 baseball.player라는 data.frame을 봐주시구요~
파라메터 3: 2값중 하나로 구분해주세요~
모델은 m에 저장이 되었다.
그럼, 모델 m이 훈련 데이터에 대해 어떤 적합성을 가지는지 살펴보자.
f <- fitted(m)f를 출력해보면 0~1 사이의 소수점값들이 들어가 있다.
이는, success가 Y일 확률을 생성한 모델에 의해 계산한 것이다.
그럼, 그 확률이 0.5 보다 크면 Y라고 하고, 낮으면 N 이라고 해보자.
success.calc <- ifelse(f > 0.5, 'y', 'n')
모델에 의해 분류한 결과가 success.calc에 저장되었고
원래 정답은 success 에 저장되어 있다.
둘이 얼마나 같은지 비교해보자.
result <- success.calc == success
result에는 success.calc와 success가 같으면 TRUE, 아니면 FALSE가 들어가 있다.
sum(result)TRUE의 개수를 세보자.
본인이 직접 해봤을 때는
0.39를 기준값으로 하니, 맞은 개수가 55개였다.
즉, 훈련 데이터를 반 조금 넘게 맞춘 모델이 생성된 것이다.
아무래도 데이터가 랜덤하게 생성이 되었으니, 모델도 의미있게 나오기가
힘들다.
그래도 로지스텍 회귀 모델의 개념과 사용법은 충분히 설명이 되었으리라 믿는다. (:
댓글 없음:
댓글 쓰기