天天看點

《資料分析與挖掘 第九章 基于水色圖像的水質評價》

基于水色圖像的水質評價

資料預處理

拿到拍攝的水樣圖檔若幹,對圖像進行切割,得到僅有水色圖像的圖檔,以圖檔中心點左右,上下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:

《資料分析與挖掘 第九章 基于水色圖像的水質評價》

繼續閱讀