R 中的 SVM (e1071):赋予最近的数据更高的影响力(支持向量机的权重?)

Posted

技术标签:

【中文标题】R 中的 SVM (e1071):赋予最近的数据更高的影响力(支持向量机的权重?)【英文标题】:SVM in R (e1071): Give more recent data higher influence (weights for support vector machine?) 【发布时间】:2018-09-04 22:38:14 【问题描述】:

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

我有一个数据集,其中包含约 1,000 名客户在 1 年内的订单历史记录,我想预测客户的购买情况。对于每一位客户,我都知道某件商品(大约 50 件)是否在某周(52 周,也就是 1 年)内被购买。

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

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

我现在的问题是如何让最近的数据产生更大的影响? svm 函数中有一个“权重”选项,但我不知道如何使用它。

谁能给我一个提示?将不胜感激!

这是我的代码

      # 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);

旁注:我正在为每一位客户拟合模型。另外,由于我对客户 i 在第 k 周购买商品 j 的概率感兴趣,因此我将

probability=TRUE

click here to see a sccreenshot of my data

【问题讨论】:

您能否提供更多有关您的数据集的详细信息,或许可以举一个前十行的示例? @rwp 我在最初的帖子中添加了一个屏幕截图。 【参考方案1】:

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

要回答您的问题:要在 SVM 模型中为最近的数据赋予更多权重,在观察级别没有 ibuild 权重功能的一个简单技巧是重复最近的列(即为最近的数据创建重复的行)因此间接赋予它们更高的权重

【讨论】:

【参考方案2】:

试试这个包: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.

【讨论】:

以上是关于R 中的 SVM (e1071):赋予最近的数据更高的影响力(支持向量机的权重?)的主要内容,如果未能解决你的问题,请参考以下文章

R:调整 SVM 参数 - e1071 包中的 class.weights

R:在 e1071 包中是不是有比 libsvm 替代的 SVM 实现? [关闭]

如何使用 R e1071 SVM 多类测试数据

R(e1071)中奇怪的 svm 行为

R语言e1071包中的支持向量机:构建nu-classification类型的支持向量机SVM并分析不同nu值惩罚下模型分类螺旋线型(sprials)线性不可分数据集的表现

R语言使用e1071包中的svm函数构建支持向量机SVM模型(Support vector machines)默认使用RBF核函数使用table函数计算混淆矩阵评估分类模型性能