python,sklearn,svm,遥感数据分类,代码实例,数据,函数,精度,遥感,路径

python,sklearn,svm,遥感数据分类,代码实例

易采站长站,站长之家为您整理了python,sklearn,svm,遥感数据分类,代码实例的相关内容。

@python,sklearn,svm,遥感数据分类,代码实例

python_sklearn_svm遥感数据分类代码实例

(1)svm原理简述

支持向量机(Support Vector Machine,即SVM)是包括分类(Classification)、回归(Regression)和异常检测(Outlier Detection)等一系列监督学习算法的总称。对于分类,SVM最初用于解决二分类问题,多分类问题可通过构建多个SVM分类器解决。SVM具有两大特点:1.寻求最优分类边界,即求解出能够正确划分训练数据集并且几何间隔最大的分离超平面,这是SVM的基本思想;2.基于核函数的扩维变换,即通过核函数的特征变换对线性不可分的原始数据集进行升维变换,使其线性可分。因此SVM最核心的过程是核函数和参数选择。

(2)svm实现环境解析

设置中文输出代码兼容格式及引用的库函数,用于精度评估的库函数,以及svm参数寻优等。

下面展示一些内联代码片。

-*- coding: utf-8 -*-

#用于精度评价

from sklearn.metrics import cohen_kappa_score

from sklearn.metrics import accuracy_score

from sklearn.metrics import confusion_matrix

#numpy引用

import numpy as np

#记录运行时间

import datetime

#文件路径操作

import os

#svm and best parameter select using grid search method

from sklearn import svm

from sklearn.model_selection import GridSearchCV

#scale the data to 0-1 用于数据归一化

from sklearn import preprocessing

(3)svm函数参数寻优

SVM参数寻优的实现,有两种常用方法,一种是网格搜索法(本文中的),另一种是使用libsvm工具通过交叉验证实现(后面再写,有兴趣的可以留言)。

def grid_find(train_data_x,train_data_y):

# 10 is often helpful. Using a basis of 2, a finer.tuning can be achieved but at a much higher cost.

# logspace(a,b,N),base默认=10,把10的a次方到10的b次方区间分成N份。

C_range = np.logspace(-5, 9, 8, base=2)

# 如:C_range = 1/64,1/8,1/2,2,8,32,128,512

gamma_range = np.logspace(-15, 3, 10, base=2)

# 选择linear线性核函数和rbf核函数

parameters = {'kernel': ('linear', 'rbf'), 'C': C_range, 'gamma': gamma_range}

svr = svm.SVC()

# n_jobs表示并行运算量,可加快程序运行结果。

# 此处选择5折交叉验证,10折交叉验证也是常用的。

clf = GridSearchCV(svr, parameters, cv=5, n_jobs=4)

# 进行模型训练

clf.fit(train_data_x, train_data_y)

print('最优c,g参数为:{0}'.format(clf.best_params_))

# 返回最优模型结果

svm_model = clf.best_estimator_

return svm_model

更多关于网格搜索法:

(4)数据读取函数编写(读取txt格式的训练与测试文件)

首先是读取txt格式的训练数据和测试数据的函数。

数据截图如下,其中,前6列数据代表通过遥感影像感兴趣区(roi)提取出的6个波段的灰度值,最后一列代表数据类别的标签。

代码如下,仅需输入文件路径即可:

def open_txt_film(filepath):

# open the film

if os.path.exists(filepath):

with open(filepath, mode='r') as f:

train_data_str = np.loadtxt(f, delimiter=' ')

print('训练(以及测试)数据的行列数为{}'.format(train_data_str.shape))

return train_data_str

else:

print('输入txt文件路径错误,请重新输入文件路径')

(5)svm模型预测函数编写

输入模型与测试数据,输出精度评估(包括混淆矩阵,制图精度等等)。

def model_process(svm_model, test_data_x, test_data_y):

p_lable = svm_model.predict(test_data_x)

# 精确度为 生产者精度 召回率为 用户精度

print('总体精度为 : {}'.format(accuracy_score(test_data_y, p_lable)))

print('混淆矩阵为 :\n {}'.format(confusion_matrix(test_data_y, p_lable)))

print('kappa系数为 :\n {}'.format(cohen_kappa_score(test_data_y, p_lable)))

matric = confusion_matrix(test_data_y, p_lable)

# output the accuracy of each category。由于类别标签是从1开始的,因此明确数据中最大值,即可知道有多少类

for category in range(np.max(test_data_y)):

# add 0.0 to keep the float type of output

precise = (matric[category, category] + 0.0) / np.sum(matric[category, :])

recall = (matric[category, category] + 0.0) / np.sum(matric[:, category])

f1_score = 2 * (precise * recall) / (recall + precise)

print(

'类别{}的生产者、制图(recall)精度为{:.4} 用户(precision)精度为{:.4} F1 score 为{:.4} '.format(category + 1, precise, recall, f1_score))

(6)主函数编写

主函数主要负责:读取数据,预处理数据,以及参数寻优、模型训练和模型预测。

针对不同的数据集,每次使用,仅仅需要修改训练与测试数据的路径即可。

def main():

# read the train data from txt film

train_file_path = r'E:\CSDN\data1\train.txt'

train_data = open_txt_film(train_file_path)

# read the predict data from txt film

test_file_path = r'E:\CSDN\data1\test.txt'

test_data = open_txt_film(test_file_path)

# data normalization for svm training and testing dataset

scaler = preprocessing.MinMaxScaler().fit(train_data[:, :-1])

train_data[:, :-1] = scaler.transform(train_data[:, :-1])

# keep the same scale of the train data

test_data[:, :-1] = scaler.transform(test_data[:, :-1])

# conversion the type of data,and the label's dimension to 1-d

train_data_y = train_data[:, -1:].astype('int')

train_data_y = train_data_y.reshape(len(train_data_y))

train_data_x = train_data[:, :-1] # 取出测试数据灰度值和标签值,并将2维标签转为1维

test_data_x = test_data[:, :-1] test_data_y = test_data[:, -1:].astype('int')

test_data_y = test_data_y.reshape(len(test_data_y))

model = grid_find(train_data_x,train_data_y)

# 模型预测

model_process(model, test_data_x, test_data_y)

(7)调用主函数

这里新增了几行代码用于记录程序运行时间。

if __name__ == "__main__":

# remember the beginning time of the program

start_time = datetime.datetime.now()

print("start...%s" % start_time)

main()

# record the running time of program with the unit of minutes

end_time = datetime.datetime.now()

last_time = (end_time - start_time).seconds / 60

print("The program is last %s" % last_time + " minutes")

# print("The program is last {} seconds".format(last_time))

(8)训练数据与测试数据实例下载地址

数据在作者的github仓库下,共两个文件(train.txt 和 test.txt) 。

[下载链接]: (https://github.com/sunzhihu123/sunzhihu123.github.io)

仓库下点击下载即可,如图:

==本文优点:仅有两个输入,一个是训练数据的路径,一个是测试数据的路径,轻松上手;并且以遥感图像数据为例。另外github将会整体上传源码哦~

作者:huhu_xq以上就是关于对python,sklearn,svm,遥感数据分类,代码实例的详细介绍。欢迎大家对python,sklearn,svm,遥感数据分类,代码实例内容提出宝贵意见

python遥感影像分类代码_python,sklearn,svm,遥感数据分类,代码实例相关推荐

  1. 遥感影像分类、目标检测、语义分割、实例分割的异同

    分类:给一张影像,识别出影像上都有哪些地物,如图1,影像上有耕地.建筑物.水域以及道路: 目标检测:识别出影像上物体的类别,并给出该物体的位置,一般用方框给出问题,如图2,红色框表示某建筑物.黄色框表 ...

  2. python遥感影像分类代码_【博客翻译】使用 Python Tensorflow 实现简单的神经网络卫星遥感影像分类...

    Landsat 5 多光谱数据分类指导手册原作者:Pratyush Tripathy 翻译:荆雪涵 姐妹篇雪涵:[博客翻译]CNN 与中分辨率遥感影像分类​zhuanlan.zhihu.com 深度学 ...

  3. 手把手教程:零基础使用MATLAB完成基于深度学习U-Net模型的遥感影像分类

    背景: 很多初入深度学习的学生都会遇到各种环境配置问题,环境搭建不好模型就跑不了,所以这是限制新手的一大难点,MATLAB具有成熟的运行环境,无需配置,这点对于想跑通一个深度学习模型的新手是非常有利的 ...

  4. 非监督分类ecognition_什么是遥感影像分类?

    什么是遥感影像分类? 图像分类是将土地覆盖物类别分配给像素的过程.例如,类包括水,城市,森林,农业和草地. 遥感中的三种主要图像分类技术是: 无监督图像分类 监督图像分类 面向对象的图像分类 无监督和 ...

  5. 八邻域轮廓跟踪算法_结合mRMR选择和IFCM聚类的遥感影像分类算法

    随着遥感成像技术的发展,高分遥感影像空间分辨率逐年提高,已经成为获取地物信息的主要数据来源之一.高分影像分类作为遥感影像处理的重要任务之一,在地理国情普查与监测.数字城市建设.城市规划等领域具有广阔的 ...

  6. 遥感影像分类算法C++实现(一)

    遥感影像分类算法C++实现(一) 简述:本文记录一些利用C++处理遥感影像的学习过程与方法,希望各位批评指正 文章目录 遥感影像分类算法C++实现(一) 前言 一.VS安装 二.GDAL库 1.下载G ...

  7. 高光谱遥感影像分类研究进展 --- (15年论文,方法主要是常规处理,但是写的比较细)

    论文地址 高光谱遥感影像分类研究进展 南大.矿大.河海 15年的文章比较老,科普文,但是理论总结和语言用词都比较扎实 在总结分类策略的基础上,重点从以核方法(SVM)为代表的新型分类器设计.特征挖掘. ...

  8. 我对遥感影像分类的理解(1)

    研究遥感影像首先要拿到影像数据,常见的有全色.rgb.多光谱.高光谱和超光谱.全色图像由于没有滤波过程,因此观察相同的空间维度,其空间分辨率要比rgb图像高得多.rgb图像本质上是红(0.630~0. ...

  9. python遥感影像分类代码_Python 实现遥感影像波段组合的示例代码

    最近要做个遥感相关的小系统,需要波段组合功能,网上找了可以使用ArcGIS安装时自带的arcpy包,但是Python3.7不能使用现有ArcGIS10.2版本,也不想再装其他版本,所以只能自己想了个办 ...

最新文章

  1. 互联网笔试各种主流语言在OJ上的的标准输入输出
  2. 3D器官和骨骼将使移植清单成为历史
  3. Tensorflow深度学习之十二:基础图像处理之二
  4. avalon数据已更新,视图未更新的bug修复
  5. 成功解决TypeError: unhashable type: 'numpy.ndarray'
  6. VTK:等参细胞演示用法实战
  7. 用python将图片写入ppt_用python做ppt服务用于导入图片
  8. java web简单线上游戏_有什么在线的编程游戏?
  9. 小乌龟git的安装、配置(TortoiseGit安装、配置)
  10. Copula理论学习(三)--copula理论及参数copula函数族
  11. Linux高性能并发服务器发开学习(二进程和线程)
  12. 如何以椭圆形显示位图
  13. 【目标检测】11、Region Proposal by Guided Anchoring
  14. php jquery 时间轴,jquery时间轴
  15. 51智联等已成“厕所”,猎聘网建“会所”求突破
  16. 北京三日自驾游-和狗狗的秦皇岛之旅
  17. guava的String之Splitter
  18. 微信文件分享的那些坑
  19. mysql概念模型中的3种基本联系_在概念模型中,通常用实体联系图表示数据的结构,其 3 个要的元素是( )、( )和( )。_学小易找答案...
  20. Project Euler in Java [001-040]

热门文章

  1. ttl接地是高电平还是低电平_(音源很重要)18新汉兰达音响改装升级原车主机改低电平RCA输出...
  2. dart 替代java_Dart与Java的语法区别
  3. ubuntu20.1 查看apt仓库_上海食品冷藏仓库出租查看
  4. asp.net core轻松入门之MVC中Options读取配置文件
  5. url参数中有+、空格、=、%、、#等特殊符号的问题解决
  6. 查看ios设备型号网址
  7. Javascript 笔记与总结(2-3)Javascript 运算符、控制结构与对象操作
  8. Jmeter运行过程中如何让Fiddler同时可以抓获到服务器的应答报文
  9. ccform 单据打印的规则调整与新增功能发布说明
  10. 什么是“GB/T ”? 计算机术语你又知道多少? 想不想别人听不懂的语言搞定别人!...