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包中的支持向量机:构建nu-classification类型的支持向量机SVM并分析不同nu值惩罚下模型分类螺旋线型(sprials)线性不可分数据集的表现
R语言使用e1071包中的svm函数构建支持向量机SVM模型(Support vector machines)默认使用RBF核函数使用table函数计算混淆矩阵评估分类模型性能