R中的SVM(e1071):给最近的数据带来更大的影响(支持向量机的权重?)

时间:2018-03-26 17:32:09

标签: r svm

我正在使用e1071 R包中的支持向量机。这是我使用SVM的第一个项目。

我有一个数据集,其中包含1年以上约1k客户的订单历史记录,我想预测客户的购买量。对于每个客户,如果某个项目(约50个)在某个星期内被购买(52周,也就是1年),我会得到这些信息。

我的目标是预测下个月每个客户的购买行为。

我认为1个月之前的购买对我的预测比10个月前的购买更有意义。

我现在的问题是如何才能让更新的数据产生更大的影响?有一个重量' svm-function中的选项,但我不确定如何使用它。

任何可以给我提示的人?非常感谢!

这是我的代码

      # Fit model using Support Vecctor Machines
      # install.packages("e1071")
      library(e1071)

      response <- train[,5];  # purchases
      formula <- response ~ .;

      tuned.svm <- tune.svm(train, response, probability=TRUE,
                  gamma=10^(-6:-3), cost=10^(1:2));   
      gamma.k <- tuned.svm$best.parameter[[1]];
      cost.k <- tuned.svm$best.parameter[[2]];
      svm.model <- svm(formula, data = train, 
                   type='eps-regression', probability=TRUE, 
                   gamma=gamma.k, cost=cost.k);
      svm.pred <- predict(svm.model, test, probability=TRUE);

附注:我为每个客户安装了一个模型。此外,由于我对概率感兴趣,该客户 k 周购买了商品 j ,我把

probability=TRUE

click here to see a sccreenshot of my data

2 个答案:

答案 0 :(得分:0)

R SVM模型中的权重选项更倾向于分配权重来解决不平衡类问题。它的class.Weights参数,用于为偏差数据集中的不同类别1/0分配权重。

回答你的问题:为了在最近的数据中给SVM模型提供更多权重,在观察级别缺少ibuild权重功能的一个简单技巧是重复最近的列(即为最近的数据创建重复的行),从而间接地赋予他们更高的权重

答案 1 :(得分:0)

尝试使用此软件包:https://CRAN.R-project.org/package=WeightSVM

它使用'libsvm'的修改版本,并且能够处理实例加权。您可以为最近的数据分配更高的权重。

例如。您已经模拟了数据(x,y)

x <- seq(0.1, 5, by = 0.05)
y <- log(x) + rnorm(x, sd = 0.2)

这是未加权的SVM:

model1 <- wsvm(x, y, weight = rep(1,99))

Blue dots is the unweighted SVM and do not fit the first instance well. We want to put more weights on the first several instances.

所以我们可以使用加权SVM:

model2 <- wsvm(x, y, weight = seq(99,1,length.out = 99))

Green dots is the weighted SVM and fit the first instance better.