[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數據分析與挖掘》   --張良均


發佈了74 篇原創文章 · 獲贊 18 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章