SVM 不在 R 中绘制

SVM doesn't plot in R

我正在对 R 进行预测分析,我执行了一个绘图命令,既没有错误消息也没有输出。我将从笔画数据集中重现我的代码。

stroke <- read.csv('healthcare-dataset-stroke-data.csv')

stroke <- subset (stroke, select = -id)
stroke <- subset(stroke, bmi != 'N/A')
stroke <- subset(stroke, smoking_status != 'Unknown')
stroke <- subset(stroke, gender!= 'Other')

stroke$ever_married[stroke$ever_married == 'Yes'] <- '1'
stroke$ever_married[stroke$ever_married == 'No'] <- '0'

stroke <- dummy_cols(stroke, select_columns = 'work_type')
stroke <- dummy_cols(stroke, select_columns = 'Residence_type')
stroke <- dummy_cols(stroke, select_columns = 'smoking_status')
stroke <- dummy_cols(stroke, select_columns = 'gender')

stroke$bmi <- as.numeric(stroke$bmi)
stroke$ever_married <- as.double(stroke$ever_married)

set.seed(2468)
dt = sort(sample(nrow(stroke), nrow(stroke)*.7))
train<-stroke[dt,]
test<-stroke[-dt,]

以上是数据清理和准备工作。然后我做了火车和考试。现在是 SVM 的工作。

svmfit = svm(stroke ~ age + hypertension + heart_disease + ever_married + avg_glucose_level + bmi + work_type_Govt_job + work_type_Never_worked + work_type_Private + `work_type_Self-employed` + Residence_type_Rural + `smoking_status_never smoked` + smoking_status_smokes + gender_Female, data = stroke, kernel = "linear", cost = 10, scale = FALSE)

print(svmfit)

这是输出:

Call:
svm(formula = stroke ~ age + hypertension + heart_disease + ever_married + 
    avg_glucose_level + bmi + work_type_Govt_job + work_type_Never_worked + 
    work_type_Private + `work_type_Self-employed` + Residence_type_Rural + 
    `smoking_status_never smoked` + smoking_status_smokes + gender_Female, 
    data = stroke, kernel = "linear", cost = 10, scale = FALSE)


Parameters:
   SVM-Type:  eps-regression 
 SVM-Kernel:  linear 
       cost:  10 
      gamma:  0.07142857 
    epsilon:  0.1 


Number of Support Vectors:  2652
svmplot <- plot(svmfit, stroke)
svmplot

在我将它保存到一个变量之前它不起作用,所以当我尝试并调用该变量时,它以 NULL.

响应

有什么想法吗?

您没有得到结果,因为 plot(x,y) 要求 xy 是数据点,而您使用的 svmfit 不是数据点。

绘制 svm() 结果可以通过多种方式完成,具体取决于您的目的。您可以在训练数据中根据实际值绘制拟合值。在另一种情况下,您可以根据测试数据绘制 svm 模型(您使用训练数据构建的模型)的预测值。

我从你的例子中了解到,你建立了一个模型来预测 stroke 变量,并将数据分为训练和测试,但在 svmfit 中你使用了所有数据,而不仅仅是训练数据。因此,我假设您想根据实际 stroke 值绘制 svmfit 中的拟合 stroke 值。如果是这样,您可以使用,例如:

plot(svmfit$fitted, col = "red", pch = 17)
points(stroke$stroke, col = "blue", pch = 19)

该图将以红点显示 svm 产生的 stroke 的拟合值,以蓝点显示实际的 stroke 值。 也可以使用,例如:

plot(svmfit$fitted,stroke$stroke, col = c("red", "blue"), pch = c(17, 19))

当您想要绘制预测的 stroke 数据和来自测试数据集的实际数据时,您可以使用相同的逻辑。

这是一个使用 iris 数据的简单示例:

svmfit.iris <- svm(Sepal.Length ~ Petal.Length + Petal.Width + Species, 
               data = iris, kernel = "linear", cost = 10, scale = FALSE)
plot(svmfit.iris$fitted, iris$Sepal.Length, col = c("red", "blue"), pch = c(17,19))