《数据分析与挖掘 第九章 基于水色图像的水质评价》

基于水色图像的水质评价

数据预处理
拿到拍摄的水样图片若干,对图像进行切割,得到仅有水色图像的图片,以图片中心点左右,上下50像素切分

特征提取
提取R,G,B,的一阶,二阶,三阶矩,九种属性

模型输入
这里观察表格数据没有缺失值,所以不用进行插值什么的,直接将数据二八分,百分之八十用于训练,百分之二十用于测试:

import pandas as pd

inputfile = 'moment.csv'
#将数据分成训练集和测试集导出的文件名
outputfile1 = 'cm_train.xls'
outputfile2 = 'cm_test.xls'
data = pd.read_csv(inputfile,encoding = 'gbk')#读取数据,指定编码为gbk
data = data.values

from numpy.random import shuffle #引入随机函数
shuffle(data) #随机打乱函数
#取打了乱后的数据前百分之八十为训练数据,后百分十二十位测试数据
data_train = data[:int(0.8*len(data)),:]
data_test = data[int(0.8*len(data)):,:]

这里编码模式采用gbk模式,与平时我们使用的uft8有什么区别呢:
gbk编码:是指中国的中文字符,它包含了简体中文与繁体中文字符,另外还有一种字符“gb2312”,这种字符仅能存储简体中文字符。
UTF-8编码:它是一种全国家通过的一种编码,如果你的网站涉及到多个国家的语言,那么建议你选择UTF-8编码。
UTF8编码格式很强大,支持所有国家的语言,正是因为它的强大,才会导致它占用的空间大小要比GBK大,对于网站打开速度而言,也是有一定影响的。
GBK编码格式,它的功能少,仅限于中文字符,当然它所占用的空间大小会随着它的功能而减少,打开网页的速度比较快。
在这里插入图片描述
可以查看到,训练数据条数正好是百分之八十,测试数据正好是百分之二十,查看data,已经被打乱

我们发现九个属性都是在0-1之间,用于SVM训练的话,区分度会比较小,所以不妨同时扩大一个倍数,不影响结果,但是扩大倍数k不能太大也不能太小。本次选k = 30

#将特征与标签分开,并且特征扩大30倍,标签不作处理
x_train = data_train[:,2:]*30
y_train = data_train[:,0].astype(int)
x_test = data_test[:,2:]*30
y_test = data_test[:,2:].astype(int)

在这里插入图片描述
这里已经将训练数据集和测试数据集的标签和特征分开了,并且特征也已经扩大了三十倍
然后,用SVM模型:

#导入模型相关的函数,建立并且训练模型
from sklearn import svm
model = svm.SVC()
model.fit(x_train,y_train)
import pickle
pickle.dump(model,open('svm.model','wb'))
#保存模型,方便下次直接使用模型
#调用的时候可以使用下面语句:
#model = pickle.load(open('svm.model','rb'))

然后通过看混淆矩阵,分析结果:

#导入相关的库,生成混淆矩阵
from sklearn import metrics
#训练样本的混淆矩阵
cm_train = metrics.confusion_matrix(y_train,model.predict(x_train))
#测试样本的混淆矩阵
cm_test = metrics.confusion_matrix(y_test,model.predict(x_test))

#将得到的混淆矩阵保存起来,保存结果
pd.DataFrame(cm_train,index = range(1,6),columns = range(1,6)).to_excel(outputfile1)
pd.DataFrame(cm_test,index = range(1,6),columns = range(1,6)).to_excel(outputfile2)

将两个混淆矩阵保存到xls
cm_train:
在这里插入图片描述
cm_test:
在这里插入图片描述
模型分析
通过混淆矩阵,算准确性等

拓展
测试空气质量:

import pandas as pd

inputfile = '拓展.xls'
#将数据分成训练集和测试集导出的文件名
outputfile1 = 'cm_train.xls'
outputfile2 = 'cm_test.xls'
data = pd.read_excel(inputfile,encoding = 'utf8')#读取数据,指定编码为gbk
data = data.values

from numpy.random import shuffle #引入随机函数
shuffle(data) #随机打乱函数
#取打了乱后的数据前百分之八十为训练数据,后百分十二十位测试数据
data_train = data[:int(0.8*len(data)),:]
data_test = data[int(0.8*len(data)):,:]

#将特征与标签分开,并且特征扩大30倍,标签不作处理
x_train = data_train[:,:6]*30
y_train = data_train[:,6]
x_test = data_test[:,:6]*30
y_test = data_test[:,6]

#导入模型相关的函数,建立并且训练模型
from sklearn import svm
model = svm.SVC()
model.fit(x_train,y_train)

#导入相关的库,生成混淆矩阵
from sklearn import metrics
#训练样本的混淆矩阵
cm_train = metrics.confusion_matrix(y_train,model.predict(x_train))
#测试样本的混淆矩阵
cm_test = metrics.confusion_matrix(y_test,model.predict(x_test))

#将得到的混淆矩阵保存起来,保存结果
pd.DataFrame(cm_train,index = range(7),columns = range(7)).to_excel(outputfile1)
pd.DataFrame(cm_test,index = range(6),columns = range(6).to_excel(outputfile2)

cm_test:
在这里插入图片描述
cm_train:
在这里插入图片描述

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值