svm
(e1071
)은 멀티 클래스 분류 (즉, 모든 쌍 사이의 이진 분류, 투표)에 "일대일"전략을 사용합니다. 따라서이 계층 적 설정을 처리하려면 그룹 1 대 모두, 그룹 2 대 남은 것 등과 같이 수동으로 일련의 바이너리 분류자를 수행해야합니다. 또한 기본 svm
함수는 하이퍼 매개 변수를 조정하지 않으며, 그래서 일반적으로 tune
같은 e1071
, 또는 train
우수한 포장의 래퍼를 사용하려는 것입니다 caret
패키지.
어쨌든 R을 사용하여 새 개인을 분류하려면 수동으로 수식에 숫자를 연결할 필요가 없습니다. 오히려 predict
제네릭 함수를 사용합니다.이 함수에는 SVM과 같은 다른 모델에 대한 메서드가 있습니다. 이와 같은 모델 객체의 경우 일반 함수 plot
및 summary
을 사용할 수도 있습니다.
require(e1071)
# Subset the iris dataset to only 2 labels and 2 features
iris.part = subset(iris, Species != 'setosa')
iris.part$Species = factor(iris.part$Species)
iris.part = iris.part[, c(1,2,5)]
# Fit svm model
fit = svm(Species ~ ., data=iris.part, type='C-classification', kernel='linear')
# Make a plot of the model
dev.new(width=5, height=5)
plot(fit, iris.part)
# Tabulate actual labels vs. fitted labels
pred = predict(fit, iris.part)
table(Actual=iris.part$Species, Fitted=pred)
# Obtain feature weights
w = t(fit$coefs) %*% fit$SV
# Calculate decision values manually
iris.scaled = scale(iris.part[,-3], fit$x.scale[[1]], fit$x.scale[[2]])
t(w %*% t(as.matrix(iris.scaled))) - fit$rho
# Should equal...
fit$decision.values
하는 모델 예측 대 실제 클래스 레이블을 표로 : svm
모델 객체에서
> table(Actual=iris.part$Species, Fitted=pred)
Fitted
Actual versicolor virginica
versicolor 38 12
virginica 15 35
추출 기능 가중치를 (여기 선형 SVM을 사용하여 기본적인 아이디어의 예입니다 기능 선택 등). 여기에 Sepal.Length
이 더 유용합니다. 결정 값이 어디에서 온
> t(fit$coefs) %*% fit$SV
Sepal.Length Sepal.Width
[1,] -1.060146 -0.2664518
우리가 기능 무게와 전처리 된 특징 벡터의 내적으로 수동으로 계산할 수있다, 이해하기, 마이너스 절편은
rho
오프셋. (사전 처리가 가능/중심 조정 및/또는 등 RBF SVM을 사용하는 경우 커널 변형을 의미)
> t(w %*% t(as.matrix(iris.scaled))) - fit$rho
[,1]
51 -1.3997066
52 -0.4402254
53 -1.1596819
54 1.7199970
55 -0.2796942
56 0.9996141
...
이 내부적으로 계산 무엇 같아야합니다 : 당신을 위해
> head(fit$decision.values)
versicolor/virginica
51 -1.3997066
52 -0.4402254
53 -1.1596819
54 1.7199970
55 -0.2796942
56 0.9996141
...
덕분에, 존 대답. 이 방정식을 알고 싶기 때문에 그 이유는 내 이벤트를 분류 할 때 어떤 매개 변수가 더 중요한지 평가하는 것입니다. –
@ ManuelRamón Ahh gotcha. 이를 선형 SVM의 "가중치"라고합니다. svm 모델 객체에서 계산하는 방법은 위의 편집을 참조하십시오. 행운을 빕니다! –
예제에는 두 가지 범주 (versicolor 및 virginica) 만 있고 두 개의 계수가있는 벡터가 있습니다. 하나는 홍채 데이터를 분류하는 데 사용되는 각 변수에 대한 코드입니다. N 개의 카테고리가 있다면'with (fit, t (coefs) % * % SV)'에서 N-1 벡터를 얻습니다. 각 벡터의 의미는 무엇입니까? –