2023.5.9 HSI分类:KNN、SVM

发布时间 2023-05-09 22:38:18作者: MoiSheldon

今天学习用不同方法进行 HSI 分类,具体涉及的内容为 KNN、SVM。
今天主要参考了 Github 的HSI_Classification项目,里面介绍了 HSI 的机器学习方法(KNN, SVM)和深度学习方法(1D, 2D, 3D-CNN)。另外,HSI_Classification_Model包含了很多HSI分类的模型,后续了解。

一、理论部分:

1、数据集说明:

使用的数据为 Pavia Centre cene 和 Pavia University scene,下载地址为这里。两个数据集均共有9类,标签为1~9,标签为0的部分表示不含信息,这部分数据在分析前应丢弃。

2、KNN 最近邻算法:

待预测样本最邻近的K个数据点中,数目最多的类别作为预测类别。

3、SVM 支持向量机算法:

以二分类为例,假设数据集都含有二维特征。将特征向量映射为空间中的一些点,研究的问题是如何画出一条线能够最好地区分这两类数据。当数据的特征维度有多维时,样本空间的划分称为超平面,而不是二分类中的'线'。SVM画线的标准是:寻找可以区分两个类别并且能使间隔(margin)最大的线。margin就是支持向量(距离分类界面最近的数据点)之间的区域范围。
SVM的基本想法是,把低维线性不可分的数据映射到高维空间找分界面。
SVM本身用于二分类,对于多分类问题,需要对方法进行改造:直接法(修改目标函数,将多个分类面的参数求解合并到一个最优化问题中)和间接法(组合多个二分类器)。
详情可查看SVM的官网说明博客说明

4、混淆矩阵:

混淆矩阵是一个 n* n方阵(n为预测类别数),用于评估机器学习分类模型的性能,下图示例(横纵坐标也可互换)。
混淆矩阵1混淆矩阵2
对于分类模型的评估参数还包括Kappa指标(模型的偏向性越强,kappa值越低),准确率、召回率、特异性、F1 score、ROC曲线等

二、模块和函数

1、random 模块
  • random.sample(sequence, k)
    从 sequence 中随机选取 k 个数据。例如:
2、numpy 模块
  • np.asarray(a, dtype=None, order=None)
    把 a 转换成 ndarray 类型。,例如my_list = [1, 2, 3, 4, 5],my_array = np.asarray(my_list)
  • np.trace(a, offset=0, axis1=0, axis2=1)
    计算矩阵的迹(对角元素和)。
3、scipy 模块
  • scipy.io.savemat(file_name, mdict, appendmat=True, format='5', long_field_names=False, do_compression=False, oned_as='column')
    以 .mat 格式存储变量及名称,示例如下:
点击查看代码
import numpy as np
from scipy.io import savemat

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

mdict = {'a': a, 'b': b}
savemat('mydata.mat', mdict)
4、matplotlib 模块
  • plt.gca()
    返回当前绘图实例(return the current Axes instance, which represents the plot area of a figure in Matplotlib)。
  • plt.pcolor()
    对二维数据进行伪彩色处理(pseudocolor),即二维阵列中的每个数据点都由一个彩色方块表示。示例,plt.pcolor(graph, cmap='jet'),指定色彩映射参数为jet(ranges from blue to red with white in the middle)。
5、time 模块
  • time.time()time.perf_counter()
    常用于计时,示例如下:
点击查看代码
import time

start_time = time.time()

# Code to measure the time taken
# ...

end_time = time.time()

print("Time taken: ", end_time - start_time, "seconds")
6、sklearn 模块

这里的KNN算法直接使用的from sklearn.neighbors import KNeighborsClassifier。具体见KNN官网说明