[DM实战]基于水色图像的水质评价

1、背景与挖掘目标

有经验的从事渔业生产的从业者可通过观察水色变化调控水质,以维持养殖体系水体生态系统中浮游植物、微生物类、浮游动物等合理的动态平衡。由于这些多是通过经验和肉眼观察进行判断的,存在主管性引起的观察性偏倚,使观察结果的可比性、可重复性降低,不易推广应用。当前,数字图像处理技术是基于计算机视觉的,以专家经验为基础,对池塘水色进行优劣分级,实现对池塘水色的准确快速判别。

2、从采集到的原始水样图像中进行选择性抽取与实时抽取,形成建模数据和增量数据。

3、对(2)中形成的两个数据集进行数据预处理,包括图像切割和颜色矩特征提取。

4、利用(3)形成的已完成数据预处理的建模数据,由有经验的专家对水样图像根据经验进行分类,构建专家样本。

5、利用(4)的专家样本构建分类模型。

特征的取值范围都在0~1之间,也就是说,如果直接输入SVM模型的话,彼此之间区分度会比较好,因此不妨将所有特征都统一乘以一个适当的常数k,从而提高区分度和准确率。常数k的选取不能过大也不能过小,过小导致区分度较低,模型精确度差,较大则容易导致模型在训练样本中过拟合。可以根据测试准确率来选择k的最优值。

6、利用(5)的构建好的分类模型进行水质评价。

#coding:utf-8

import pandas as pd

inputfile = './data/moment.csv'    #数据文件
data = pd.read_csv(inputfile, encoding='gbk')     #读取数据,指定编码为gbk
data = data.as_matrix()     #将读取的数据转化为矩阵

from random import shuffle   #引入随机函数

shuffle(data)    #随机打乱数据
data_train = data[:int(0.8*len(data)), :]     #选取前80%为训练数据 逗号左边是行范围,逗号右边列范围,结果切片
data_test = data[int(0.8*len(data)):, :]      #选取后20%为测试数据

x_train = data_train[:, 2:]*30      #放大特征
y_train = data_train[:, 0].astype(int)
x_test = data_test[:, 2:]*30        #放大特征
y_test= data_test[:, 0].astype(int)

#导入模型相关函数,建立并且训练模型
from sklearn import svm
model = svm.SVC()
model.fit(x_train, y_train)
import pickle
pickle.dump(model, open('./tmp/svm.model','wb'))
#最后一句保存模型,以后可以通过下面语句重新加载模型
# model = pickle.load(open('./tmp/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))      #测试样本的混淆矩阵

#保存结果
outputfile1 = './tmp/cm_train.xls'
outputfile2 = './tmp/cm_test.xls'
pd.DataFrame(cm_train).to_excel(outputfile1)
pd.DataFrame(cm_test).to_excel(outputfile2)
cm_train.xls
	0	1	2
0	108	0	0
1	0	35	0
2	3	0	16
cm_test.xls
	0	1	2	3
0	13	0	0	0
1	2	11	0	0
2	1	0	13	0
3	0	1	0	0
参考自:《python数据分析与挖掘》   --张良均


猜你喜欢

转载自blog.csdn.net/u014630431/article/details/79057514