训练和测试上的支持向量机
Support Vector Machine on train and test
我正在尝试 运行 在我的训练和测试数据集上进行不同类型的 SVM 回归。我的所有代码都可以正常工作,但我觉得我没有 运行 正确地设置它,因为在训练和测试中获得 >0.95 的准确度确实太高了。
下面是我如何 运行回归的代码。数据集太大而无法上传(10000 行等),但包含所有已缩放的数值变量。
我想我是运行测试自己的模型而不是火车模型,但不知道如何改变它。我想这是所有类型的支持向量机都犯的同样的错误,所以为了整洁起见,我刚刚上传了两种方法。
我希望我已经解释得足够清楚了,如果不能重新措辞。
##non linear methods
set.seed(123)
poly.tune = tune.svm(default_flag~., data=train, kernel="polynomial",degree=c(3), coef0=c(0.1))
#summary(poly.tune)
#train
best.poly = poly.tune$best.model
poly.train = predict(best.poly, newdata=train)
svmnonlintrain<-table(poly.train, train$default_flag)
##accuracy from table
nonlineartrain<-(svmnonlintrain[1,1]+svmnonlintrain[2,2])/(svmnonlintrain[1,1]+svmnonlintrain[1,2]+svmnonlintrain[2,1]+svmnonlintrain[2,2])
#test
best.poly = poly.tune$best.model
poly.test = predict(best.poly, newdata=test)
svmnonlin<-table(poly.test, test$default_flag)
##accuracy from table
nonlineartest<-(svmnonlin[1,1]+svmnonlin[2,2])/(svmnonlin[1,1]+svmnonlin[1,2]+svmnonlin[2,1]+svmnonlin[2,2])
##radial basis function
set.seed(123)
rbf.tune = tune.svm(default_flag~., data=train, kernel="radial",gamma=c(0.1,0.5))
#summary(rbf.tune)
#train
best.rbf = rbf.tune$best.model
rbf.train = predict(best.rbf, newdata=train)
svmradialtrain <- table(rbf.train, train$default_flag)
radialtrain<-(svmradialtrain[1,1]+svmradialtrain[2,2])/(svmradialtrain[1,1]+svmradialtrain[1,2]+svmradialtrain[2,1]+svmradialtrain[2,2])
#test
best.rbf = rbf.tune$best.model
rbf.test = predict(best.rbf, newdata=test)
svmradial <- table(rbf.test, test$default_flag)
radialtest<-(svmradial[1,1]+svmradial[2,2])/(svmradial[1,1]+svmradial[1,2]+svmradial[2,1]+svmradial[2,2])
让我猜猜:这是一个信用风险数据集,您要预测违约概率(响应变量 default_flag
)。如果这与现有的所有其他信用风险数据集一样,那么您的响应变量非常不平衡,非违约比违约多得多。我会再猜测它是超过 90% 的非默认值。
如果是这样,我只需预测每个人都不会违约就可以获得 90% 的准确率。当然,这不是很有用。
错误率不是衡量不平衡数据性能的非常有意义的指标。使用其他度量,如 AUC 或基尼系数,甚至熵(二进制对数似然)。
我正在尝试 运行 在我的训练和测试数据集上进行不同类型的 SVM 回归。我的所有代码都可以正常工作,但我觉得我没有 运行 正确地设置它,因为在训练和测试中获得 >0.95 的准确度确实太高了。
下面是我如何 运行回归的代码。数据集太大而无法上传(10000 行等),但包含所有已缩放的数值变量。
我想我是运行测试自己的模型而不是火车模型,但不知道如何改变它。我想这是所有类型的支持向量机都犯的同样的错误,所以为了整洁起见,我刚刚上传了两种方法。
我希望我已经解释得足够清楚了,如果不能重新措辞。
##non linear methods
set.seed(123)
poly.tune = tune.svm(default_flag~., data=train, kernel="polynomial",degree=c(3), coef0=c(0.1))
#summary(poly.tune)
#train
best.poly = poly.tune$best.model
poly.train = predict(best.poly, newdata=train)
svmnonlintrain<-table(poly.train, train$default_flag)
##accuracy from table
nonlineartrain<-(svmnonlintrain[1,1]+svmnonlintrain[2,2])/(svmnonlintrain[1,1]+svmnonlintrain[1,2]+svmnonlintrain[2,1]+svmnonlintrain[2,2])
#test
best.poly = poly.tune$best.model
poly.test = predict(best.poly, newdata=test)
svmnonlin<-table(poly.test, test$default_flag)
##accuracy from table
nonlineartest<-(svmnonlin[1,1]+svmnonlin[2,2])/(svmnonlin[1,1]+svmnonlin[1,2]+svmnonlin[2,1]+svmnonlin[2,2])
##radial basis function
set.seed(123)
rbf.tune = tune.svm(default_flag~., data=train, kernel="radial",gamma=c(0.1,0.5))
#summary(rbf.tune)
#train
best.rbf = rbf.tune$best.model
rbf.train = predict(best.rbf, newdata=train)
svmradialtrain <- table(rbf.train, train$default_flag)
radialtrain<-(svmradialtrain[1,1]+svmradialtrain[2,2])/(svmradialtrain[1,1]+svmradialtrain[1,2]+svmradialtrain[2,1]+svmradialtrain[2,2])
#test
best.rbf = rbf.tune$best.model
rbf.test = predict(best.rbf, newdata=test)
svmradial <- table(rbf.test, test$default_flag)
radialtest<-(svmradial[1,1]+svmradial[2,2])/(svmradial[1,1]+svmradial[1,2]+svmradial[2,1]+svmradial[2,2])
让我猜猜:这是一个信用风险数据集,您要预测违约概率(响应变量 default_flag
)。如果这与现有的所有其他信用风险数据集一样,那么您的响应变量非常不平衡,非违约比违约多得多。我会再猜测它是超过 90% 的非默认值。
如果是这样,我只需预测每个人都不会违约就可以获得 90% 的准确率。当然,这不是很有用。
错误率不是衡量不平衡数据性能的非常有意义的指标。使用其他度量,如 AUC 或基尼系数,甚至熵(二进制对数似然)。