一、样本数据采集
从采集到的原始水样图像中进行选择性抽取和实时的抽取,形成建模数据和增量数据。
二、数据预处理
2.1 图像切割
用其他编程软件进行编程,切割水样图像中央101*101像素的图像。若原始图像大小为M*N,则截取宽从宽从(M/2-50)到(M/2+50),长度从 (M/2-50) 到 (M/2+50) 个像素点的子图像。
2.2 颜色矩特征提取
构造出特征:
- RGB各颜色的一阶颜色矩
- RGB各颜色的二阶颜色矩
- RGB各颜色的三阶颜色矩
三、构建专家样本
根据已完成预处理的建模数据,由有经验的专家对水样图像据经验进行分类,构建专家样本。
四、模型构建
4.1 建模
#-*- coding: utf-8 -*-
import pandas as pd
inputfile = '../data/moment.csv' #数据文件
outputfile1 = '../tmp/cm_train.xls' #训练样本混淆矩阵保存路径
outputfile2 = '../tmp/cm_test.xls' #测试样本混淆矩阵保存路径
data = pd.read_csv(inputfile, encoding = 'gbk') #读取数据,指定编码为gbk
data = data.as_matrix()
from numpy.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)) #测试样本的混淆矩阵
#保存结果
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)
4.2 评价
# 1、训练集
from sklearn.metrics.classification import classification_report
print(classification_report(model.predict(x_train),y_train))
结果:
precision recall f1-score support
1 0.93 1.00 0.96 38
2 1.00 0.97 0.99 37
3 1.00 0.93 0.96 69
4 0.81 0.87 0.84 15
5 0.60 1.00 0.75 3
accuracy 0.95 162
macro avg 0.87 0.95 0.90 162
weighted avg 0.96 0.95 0.95 162
# 2、测试集
from sklearn.metrics.classification import classification_report
print(classification_report(model.predict(x_test),y_test))
# 结果:
precision recall f1-score support
1 1.00 1.00 1.00 10
2 1.00 0.80 0.89 10
3 1.00 0.88 0.93 16
4 0.62 1.00 0.77 5
5 0.00 0.00 0.00 0
accuracy 0.90 41
macro avg 0.72 0.73 0.72 41
weighted avg 0.95 0.90 0.92 41
评价指标的解释:
- Support:实际为该类别的样本数
- Precision:精确率指模型预测为正的样本中实际也为正的样本占被预测为正的样本的比例。
- Recall:召回率指实际为正的样本中被预测为正的样本所占实际为正的样本的比例。
- F1 score:是精确率和召回率的调和平均值,计算公式为:F1 = 2 * (precision * recall) / (precision + recall)
- Accuracy:准确率是分类正确的样本占总样本个数的比例。
- Macro Average:宏平均是指在计算均值时使每个类别具有相同的权重,最后结果是每个类别的指标的算术平均值。
- Micro Average:微平均是指计算多分类指标时赋予所有类别的每个样本相同的权重,将所有样本合在一起计算各个指标。
五、水质评价
将模型应用到水质自动评价系统,实现水质评价。