网站建设用书,江西建设信息网站,石家庄最好的网站建设公司哪家好,wordpress移动端悬浮导航代码基于R 4.2.2版本演示 一、写在前面
有不少大佬问做机器学习分类能不能用R语言#xff0c;不想学Python咯。
答曰#xff1a;可#xff01;用GPT或者Kimi转一下就得了呗。
加上最近也没啥内容写了#xff0c;就帮各位搬运一下吧。 二、R代码实现SVM分类
#xff08;1不想学Python咯。
答曰可用GPT或者Kimi转一下就得了呗。
加上最近也没啥内容写了就帮各位搬运一下吧。 二、R代码实现SVM分类
1导入数据
我习惯用RStudio自带的导入功能 2建立SVM模型默认参数
# Load necessary libraries
library(caret)
library(kernlab)
library(pROC)
library(ggplot2)# Assume data is your dataframe containing the data
# Set seed to ensure reproducibility
set.seed(123)# Split data into training and validation sets (80% training, 20% validation)
trainIndex - createDataPartition(data$X, p 0.8, list FALSE)
trainData - data[trainIndex, ]
validData - data[-trainIndex, ]# Train the SVM model
svmModel - ksvm(X ~ ., data trainData, type C-svc, kernel rbfdot, prob.model TRUE)# Predict on the training and validation sets
trainPredict - predict(svmModel, trainData, type probabilities)[,1]
validPredict - predict(svmModel, validData, type probabilities)[,1]# Convert predictions to binary using 0.5 as threshold
trainPredictBinary - ifelse(trainPredict 0.5, 1, 0)
validPredictBinary - ifelse(validPredict 0.5, 1, 0)# Compute ROC objects
trainRoc - roc(response as.numeric(trainData$X) - 1, predictor trainPredict)
validRoc - roc(response as.numeric(validData$X) - 1, predictor validPredict)# Plot ROC curves using ggplot2
trainRocPlot - ggplot(data data.frame(fpr 1 - trainRoc$specificities, tpr trainRoc$sensitivities), aes(x fpr, y tpr)) geom_line(color blue) geom_area(aes(ifelse(fpr 1, fpr, NA)), fill blue, alpha 0.2) geom_abline(slope 1, intercept 0, linetype dashed, color black) ggtitle(Training ROC Curve) xlab(False Positive Rate) ylab(True Positive Rate) annotate(text, x 0.5, y 0.1, label paste(Training AUC , round(auc(trainRoc), 2)), hjust 0.5, color blue)validRocPlot - ggplot(data data.frame(fpr 1 - validRoc$specificities, tpr validRoc$sensitivities), aes(x fpr, y tpr)) geom_line(color red) geom_area(aes(ifelse(fpr 1, fpr, NA)), fill red, alpha 0.2) geom_abline(slope 1, intercept 0, linetype dashed, color black) ggtitle(Validation ROC Curve) xlab(False Positive Rate) ylab(True Positive Rate) annotate(text, x 0.5, y 0.2, label paste(Validation AUC , round(auc(validRoc), 2)), hjust 0.5, color red)# Display plots
print(trainRocPlot)
print(validRocPlot)# Calculate confusion matrices based on 0.5 cutoff for probability
confMatTrain - table(trainData$X, trainPredict 0.5)
confMatValid - table(validData$X, validPredict 0.5)# Function to plot confusion matrix using ggplot2
plot_confusion_matrix - function(conf_mat, dataset_name) {conf_mat_df - as.data.frame(as.table(conf_mat))colnames(conf_mat_df) - c(Actual, Predicted, Freq)p - ggplot(data conf_mat_df, aes(x Predicted, y Actual, fill Freq)) geom_tile(color white) geom_text(aes(label Freq), vjust 1.5, color black, size 5) scale_fill_gradient(low white, high steelblue) labs(title paste(Confusion Matrix -, dataset_name, Set), x Predicted Class, y Actual Class) theme_minimal() theme(axis.text.x element_text(angle 45, hjust 1), plot.title element_text(hjust 0.5))print(p)
}# Now call the function to plot and display the confusion matrices
plot_confusion_matrix(confMatTrain, Training)
plot_confusion_matrix(confMatValid, Validation)# 提取混淆矩阵的值确保它们的命名与你的混淆矩阵布局一致
fp_train - confMatTrain[1, 1]
tn_train - confMatTrain[1, 2]
tp_train - confMatTrain[2, 1]
fn_train - confMatTrain[2, 2]fp_valid - confMatValid[1, 1]
tn_valid - confMatValid[1, 2]
tp_valid - confMatValid[2, 1]
fn_valid - confMatValid[2, 2]# 训练集指标
acc_train - (tp_train tn_train) / sum(confMatTrain)
error_rate_train - 1 - acc_train
sen_train - tp_train / (tp_train fn_train) # 灵敏度
sep_train - tn_train / (tn_train fp_train) # 特异度
precision_train - tp_train / (tp_train fp_train) # 精确度
F1_train - 2 * (precision_train * sen_train) / (precision_train sen_train)
MCC_train - (tp_train * tn_train - fp_train * fn_train) / sqrt((tp_train fp_train) * (tp_train fn_train) * (tn_train fp_train) * (tn_train fn_train))
auc_train - roc(response trainData$X, predictor trainPredict)$auc# 验证集指标
acc_valid - (tp_valid tn_valid) / sum(confMatValid)
error_rate_valid - 1 - acc_valid
sen_valid - tp_valid / (tp_valid fn_valid) # 灵敏度
sep_valid - tn_valid / (tn_valid fp_valid) # 特异度
precision_valid - tp_valid / (tp_valid fp_valid) # 精确度
F1_valid - 2 * (precision_valid * sen_valid) / (precision_valid sen_valid)
MCC_valid - (tp_valid * tn_valid - fp_valid * fn_valid) / sqrt((tp_valid fp_valid) * (tp_valid fn_valid) * (tn_valid fp_valid) * (tn_valid fn_valid))
auc_valid - roc(response validData$X, predictor validPredict)$auc# Print Metrics
cat(Training Metrics\n)
cat(Accuracy:, acc_train, \n)
cat(Error Rate:, error_rate_train, \n)
cat(Sensitivity:, sen_train, \n)
cat(Specificity:, sep_train, \n)
cat(Precision:, precision_train, \n)
cat(F1 Score:, F1_train, \n)
cat(MCC:, MCC_train, \n)
cat(AUC:, auc_train, \n\n)cat(Validation Metrics\n)
cat(Accuracy:, acc_valid, \n)
cat(Error Rate:, error_rate_valid, \n)
cat(Sensitivity:, sen_valid, \n)
cat(Specificity:, sep_valid, \n)
cat(Precision:, precision_valid, \n)
cat(F1 Score:, F1_valid, \n)
cat(MCC:, MCC_valid, \n)
cat(AUC:, auc_valid, \n)
结果输出随便挑的 效果一般般。 三、SVM调参
ksvm 函数是 kernlab 包中的一个函数用于在 R 语言中构建和训练支持向量机SVM模型。以下是 ksvm 的一些主要参数和选项这些参数允许你定制和优化SVM的训练过程
formula一种符号描述的模型公式指示如何将变量应用到分析中。
data包含数据的数据框data frame。
type模型类型包括
C-svcC-支持向量分类。
nu-svcNu-支持向量分类。
C-bsvc不平衡分类。
spoc-svc结构化输出和输出校正。
kbb-svc基于核的二进制分类。
C-svrC-支持向量回归。
nu-svrNu-支持向量回归。
eps-svrε-支持向量回归。
C-bsvr不平衡回归。
lp线性规划。
kernel核函数类型包括
rbfdot径向基函数核。
polydot多项式核。
vanilladot线性核。
tanhdot双曲正切核。
laplacedot拉普拉斯核。
besseldot贝塞尔核。
anovadotANOVA核。
splinedot样条核。
C错误的成本用于C-支持向量分类和回归较大的值表示对错误的惩罚增加。一般从 0.1 到 1000具体取值可以通过交叉验证来确定。常用的实验值包括 1, 10, 100 等。
sigma用于 RBF 核高斯核的宽度参数。sigma 的理想取值高度依赖于数据的分布和特征的尺度即特征的范围或方差。因此没有固定的“最佳”取值范围而是需要根据具体情况来确定。常见的做法包括
基于数据的启发式方法一个常见的启发式方法是将 sigma 设置为特征空间中点到点距离的中值或平均值的函数。另一种方法是将 sigma 设置为特征标准差的倒数。
试错法Trial and Error在实际应用中可以通过试验一系列的 sigma 值来观察模型性能的变化。例如可以在对数尺度上均匀尝试如 0.01, 0.1, 1, 10 等。
degree多项式核函数的度数。
scale核函数的缩放参数。
offset核函数的偏移量。
prob.model是否计算概率估计适用于分类任务。
cross进行交叉验证的次数用于模型选择和参数优化。
na.action缺失数据的处理策略。
shrinking是否使用启发式方法来加速计算。
tol收敛容忍度用于优化算法。
epsilon(用于 SVR)ε-支持向量回归中的损失函数边缘宽度。
fitted是否返回拟合值。
scaled是否对数据进行标准化处理。
feature.out是否输出模型中使用的特征。 大家自个调吧我不调了。 五、最后
至于怎么安装自学了哈。
数据嘛
链接https://pan.baidu.com/s/1rEf6JZyzA1ia5exoq5OF7g?pwdx8xm
提取码x8xm