基于随机森林与支持向量机的高光谱图像分类(含python代码)

目录

一、背景

二、代码实现

三、项目代码


一、背景

基于深度学习的教程(卷积神经网络)详见:基于卷积神经网络的高光谱图像分类详细教程(含python代码)-CSDN博客

在高光谱图像分类领域,随机森林(Random Forest,RF)和支持向量机(Support Vector Machine, SVM)是两种广泛应用的机器学习算法。随机森林以其强大的集成学习能力,通过构建多个决策树并汇总它们的预测结果,能够有效地处理高维数据,捕捉到数据中的复杂模式。在高光谱图像中,每个像素点都包含了大量的光谱信息,随机森林能够利用这些信息构建出鲁棒的分类模型,尤其在处理非线性关系和噪声数据时表现出色。

相比之下,支持向量机通过寻找能够最大化不同类别之间间隔的超平面来进行分类,它在处理高维数据时同样表现出色,尤其是在数据线性可分或通过核技巧转换为线性可分的情况下。SVM的核函数能够将数据映射到更高维的空间,从而解决非线性分类问题。在高光谱图像分类中,SVM能够通过选择合适的核函数和参数,有效地识别出不同地物的光谱特征,实现高精度的分类。

两种算法各有优势,随机森林在处理大规模数据集和复杂特征交互时更为高效,而支持向量机在模型解释性和泛化能力方面表现突出。在高光谱图像分类任务中,选择哪种算法往往取决于数据的特性、分类目标以及计算资源的限制。实际应用中,研究人员常常会结合两种算法的优点,通过交叉验证和模型融合等技术,进一步提升分类性能。

二、代码实现

下面我们以IP数据集为例子进行展开讲解。

1、加载数据

将下载的数据加载进内存,便于后续处理

X = sio.loadmat('./data/Indian_pines.mat')['indian_pines']
y = sio.loadmat('./data/Indian_pines_gt.mat')['indian_pines_gt']

2、数据标准化

对数据标准化,方便模型学习特征

# 数据标准化
standard_scaler = StandardScaler()
data_standard_scaled = standard_scaler.fit_transform(X.reshape(-1, X.shape[2])).reshape(X.shape[0], X.shape[1], X.shape[2])

3、数据集的样本划分与标签分配

根据数据标签和数据,对其进行样本采样,并划分成训练集和验证集。这里以窗口为25的大小,训练集和测试集的占比分别为20%的训练,80%的验证。

print('\n... ... 数据预处理 ... ...')
mask = y>0
data, y = X[mask], y[mask]
print("获得的样本一共有:",len(data))
Xtrain, Xtest, ytrain, ytest = splitTrainTestSet(data, y, test_ratio)
print("训练集:",len(Xtrain),"验证集:",len(Xtest))

4、建立RF和SVM模型

# 建立模型并训练
model = RandomForestClassifier(n_estimators=500, random_state=42) # 随机森林
# model = SVC(kernel='rbf', C=500, random_state=42) # 支持向量机

需要哪个模型,即用该模型,取消注释即可,另一个注释。

5、训练和预测结果

model.fit(Xtrain, ytrain)# 训练模型
model.predict(Xtest)# 预测测试集

6、结果显示

classification, confusion, oa, each_acc, aa, kappa,names = reports(ytest, y_pred)
print(classification)
print("混淆矩阵\n",confusion)
print("kapap:", kappa)
print("aa:", aa)
print("oa:", oa)
print("训练时间:",train_time_1-train_time_0,"验证时间:",test_time_1-test_time_0)

以下结果是SVM的,RF的取消RF注释,并注释SVM重新运行即可:

三、项目代码

本项目的代码通过以下链接下载:基于随机森林与支持向量机的高光谱图像分类python代码

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SVM(支持向量机)是一种常用的机器学习算法,在高光谱图像分类中也有广泛的应用。下面简要介绍一下SVM高光谱图像分类代码流程。 1. 数据预处理:首先,对高光谱图像进行数据预处理,包括去除噪声、校正图像、降维等。这一步骤旨在提高分类的准确性和泛化能力。 2. 特征提取:从预处理后的高光谱图像中提取有代表性的特征。常用的特征提取方法有光谱角、主成分分析(PCA)、线性判别分析(LDA)等。这些特征能够反映图像不同区域的光谱特性。 3. 数据划分:将提取到的特征按照一定的比例划分为训练集和测试集。训练集用于训练SVM分类器,而测试集用于评估分类器的准确性和性能。 4. 模型训练:调用支持向量机算法进行模型训练。在训练过程中,SVM根据训练集的特征和标签,学习出一个能够最佳划分不同类别的超平面。 5. 模型评估:利用训练好的SVM模型对测试集进行分类,并计算分类的准确率、精确率、召回率等指标以评估模型的性能。 6. 结果分析:分析模型分类结果,可以使用混淆矩阵来直观地表示分类的结果。通过观察混淆矩阵,可以了解模型对不同类别的分类准确性。 以上就是SVM高光谱图像分类代码流程简介。当然,具体的实现过程还需要根据具体的编程语言和库进行细化。在实际应用中,还可以通过优化超参数、采用交叉验证等方法进一步提高分类器的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清纯世纪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值