我正在尝试使用R中的SVM对某些数据进行分类。
数据集:
D1 | D2 | D3 | word1 | word2 |...
1 | 2 | 3 | 0 | 1 |
3 | 2 | 1 | 1 | 0 |
D1,D2,D3取值从0到9,每个字的值为0/1。
首先,我想构建一个基于word1,word2等预测D1的分类器。然后我想构建一个分类器,根据它在D1和单词中的预测来预测D2。 D1,D2和D3曾经是3位数的单个数字,并且数字与前一个数字之间存在关系。
到目前为止,我有:
trainD1 <- train[,-1]
trainD1$D2 <- NULL
trainD1$D3 <- NULL
modelD1 <- svm( train$D1~., trainD1, type="C-classification")
但我完全迷失了,欢迎任何帮助。
由于
答案 0 :(得分:2)
我相信你已经知道了这一点,但我只想确保覆盖我的基础 - 如果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.default(x = train [,x_names],y = train $ D3,gamma = 0.1)
参数:SVM-Type:eps-regression SVM-Kernel:radial
cost: 1 gamma: 0.1 epsilon: 0.1
支持向量数量:932
这只是为了向您展示这个过程。在您的代码中,您将需要使用更多单词并设置您认为最合适的选项。
我建议使用保留样本或交叉验证来进行基准测试。将整体模型与单个模型进行比较,该模型试图通过检查其性能基准来直接从单词中预测D3。