2013-03-14 7 views
4

업데이트 : naiveBayes에 e1071 패키지를 사용하고 있습니다.R 예측 함수 : 왜 길이 예측을 반환합니까?

저는 R에 익숙하지 않고 장난감 데이터 주변에 Naive Bayes 모델을 구축하려고합니다. 그런 다음 그 모델에 대해 "프리 플레이"를 호출하려고했습니다. 내가 본 문제는 "predict()"의 결과 길이가 0입니다. 간단한 R repro 코드를 참조하십시오. 귀하의 의견을 보내 주셔서 감사합니다!

df<-NULL 

df <- rbind(df, c(0,3)) 

df <- rbind(df, c(1,1)) 

df <- rbind(df, c(1,3)) 

model <- naiveBayes(df[,2], df[,1]) 

prediction <- predict(model, df[,-1]) 

length(prediction) 

## [1] 0 
+0

어떤 패키지를 사용하고 있습니까? 'e1071'? 나는 당신의 문제가 수식을 지정하지 않는다고 확신합니다. – alexwhan

답변

6

문제는 종속 변수가 인 요소 일 것으로 예상됩니다. 행렬을 사용하여 데이터를 저장하는 대신 여러 변수 유형 (예 : 숫자 및 요인)을 저장할 수있는 데이터 프레임 (아래의 df)을 사용합니다. 나는 (수식, 즉하지 사용) 문제를 해결 요인이다 것을 보여주기 위해, 또는 ...

df<-data.frame(Y=factor(c(0,1,1)),X=c(3,1,3)) 
model<-naiveBayes(Y~X,df) 
predict(model,df) 

을 요소 Y, 및 숫자 X DF에 저장하고 모델을 실행 ...

model<-naiveBayes(df[,2],df[,1]) 
predict(model,df) 

아직도 작동합니다.

+1

...이 경우 데이터 프레임으로'df '를 사용하면 데이터 프레임이 여러 유형의 벡터 (예 : 숫자, 요소)를 포함 할 수 있기 때문에 더 좋습니다. 'df'를 행렬로 유지하려고한다면, 결과 컬럼을 나눠서 인자로 변환해야합니다. – Marius

+0

@ 마리우스 귀하의 의견을 반영하겠습니다. 감사! – ndoogan

+1

대단히 고마워! –

2

나는 문제가 naiveBayesy는 범주 형 변수라고 가정 사실에서 발생한다 생각합니다.

예제 데이터에는 (분명한) 범주 형 데이터 또는 연속성 테이블 데이터가 없습니다.

예를 들어 iris을 사용하면 다섯 번째 열은 Species이고 요인 변수입니다.

library(e1071) 
data(iris) 
m <- naiveBayes(iris[,-5], iris[,5]) 
m 
table(predict(m, iris), iris[,5]) 


      setosa versicolor virginica 
    setosa   50   0   0 
    versicolor  0   47   3 
    virginica  0   3  47 

예상대로 작동합니다.

+0

답장을 보내 주셔서 감사합니다. 그렇다면 y를 범주 형 변수로 만드는 방법은 무엇입니까? –

+0

'? factor' ..... –

+0

대단히 고마워요! –