全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1340 2
2021-07-27
支持向量机SVM,训练数据采用0或1数字标签,与A-B字符标签,训练结果不同是什么原因呢?

library(e1071)
library(pROC)
set.seed(80)
features = cbind(matrix(rnorm(200),ncol=4))
rownames(features)=paste('A_',c(1:50),sep='')
label_num = matrix(c(rep(1,25),rep(0,25)),ncol=1)
data = cbind(features, label_num)
colnames(data)=c('feature1','feature2','feature3','feature4','label')
index <- which( (1:nrow(data))%%3 == 0 )
trainset <- data[-index,]
testset <- data[index,]
train_model <- svm(label ~ .,data = trainset,kernel="radial",cost=1,gamma=1/ncol(trainset))
pre_svm <- predict(train_model,newdata = testset[,-dim(testset)[2]])
obs_p_svm_01 = data.frame(prob=pre_svm,obs=testset[,'label'])
svm_roc <- roc(testset[,'label'],as.numeric(pre_svm))
print(svm_roc)
# 得到结果 Area under the curve: 0.6094

label_str = data.frame(label = factor(rep(c("A", "B"), c(25, 25))))
data = cbind(features, label_str)
colnames(data)=c('feature1','feature2','feature3','feature4','label')
index <- which( (1:nrow(data))%%3 == 0 )
trainset <- data[-index,]
testset <- data[index,]
train_model <- svm(label ~ .,data = trainset,kernel="radial",cost=1,gamma=1/ncol(trainset))
pre_svm <- predict(train_model,newdata = testset[,-dim(testset)[2]])
obs_p_svm_str = data.frame(prob=pre_svm,obs=testset[,'label'])
svm_roc <- roc(testset[,'label'],as.numeric(pre_svm))
print(svm_roc)
# 得到结果 Area under the curve: 0.4375

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2021-7-30 10:19:00
1、虽然生成的数据结构一样,但是两个label的数据类型是不一样,str(label)试一下。
2、把第一个数据的label从0/1换成1/2再试试,看看有什么不同。
3、把第二个数据的label从A/B换成0/1,但仍保留因子类型,看看有什么不同。或者把第一个数据的0/1改成因子型,也可以试试。
这样试下来,大致可以看出问题是不是由数据类型差异导致的。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2021-9-8 14:13:05
llb_321 发表于 2021-7-30 10:19
1、虽然生成的数据结构一样,但是两个label的数据类型是不一样,str(label)试一下。
2、把第一个数据的la ...
多谢您的回复,我看了二者的预测结果,分类结果是一致的,只是画ROC曲线的时候不同,所以AUC不同,模型没有问题。多谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群