基于SVM的近红外光谱分类

1 近红外光谱

红外光 近红外光谱仪(Near Infrared Spectrum Instrument,NIRS)是介于可见光(Vis)和中红外(MIR)之间的电磁辐射波,美国材料检测协会(ASTM)将近红外光谱区定义为780-2526nm的区域,是人们在吸收光谱中发现的第一个非可见光区。近红外光谱区与有机分子中含氢基团(O-H、N-H、C-H)振动的合频和各级倍频的吸收区一致,通过扫描样品的近红外光谱,可以得到样品中有机分子含氢基团的特征信息,而且利用近红外光谱技术分析样品具有方便、快速、高效、准确和成本较低,不破坏样品,不消耗化学试剂,不污染环境等优点,因此该技术受到越来越多人的青睐。

2 SVM算法

支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。

3 算法实现

实验数据来源于:nirpy
milk-powder数据集包含11个不同的类别,对应的样本从100%奶粉到0%奶粉(即100%椰子奶粉)下降10%。

#导入包
import pandas as pd 
import numpy as np
from matplotlib.pyplot import imshow, show, colorbar
import matplotlib.pyplot as plt
from operator import truediv
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.metrics import cohen_kappa_score
#导入数据
data = pd.read_csv('/milk-powder.csv')
y = data.iloc[:,1].values.astype('uint8')#标签
X = data.iloc[:,2:].values#光谱值
#SVM训练
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 100) #划分30%数据为测试,70%为训练
from sklearn.svm import SVC
classifier = SVC(C=1000,kernel='rbf', random_state=0) #设定核参数
classifier.fit(X_train, y_train)
# 测试集结果
y_pred = classifier.predict(X_test)
#画混淆矩阵
from pretty_confusion_matrix import pp_matrix
from sklearn.metrics import confusion_matrix
label = ['1','2','3','4','5','6','7','8','9','10','11']
cm = confusion_matrix(y_test, y_pred)
cm = pd.DataFrame(cm, index=np.unique(label), columns=np.unique(label)) 
cm.index.name = 'Actual'
cm.columns.name = 'Predicted' 
fig, ax = plt.subplots(figsize=(15,10))
plt.rcParams.update({'font.size': 12})
cmap = "Greens_r"
pp_matrix(cm, cmap=cmap)
#预测结果
counter = cm.shape[0]
list_diag = np.diag(cm)
list_raw_sum = np.sum(cm, axis=1)
each_acc = np.nan_to_num(truediv(list_diag, list_raw_sum))
average_acc = np.mean(each_acc)
kappa = metrics.cohen_kappa_score(y_pred, y_test)
overall_acc = metrics.accuracy_score(y_pred, y_test)

4 结果

用平均精度、kappa系数和总体精度衡量SVM的分类性能。

average_acc = 0.9772727272727273
kappa = 0.9831675592960979
overall_acc = 0.9848484848484849
在这里插入图片描述

  • 9
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值