我正在使用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
答案 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))
所以我们可以使用加权SVM:
model2 <- wsvm(x, y, weight = seq(99,1,length.out = 99))
Green dots is the weighted SVM and fit the first instance better.