Я хотел бы использовать функцию stringdot в пакете kernlab для классификации последовательностей ДНК с их функцией SVM ksvm.Проблема в том, что stringdot не поддерживает встроенные символы (то есть 'N').Может ли быть написана пользовательская версия stringdot или другого ядра, которая поддерживает подстановочные знаки (т. Е. 'N' соответствует всему) и с той же эффективностью?
Например ...
library(kernlab)
library(Biostrings)
start_time <- Sys.time()
# Make training and validation data
dna <- DNAStringSet( c("CATG", "CATC", "CNNN", "GTAC", "GTAC", "GTAG") )
new <- DNAStringSet( c("CATG", "CATC", "CNNN", "GNNN", "GNNN", "GNNN") )
grp <- factor( c(1, 1, 1, 2, 2, 2) )
# Model and prediction
mod <- ksvm( as.list(dna), grp, type="C-svc", kernel="stringdot",
kpar=list( length=4, type="spectrum" ),
C=5, cross=0, prob.model=F )
pre <- predict( mod, as.list(new) )
# Print stuff
end_time <- Sys.time()
print( end_time - start_time )
print( grp == pre )
Должна иметь 100% точность прогноза:
[1] TRUE TRUE TRUE TRUE TRUE TRUE
Но поскольку Ns рассматриваются как несоответствия, это дает:
[1] TRUE TRUE TRUE FALSE FALSE FALSE
Есть ли способ исправить это и сохранить аналогичную эффективность?
Time difference of 0.1171031 secs
Спасибо!