高光谱图像分类的问题

本人使用python进行高光谱图像分类的实验。 数据集使用的Indian Pines 。 使用的SVC分类器进行的训练和预测。 最后希望将预测的结果进行可视化,然后和GroundTruth图做个对比。 希望好心人能传授一下可视化的原理或者代码。

题主没有提供数据集的特征维数,也没有分类数,很难给出有针对性的建议,只能泛泛而谈。

首先,如果数据集特征维数较高,可能没有合适的数据可视化的方案。如果一定要做可视化数据,不妨用PCA降维试试看。

如果是二分类问题,可以在评估指标方面做些可视化工作,比如混淆矩阵;如果是多分类问题,基本也没啥可视化的手段。

不管题主使用LinearSVC、NuSVC或SVC的哪一种,都属于SVM二分类模型。SVM 在解决小样本、非线性及高维模式识别中表现出许 多特有的优势,并且还能够推广应用到函数拟合等其他机器学习问题中。不过,SVM 解决多元分类问题时效率较低,也难以对大规模训练样本实施训练。

下面是基于SVM的乳腺癌数据集的二分类示例代码和模型评估,摘自拙著《Python高手修炼之道》。

# -*- encoding: utf-8 -*-

"""
8.4.5 支持向量机分类
"""

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
from sklearn import svm

ds = load_breast_cancer() # 加载乳腺癌数据集
msvc = svm.SVC() # 实例化SVC分类器
mnusvc = svm.NuSVC()# 实例化NuSVC分类器
mlsvc = svm.LinearSVC(dual=False) # 实例化LinearSVC分类器
score_msvc = cross_val_score(msvc, ds.data, ds.target, cv=10)
score_mnusvc = cross_val_score(mnusvc, ds.data, ds.target, cv=10)
score_mlsvc = cross_val_score(mlsvc, ds.data, ds.target, cv=10)

print(score_msvc.mean()) # SVC交叉验证10次的平均精度
print(score_mnusvc.mean()) # NuSVC交叉验证10次的平均精度
print(score_mlsvc.mean()) # LinearSVC交叉验证10次的平均精度
# -*- encoding: utf-8 -*-

"""
8.8.2 交叉验证
"""

from sklearn.datasets import load_breast_cancer
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split as tsplit

from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = tsplit(X, y, test_size=0.1)

svc = SVC() # 实例化支持向量机分类器
svc.fit(X_train, y_train) # 训练
y_pred = svc.predict(X_test) # 预测

print(confusion_matrix(y_test, y_pred)) # 返回混淆矩阵
print(svc.score(X_test, y_test)) # 模型精度

print(accuracy_score(y_test, y_pred)) # 模型精度
print(precision_score(y_test, y_pred)) # 模型准确率
print(recall_score(y_test, y_pred)) # 模型召回率
print(f1_score(y_test, y_pred)) # f1分值