Python数据分析案例16——水质检测(支持向量机)
本次带来图片分类的案例,水质检测。
数据展示五种类别的水质,图片形式储存的:
前面1是代表水质的类别标签,后面是样本个数。
需要这代码演示数据的同学可以参考:数据
图片特征构建import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os,re
from PIL import Image
path = '../data/images/'
'# 自定义获取图片名称函数
def getImgNames(path=path):
'''
获取指定路径中所有图片的名称
:param path: 指定的路径
:return: 名称列表
'''
filenames = os.listdir(path)
imgNames = []
for i in filenames:
if re.findall('^d_d+.jpg$', i) != []:
imgNames.append(i)
return imgNames
图片数据构建特征:
一般情况下,采集到的水样图像包含盛水容器,且容器的颜色与水体颜色差异较大,同时水体位于图像中央,所以为了提取水色的特征,就需要提取水样图像中央部分具有代表意义的图像,具体实施方式是提取水样图像中央101×101像素的图像。
构建色彩的颜色矩:
三个颜色通道RBG,每个颜色构建三阶特征矩:
# 批量处理图片数据
imgNames = getImgNames(path=path)
n = len(imgNames)
data = np.zeros([n, 9])
labels = np.zeros([n])
计算特征,赋值给data:
for i in range(n):
img = Image.open(path+imgNames[i])
M,N = img.size
img = img.crop((M/2-50,N/2-50,M/2+50,N/2+50))
r,g,b = img.split()
rd = np.asarray(r)/255
gd = np.asarray(g)/255
bd = np.asarray(b)/255
data[i,0] = rd.mean()
data[i,1] = gd.mean()
data[i,2] = bd.mean()
data[i,3] = rd.std()
data[i,4] = gd.std()
data[i,5] = bd.std()
data[i,6] = Var(rd)
data[i,7] = Var(gd)
data[i,8] = Var(bd)
labels[i] = imgNames[i][0]
数据准备好了,可以进行机器学习.
模型构建划分训练集测试集
from sklearn.model_selection import train_test_split
data_tr,data_te,label_tr,label_te = train_test_split(data,labels,test_size=0.2,stratify=labels,random_state=10)
print(data_tr.shape,data_te.shape,label_tr.shape,label_te.shape )
使用决策树算法试一下分类准确率
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(random_state=5).fit(data_tr, label_tr)
画混淆矩阵和计算准确率
from sklearn.metrics import confusion_matrix
pre_te = model.predict(data_te)
cm_te = confusion_matrix(label_te,pre_te)
print(cm_te)
model.score(data_te,label_te )
准确率也可以这样计算
from sklearn.metrics import accuracy_score
print(accuracy_score(label_te,pre_te))
决策树的准确率为85.36%,还行。
支持向量机分类在不使用深度学习算法之前,效果最好的分类算法肯定是支持向量机了,下面使用支持向量机的不同核函数进行分类:
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import KFold, StratifiedKFold
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
重新划分测试集训练集
X_train, X_test, y_train, y_test = train_test_split(data,labels,stratify=labels,test_size=0.2,random_state=10)
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape )
支持向量机的效果受到数据尺度的影响,要进行数据标准化
scaler = StandardScaler()
scaler.fit(X_train)
X_train_s = scaler.transform(X_train)
X_test_s = scaler.transform(X_test)
线性核函数
model = SVC(kernel="linear", random_state=123)
model.fit(X_train_s, y_train)
model.score(X_test_s, y_test)
准确率为92.7%
二阶多项式核函数
model = SVC(kernel="poly", degree=2, random_state=123)
model.fit(X_train_s, y_train)
model.score(X_test_s, y_test)
准确率为53.6%,好像不行
三阶多项式核函数
model = SVC(kernel="poly", degree=3, random_state=123)
model.fit(X_train_s, y_train)
model.score(X_test_s, y_test)
高斯核函数
model = SVC(kernel="rbf", random_state=123)
model.fit(X_train_s, y_train)
model.score(X_test_s, y_test)
sigmod核函数
model = SVC(kernel="sigmoid",random_state=123)
model.fit(X_train_s, y_train)
model.score(X_test_s, y_test)
可以看到效果最好的是高斯核函数
下面对高斯核函数进行超参数搜索
param_grid = {'C': [0.001,0.01,0.1, 1,1.5,2,2.5,3,4,5,6,7,8,9,10,11,12,14,16,18,20], 'gamma': [0.001,0.01,0.1, 1,2,3,4,5,6,7,8,9,10]}
kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=1)
model = GridSearchCV(SVC(kernel="rbf", random_state=123), param_grid, cv=kfold)
model.fit(X_train_s, y_train)
最优超参数;
model.best_params_
准确率:
model.score(X_test_s, y_test)
准确率好像没怎么变化。支持向量机确实对超参数不是很敏感,调参效果不怎么明显。
预测:
pred = model.predict(X_test_s)
pred
计算混淆矩阵
pd.crosstab(y_test, pred, rownames=['Actual'], colnames=['Predicted'])
画混淆矩阵热力图
from sklearn.metrics import ConfusionMatrixDisplay
ConfusionMatrixDisplay.from_estimator(model, X_test_s, y_test,cmap='Blues')
plt.tight_layout()
创作不易,看官觉得写得还不错的话点个关注和赞吧,本人会持续更新python数据分析领域的代码文章~(需要定制代码可私信)
相关知识
sklearn机器学习支持向量机案例解析
探索MATLAB支持向量机分类:从入门到精通
基于支持向量机方法建立土壤湿度预测模型的探讨
R语言与支持向量机SVM应用实例
AI技术为生物多样性保护提供支持
空气质量检测数据的处理与分析方法
基于python+flask框架的水质在线监测数据预处理系统(开题+程序+论文) 计算机毕设
学好Python=基础学科能力+业务知识+ IT技术
《Python机器学习开发实战》电子书在线阅读
基于支持向量机的花生苗期抗旱指标筛选
网址: Python数据分析案例16——水质检测(支持向量机) https://www.huajiangbk.com/newsview1298541.html
上一篇: 一文带你了解锅炉水质检测标准参数 |
下一篇: 惠州水质检测中心第三方机构汇总 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039