代码之家  ›  专栏  ›  技术社区  ›  daisymoon

使用SVM在R中集成

  •  1
  • daisymoon  · 技术社区  · 8 年前

    我正在尝试使用R中的SVM对一些数据进行分类。

    D1 | D2 | D3 | word1 | word2 |...
    1  | 2  | 3  | 0     | 1     |
    3  | 2  | 1  | 1     | 0     |
    

    D1、D2、D3取0到9的值,每个字取0/1的值。

    首先,我想构建一个基于单词1、单词2等预测D1的分类器。然后,我想建立一个基于它在D1和单词中预测的内容预测D2的分类器。 D1、D2和D3过去是一个3位数的单数,数字与前一个数字之间存在关系。

    到目前为止,我有:

    trainD1 <- train[,-1]
    trainD1$D2 <- NULL
    trainD1$D3 <- NULL
    
    modelD1 <- svm( train$D1~., trainD1, type="C-classification")
    

    但我完全迷路了,欢迎任何帮助。

    谢谢

    1 回复  |  直到 8 年前
        1
  •  2
  •   Community SqlRyan    4 年前

    我相信你已经知道了这一点,但我只是想确保我涵盖了我的基础——如果D1和D2预测D3,那么使用D1和D3的实际值总是比预测它们更好。

    就这个问题而言,我假设D1和D2可能不存在于您的预测数据集中,所以这就是为什么您必须预测它们。从“单词”变量直接预测D3可能更准确,但这超出了本问题的范围。

    train <- read.csv("trainingSmallExtra.csv")
    
    require(e1071)
    d1 <- svm(  x = train[,5:100], # arbitrary subset of words
                y = train$D1,
                gamma = 0.1)
    
    d1.predict <- predict(d1)
    train      <- cbind(d1.predict, train)
    x_names    <- c("d1.predict", train[,6:101])
    
    d2 <- svm(  x = x_names,  # d1 prediction + arbitrary subset of words
                y = train$D2,
                gamma = 0.1)
    
    d2.predict <- predict(d2)
    train      <- cbind(d2.predict, train)
    
    x_names <- c("d1.predict", "d2.predict", colnames(train)[25:150]) 
      
    final <- svm(  x = train[,x_names], 
                   y = train$D3,
                   gamma = 0.1)
    
    summary(final)
    

    调用:svm。默认值(x=序列[,x_names],y=序列$D3,gamma=0.1)

    参数:SVM类型:eps回归SVM内核:径向

       cost:  1 
      gamma:  0.1 
    epsilon:  0.1 
    

    支持向量数:932

    这只是为了向你展示这个过程。在代码中,您将希望使用更多的单词,并设置您认为最合适的任何选项。

    我建议使用坚持样本或交叉验证来衡量绩效。将集成模型与试图通过检查性能基准直接从单词预测D3的单个模型进行比较。