Scikit learn 使用libSVM工具执行多类分类

Scikit learn 使用libSVM工具执行多类分类,scikit-learn,svm,libsvm,svmlight,Scikit Learn,Svm,Libsvm,Svmlight,我正在尝试使用libSVM库对卫星图像进行分类。我想要的是显示分类图像并保存它,而不仅仅是在我的终端上获得准确的结果。我已经从训练数据集中提取了像素值(如下所示),并使用脚本csv2libsvm()为libsvm提供正确格式的数据。在要分类的图像中有4个不同的类别。我的卫星图像和培训数据如下所示 图1:使用训练数据分类的图像 我遵循的步骤基于以下教程 分割培训和测试数据(70%培训和30%测试) svm-subset.py数据集12000 training.tr testing.te 训练模

我正在尝试使用
libSVM
库对卫星图像进行分类。我想要的是显示分类图像并保存它,而不仅仅是在我的终端上获得准确的结果。我已经从训练数据集中提取了像素值(如下所示),并使用脚本
csv2libsvm
()为
libsvm
提供正确格式的数据。在要分类的图像中有4个不同的类别。我的卫星图像和培训数据如下所示

图1:使用训练数据分类的图像

我遵循的步骤基于以下教程

  • 分割培训和测试数据(70%培训和30%测试)

    svm-subset.py数据集12000 training.tr testing.te

  • 训练模型

    svm train training.tr

  • 预测

    svm预测测试.te训练.tr.模型分类输出

  • 该分类的准确率为95%,非常好

    我现在真正感兴趣的是显示分类图像。因此,我需要从包含分类标签的csv文件中构建我的分类图像。这就是问题所在,但不知道如何解决。我做过(但没有工作)的事情如下:

  • 我使用
    csv
    模块将
    lbSVM
    生成的csv文件导入
    python

  • 我试图将csv文件重塑为图像的形状

  • 我的代码如下所示:

    with open('/home/io/Desktop/training/1TESTING/libSVM_classification/classification_results', 'r') as csvfile:
        reader = csv.reader(csvfile, delimiter=' ')
        results = []
        for row in reader:
            results.append(row)
        
    results_arr = np.asarray(results, dtype=int) 
    predicted = results_arr[results_arr>0] #here is my predicted labels
    
    #load the image to be classified and read the projection system
    raster_dataset = gdal.Open(sea_ice, gdal.GA_ReadOnly)
    geo_transform = raster_dataset.GetGeoTransform()
    proj = raster_dataset.GetProjectionRef()
    
    #loop over all bands of the image and append them.
    bands_data = []
    for b in range(1, raster_dataset.RasterCount+1):
        band = raster_dataset.GetRasterBand(b)
        bands_data.append(band.ReadAsArray())
    
    bands_data = np.dstack(bands_data)
    row, col, n_bands = bands_data.shape
    
    #get the classified labels from libsvm and reshape them into the initial image
    #in order to display it using matplotlib
    class_prediction = predicted.reshape(bands_data[:, :, 0].shape)
    
    待分类图像的大小为(303 x 498),由
    libsvm
    生成的预测类的大小为1807。因此,当我尝试重塑
    libsvm
    结果时,我得到了以下错误

    ValueError:无法将大小为1807的数组重塑为形状(303498)

    这个错误是有道理的。我有1907行,并试图重塑它以匹配我的初始图像,这显然是不可能的

    那么,如何显示我的分类图像?我获得了95%的准确率,但还没有找到一种方法来查看分类结果。我认为
    libsvm
    可能有将分类结果导出到tiff的选项,但它没有

    如果有任何帮助、想法或提示,我将不胜感激