基于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
基于SVM的近红外光谱分类相关推荐
- 基于SVM的近红外光谱建模
系列文章目录 近红外光谱分析技术属于交叉领域,需要化学.计算机科学.生物科学等多领域的合作.为此,在(北京邮电大学杨辉华老师团队)指导下,近期准备开源传统的PLS,SVM,ANN,RF等经典算和SG, ...
- 利用python,基于SVM实现文本分类
项目代码见Github: 算法介绍 具体内容详见本人文档,下载链接 代码所用数据 原网站 文件结构 ├─doc_classification.py ├─stopwords.txt ├─vocabula ...
- matlab图像分类器,Matlab 基于svm的图像物体分类
Matlab 基于svm的图像物体分类 发布时间:2018-05-16 20:27, 浏览次数:1623 , 标签: Matlab svm 本周工作日志,老师布置了一个小作业,让我们使用matlab实 ...
- 基于机器学习的车牌识别系统(Python实现基于SVM支持向量机的车牌分类)
基于机器学习的车牌识别系统(Python实现基于SVM支持向量机的车牌分类) 一.数据集说明 训练样本来自于github上的EasyPR的c++版本,包含一万三千多张数字及大写字母的图片以及三千多张中 ...
- 基于SVM的点云分类(树木,建筑两类)
西南某高校遥感专业在读生(个人网站:YhQIAO)这学期选了院里张老师的<三维扫描技术>选修课,干货满满,期末有个大作业svm点云分类,正好前段时间对机器学习比较感兴趣,了解了点算法,但是 ...
- 基于SVM的乳腺癌数据集分类
目录 1.作者介绍 2.SVM算法介绍 2.1 SVM算法 2.2 SVM算法理解与分析 3.乳腺癌数据集介绍 4.基于SVM的乳腺癌数据集分类实验 4.1 导入所需要的包 4.2 导入乳腺癌数据集 ...
- Python 基于SVM和KNN算法的红酒分类
Python 机器学习之红酒分类问题 文章目录 Python 机器学习之红酒分类问题 前言 一.问题和目标是什么 1.原题 2.题目分析 二.算法简介 三.代码实现 1.算法流程框架 2.第三方库调用 ...
- HanLP 基于SVM支持向量机 训练 文本分类
一.HanLP 基于SVM支持向量机分类器 上篇文章通过朴素贝叶斯文本分类器,训练测试了 搜狗文本分类语料库迷你版 ,本篇继续测试SVM支持向量机分类器. 由于HanLP 官方给出的 SVM 分类器依 ...
- 【图像识别】基于svm植物叶子疾病检测和分类
初识SVM 同其他分类算法一样,SVM分类也是寻找合适的决策边界,为方便理解,以二分类为例. 假设存在二分类样本,我们一定可以找到一个超平面将类别分开,但是通常会存在很多这样的超平面. 那取哪个呢? ...
最新文章
- GStreamer 1.0 series序列示例
- centos使用boost过程
- Android之linux基础教学之六 异常
- Docker两个问题的讨论
- ImageSharp一个专注于NetCore平台图像处理的开源项目
- java程序员常用查询和学习的网站
- 图片照片展示html5模板
- .net实现URL重写
- 人工智能发展史_人工智能发展史:4张图看尽AI重大里程碑
- 华为鸿蒙OS用户今年底或达2亿 将发布自研鸿蒙编程语言
- java304是什么错误_304 Not Modified 的意思 (Web的Cache问题)
- 工作资讯001---行业思维模式及经典语录随时更新
- 作为开发人员,U盘32G太小了,256G才够用
- 数据库系统基础教程(1)数据库系统世界
- 盘点客户管理软件应有的功能有哪些?
- GD32 汽车诊断协议 J1850-VPW 测试
- 怎么免费获取帆软9.0激活码,帆软8.0激活码,如何激活
- 各种后缀名--使用什么软件打开
- acwing.回文质数
- ABAP VF01 / VF04销售开票增强 增加校验
热门文章
- lisp 多段线转面域_晓东CAD家园-论坛-晓东工具箱、编程申请-[编程申请]:批量面域转成闭合多段线!!!!-批量面域转成闭合多段线!!!! - Powered by Discuz!...
- springboot连接MySQL使用SSL证书
- 视频会议系统产品哪个比较好
- Android高效率实现弹出带动画效果的对话框,仿照微信对话框效果
- 北京邮电大学计算机应用技术调剂上,2017年北京邮电大学考研调剂通知
- 小牛叔讲Python第12章:面向对象类与实例(Class入门)
- uniapp 小程序uni.getLocation()不能返回中文地理位置
- gzip: stdin: unexpected end of file 问题的解决。
- 2048 Puzzle游戏攻略
- 期货CTP接口与程序化(量化交易)的对接(2)——基本概念