2014-05-17 2 views
0

이상 탐지를 위해 SVM을 학습하려고합니다. 이를 위해 나는 sourceip과 프로토콜 만 사용하여 train_data와 test_data를 만들었다. 그러나 플롯 기능을 사용하려고 할 때 오류가 발생합니다.플롯 오류 SVM ... 요인에 대해 의미가없는 분

> plot(svmfit,testdat) 
Error in Summary.factor(c(7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, : 
    min not meaningful for factors 

어떻게하면이 오류를 제거 할 수 있습니까 ..?

외부 파일 library("e1071")plot.svm 기능은 분명히에만 연속 예측을 플롯 좋아

train_data=read.csv("packetcapture_training.csv") 
    #read only source ip and protocol 
    xtrain=train_data[4:23,c(3,5)] 
    ytrain=c(rep(-1,10),rep(1,10)) 
    dat=data.frame(x=xtrain,y=as.factor(ytrain)) 
    library("e1071") 
    svmfit=svm(y~.,data=dat,kernel="radial",cost=10,scale=FALSE) 
    summary(svmfit) 
    test_data=read.csv("packetcapture_testing.csv") 
    #read only source ip and protocol 
    xtest=test_data[371:390,c(3,5)] 
    ytest=c(rep(1,10),rep(-1,10)) 
    testdat=data.frame(x=xtest,y=as.factor(ytest)) 
    plot(svmfit,testdat) 





    > dat 
        x.Source x.Protocol y 
1 fe80::a00:27ff:feee:7ec6  ICMPv6 -1 
2 fe80::a00:27ff:feee:7ec6  ICMPv6 -1 
3 fe80::a00:27ff:feee:7ec6  ICMPv6 -1 
4    172.16.11.1  TCP -1 
5    192.168.2.101  TCP -1 
6    172.16.11.1  TCP -1 
7    172.16.11.1  TCP -1 
8    172.16.11.1  TCP -1 
9    192.168.2.101  TCP -1 
10   192.168.2.101  TCP -1 
11    172.16.11.1  TCP 1 
12    172.16.11.1  TCP 1 
13    172.16.11.1  TCP 1 
14   192.168.2.101  TCP 1 
15    172.16.11.1  TCP 1 
16   192.168.2.101  TCP 1 
17    172.16.11.1  TCP 1 
18    172.16.11.1  TCP 1 
19   192.168.2.101  SSHv2 1 
20    172.16.11.1  TCP 1 

> dput(head(dat,4)) 
structure(list(x.Source = structure(c(6L, 6L, 6L, 1L), .Label = c("172.16.11.1", 
"192.168.2.100", "192.168.2.101", "CadmusCo_8b:7b:80", "CadmusCo_ee:7e:c6", 
"fe80::a00:27ff:feee:7ec6"), class = "factor"), x.Protocol = structure(c(5L, 
5L, 5L, 7L), .Label = c("ARP", "DNS", "HTTP", "ICMP", "ICMPv6", 
"SSHv2", "TCP", "UDP"), class = "factor"), y = structure(c(1L, 
1L, 1L, 1L), .Label = c("-1", "1"), class = "factor")), .Names = c("x.Source", 
"x.Protocol", "y"), row.names = c(NA, 4L), class = "data.frame") 

> testdat 
     x.Source x.Protocol y 
371 172.16.11.1  TCP 1 
372 172.16.11.1  TCP 1 
373 172.16.11.1  TCP 1 
374 172.16.11.1  TCP 1 
375 172.16.11.1  TCP 1 
376 172.16.11.1  TCP 1 
377 172.16.11.1  TCP 1 
378 172.16.11.1  TCP 1 
379 172.16.11.1  TCP 1 
380 172.16.11.1  TCP 1 
381 172.16.11.1  TCP -1 
382 172.16.11.1  TCP -1 
383 172.16.11.1  TCP -1 
384 172.16.11.1  TCP -1 
385 172.16.11.1  TCP -1 
386 172.16.11.1  TCP -1 
387 172.16.11.1  TCP -1 
388 172.16.11.1  TCP -1 
389 192.168.2.101  SSHv2 -1 
390 192.168.2.101  ICMPv6 -1 


> dput(head(testdat,4)) 
structure(list(x.Source = structure(c(1L, 1L, 1L, 1L), .Label = c("172.16.11.1", 
"192.168.2.100", "192.168.2.101", "CadmusCo_8b:7b:80", "CadmusCo_ee:7e:c6", 
"fe80::a00:27ff:feee:7ec6"), class = "factor"), x.Protocol = structure(c(7L, 
7L, 7L, 7L), .Label = c("ARP", "DNS", "HTTP", "ICMP", "ICMPv6", 
"SSHv2", "TCP", "UDP"), class = "factor"), y = structure(c(2L, 
2L, 2L, 2L), .Label = c("-1", "1"), class = "factor")), .Names = c("x.Source", 
"x.Protocol", "y"), row.names = 371:374, class = "data.frame") 
+0

데이터를 포함하지 않았으므로이 오류는 재현 할 수 없습니다. 사람들이보다 쉽게 ​​당신을 도우려면, [훌륭한 R 재현 가능한 예제를 만드는 방법에 대한 가이드를 참조하십시오 (http://stackoverflow.com/questions/5963269/how-to-make-a- 위대한 -r- reproducible- 예) – MrFlick

+0

덜 정보에 대 한 죄송합니다.이 충분히 될 것이라고 확신하지 않습니다 ... 추측, 열의 서식을 사용하여 실수를하고있다 ... 어떻게 SVM 학습 IPaddress 서식을합니다. ... – dudedev

답변

-2

의 명령 행은 다음과 같습니다. 모델에서 두 개의 범주 형 예측 변수를 사용하기 때문에 오류가 발생합니다. 예상했던 시각화의 종류를 알고 있습니까? 도움말 페이지의 예에서

, 그것은

data(cats, package = "MASS") 
m <- svm(Sex~., data = cats) 
plot(m, cats) 

을 보여줍니다 그리고 거기는 범위에 따라 포인트를 확산 할 수 있고 절단 의미있는 브레이크 포인트에서 발생할 수 있습니다. 범주 형 예측자를 사용하면 순서가 지정되지 않으므로 실제로 비슷한 방식으로 계획을 세울 명확한 방법이 없습니다.

+0

답변 해 주셔서 감사합니다. 방금 분류를 통해 데이터 요소를 플롯해야하므로 플롯에서 두 가지 명확한 클래스를 볼 수 있습니다. 문자열 형식으로 전달한 이후 SourceIp를 범주 형 데이터로 고려하고 있습니다. 나는 그것이 사실이 아니어야한다는 것을 안다, 문제는 여기있다. 나는 어떻게 svm 모델을 만들기 위해 csv 파일에서 ip 주소를 입력해야하는지 잘 모르겠습니다. – dudedev

+0

@ user3648560 모든 것을 '인자'로 전달했습니다. 귀하의 데이터가 올바른 선택 인 것 같습니다. 이산 데이터를위한 플롯을 만드는 것이 더 어렵습니다. 데이터를 "보급"하여 볼 수있는 확실한 방법은 없습니다. – MrFlick

+0

확인. 고맙습니다. 나는 소스 IP를 4 개의 다른 옥텟으로 바꾸고 숫자 데이터로 전달했다. 예측 기능을 사용하면 예측하기 위해 "테스트 데이터가 모델과 일치하지 않는다"라는 오류가 발생합니다. 모든 명령은 동일하고 CSV 파일에는 5 개의 열이 있습니다 발신 IP 옥텟은 4 개이며 프로토콜은 1 개입니다. – dudedev