本人使用python进行高光谱图像分类的实验。 数据集使用的Indian Pines 。 使用的SVC分类器进行的训练和预测。 最后希望将预测的结果进行可视化,然后和GroundTruth图做个对比。 希望好心人能传授一下可视化的原理或者代码。
1条回答 默认 最新
关注题主没有提供数据集的特征维数,也没有分类数,很难给出有针对性的建议,只能泛泛而谈。
首先,如果数据集特征维数较高,可能没有合适的数据可视化的方案。如果一定要做可视化数据,不妨用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分值解决评论 打赏 举报无用 1