【问题标题】:Kernlab: missing value where TRUE/FALSE needed?Kernlab:需要 TRUE/FALSE 的缺失值?
【发布时间】:2021-10-15 14:06:13
【问题描述】:

我想使用kernlab 库中的ksvm 函数执行样本分类。

library(kernlab)

# PCA analysis on the first 3 component vectors
pca       <- prcomp(t(top.ranked.genes))
dat.loadings <- pca$x[, 1:3] 

# Sample classification

svp <- ksvm(dat.loadings, label, type="C-svc", scaled=T, kernel="rbfdot", kpar="automatic", prob.model=F, class.weights=NULL, fit=T, shrinking=T)

if ((type(ret) == "C-svc" || type(ret) == "nu-svc" || 中的错误 type(ret) == : 需要 TRUE/FALSE 的缺失值此外: 警告消息:在 .local(x, ...) 中:强制引入的 NAs

    > dput(top.ranked.genes[1:3,1:3])
    structure(c(4120.8, 1073.2, 1434.3, 3785.7, 1305.3, 1550.5, 3326.5, 
    1163.6, 1017.7), .Dim = c(3L, 3L), .Dimnames = list(c("221918_at", 
    "201554_x_at", "214722_at"), c("NB_GSM97800", "NB_GSM97803", 
    "NB_GSM97804")))

    

> dput(dat.loadings[1:3,1:3])
    structure(c(-158664.494929915, -148977.612734589, -163264.320664849, 
    -3583.353411796, -14921.765919203, -20224.318452977, 61652.7194473044, 
    18971.6967789661, 27273.153856793), .Dim = c(3L, 3L), .Dimnames = list(
        c("NB_GSM97800", "NB_GSM97803", "NB_GSM97804"), c("PC1", 
        "PC2", "PC3")))

【问题讨论】:

    标签: r data-science svm bioinformatics kernlab


    【解决方案1】:

    似乎label 不是分类所需的factor。来自ksvm的文档:

    y 可以是因子(用于分类任务)或数值向量 (用于回归)。 [...] 取决于 y 是否是一个因素, 类型的默认设置是C-svceps-svr

    试试label &lt;- as.factor(label)

    【讨论】:

    • 当我使用label &lt;- as.factor(label)时,我得到Error in indexes[[j]] : subscript out of bounds
    • &gt; dput(label) structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "Glioma", class = "factor")
    • 嗯,label 只有一层。您可以尝试使用label &lt;- factor(c("Glioma", "else", "else")) 和您的示例数据(dat.loadings[1:3, 1:3])运行ksvm 吗?
    猜你喜欢
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2015-01-17
    相关资源
    最近更新 更多