利用支持向量机判断学生成绩所属类别

简介: 利用支持向量机判断学生成绩所属类别

1 目的

  我们的核心目标是利用先进的机器学习技术——支持向量机(SVM),来精准地判断学生成绩所属的类别。学生的成绩通常反映了他们在学习上的表现和努力程度,而将这些成绩分类则有助于我们更好地理解学生的学业状况,并为他们提供有针对性的指导和帮助。

2 数据来源

  该演示数据来源于: 机器学习和智能系统中心

3 案例演示

3.1 探索数据

1.查看数据类型

  运行代码:

data1<-read.csv("G:\\studentclasssvm.csv")         #数据读取
str(data1)                                         #查看数据类型

  结果展示:

## 'data.frame':    10 obs. of  3 variables:
##  $ math   : int  40 25 10 33 27 75 85 95 80 90
##  $ english: int  35 55 5 26 52 92 79 86 85 90
##  $ class  : int  -1 -1 -1 -1 -1 1 1 1 1 1

2.转换数据类型

  运行代码:

k<-as.factor(data1$class)                          #将类别数据转化为因子型
data1$class1<-k                                    #将数据存储进data1
str(data1)                                         #查看数据类型

  结果展示:

## 'data.frame':    10 obs. of  4 variables:
##  $ math   : int  40 25 10 33 27 75 85 95 80 90
##  $ english: int  35 55 5 26 52 92 79 86 85 90
##  $ class  : int  -1 -1 -1 -1 -1 1 1 1 1 1
##  $ class1 : Factor w/ 2 levels "-1","1": 1 1 1 1 1 2 2 2 2 2

  通过读取数据后发现数据类型均为数值型,为方便后面操作,将class数据类型转化为因子型。

3.2 模型的建立及优化

3.2.1 创建训练集和测试集

  运行代码:

prop.table(table(data1$class1))             #查看类别情况
set.seed(12)                                #设置随机种子
data1_sample<-sample(10,8)   
data1_train<-data1[data1_sample,]
data1_test<-data1[-data1_sample,]
prop.table(table(data1_train$class1))       #创建训练集
prop.table(table(data1_test$class1))        #创建测试集

  结果展示:

> prop.table(table(data1$class1))             #查看类别情况
##  -1   1 
## 0.5 0.5
> prop.table(table(data1_train$class1))       #创建训练集
##  -1   1 
## 0.5 0.5
> prop.table(table(data1_test$class1))        #创建测试集
##  -1   1 
## 0.5 0.5

  通过初步查看发现,-1和1类别分别占据50%,由于前5个案例class均为-1,后5个案例均为1。将样本数据通过随机化的方式对顺序进行重新排列,并取前8个案例作为训练集,后2个案例作为测试。可以看到抽取的训练集和测试集类别比例与原始数据类别分布比例相同,说明训练集和测试集的选取是合理的。

3.2.2 基于数据训练模型

  运行代码:

data1_classifier<-ksvm(class1~math+english,data=data1_train,kernel="vanilladot")
data1_classifier

  结果展示:

## Support Vector Machine object of class "ksvm" 
## 
## SV type: C-svc  (classification) 
##  parameter : cost C = 1 
## 
## Linear (vanilla) kernel function. 
## 
## Number of Support Vectors : 3 
## 
## Objective Function Value : -0.5369 
## Training error : 0

  根据线性核函数拟合模型。

3.2.3 评估模型性能

  运行代码:

data1_predictions<-predict(data1_classifier,data1_test)
data1_predictions
table(data1_predictions,data1_test$class1)
data1_agreement<-data1_predictions==data1_test$class1
table(data1_agreement)
prop.table(table(data1_agreement))

  结果展示:

> data1_predictions
## [1] -1 1 
## Levels: -1 1
> table(data1_predictions,data1_test$class1)
##                  
## data1_predictions -1 1
##                -1  1 0
##                1   0 1
> table(data1_agreement)
## data1_agreement
## TRUE 
##    2
> prop.table(table(data1_agreement))
## data1_agreement
## TRUE 
##    1

  根据测试集拟合效果发现,模型准确率为100%,拟合效果完美,已经没有进一步优化空间。

3.2.4 支持向量机可视化

  通过改变支持向量机核函数优化模型。

  运行代码:

data_classifier=ksvm(class~.,data=data1,type="C-svc",kernel="vanilladot",C=100,scaled=c())
alpha=data_classifier@alpha[[1]]
alphaindex=data_classifier@alphaindex[[1]]
y=data1$class
x=data1[,1:2]
w=alpha[1]*y[alphaindex[1]]*x[alphaindex[1],]+
  alpha[2]*y[alphaindex[2]]*x[alphaindex[2],]+
  alpha[3]*y[alphaindex[3]]*x[alphaindex[3],]
b=-data_classifier@b
xx1=seq(20,110,length =10 )
xx1=data1$math
xx2=(-b-w[1,1]*xx1)/w[1,2]
xx2_sh=(1-b-w[1,1]*xx1)/w[1,2]
xx2_xia=(-1-b-w[1,1]*xx1)/w[1,2]
plot(x,col=ifelse(y>0,1,2),pch=ifelse(y>0,1,2),lwd=5)
text(x+2,labels = 1:dim(x)[1])
lines(xx1,xx2,col="purple",lwd=5)
lines(xx1,xx2_sh,col="pink",lwd=3,lty=2)
lines(xx1,xx2_xia,col="pink",lwd=3,lty=2)
points(x[c(1,2),1],x[c(1,2),2],col="blue",pch=17,cex=2)
points(x[c(9),1],x[c(9),2],col="green",pch=16,cex=1.5)
text(x[c(1,2,9),1],x[c(1,2,9),2]-4,labels="sv")
grid()

  结果展示:

支持向量机可视化


目录
打赏
0
3
3
0
30
分享
相关文章
Python用KNN(K-近邻)回归、分类、异常值检测预测房价、最优K值选取、误差评估可视化
Python用KNN(K-近邻)回归、分类、异常值检测预测房价、最优K值选取、误差评估可视化
数据分享|R语言回归,虚拟变量和交互项,假设检验:F检验、AIC和 BIC分析学生成绩数据附自测题(下)
数据分享|R语言回归,虚拟变量和交互项,假设检验:F检验、AIC和 BIC分析学生成绩数据附自测题
【网安AIGC专题11.1】11 Coreset-C 主动学习:特征选择+11种采样方法+CodeBERT、GraphCodeBERT+多分类(问题分类)二元分类(克隆检测)非分类任务(代码总结)
【网安AIGC专题11.1】11 Coreset-C 主动学习:特征选择+11种采样方法+CodeBERT、GraphCodeBERT+多分类(问题分类)二元分类(克隆检测)非分类任务(代码总结)
260 0
书写自动智慧文本分类器的开发与应用:支持多分类、多标签分类、多层级分类和Kmeans聚类
书写自动智慧文本分类器的开发与应用:支持多分类、多标签分类、多层级分类和Kmeans聚类
书写自动智慧文本分类器的开发与应用:支持多分类、多标签分类、多层级分类和Kmeans聚类
RNAseq|组学分型-ConsensusClusterPlus(一致性聚类), NMF(非负矩阵分解)
RNAseq|组学分型-ConsensusClusterPlus(一致性聚类), NMF(非负矩阵分解)
1316 0
决策树分类算法(包含隐形眼镜分类的代码)
一个有监督学习算法 、属于判别模型 、非线性分类
200 0
决策树分类算法(包含隐形眼镜分类的代码)
基于朴素贝叶斯算法对肿瘤类别分类
基于朴素贝叶斯算法对肿瘤类别分类
233 0
基于朴素贝叶斯算法对肿瘤类别分类
AutoML | AutoSklearn的基本分类、回归、多输出回归和多标签分类数据集的使用示例
AutoML | AutoSklearn的基本分类、回归、多输出回归和多标签分类数据集的使用示例
259 0
AutoML | AutoSklearn的基本分类、回归、多输出回归和多标签分类数据集的使用示例