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)
要求 x
和 y
是数据点,而您使用的 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))
我正在对 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)
要求 x
和 y
是数据点,而您使用的 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))