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:使用训练数据分类的图像
我遵循的步骤基于以下教程
csv
模块将lbSVM
生成的csv文件导入python
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的选项,但它没有
如果有任何帮助、想法或提示,我将不胜感激