返回介绍

1.模型输入

发布于 2024-01-28 21:41:24 字数 1928 浏览 0 评论 0 收藏 0

对特征提取后的样本进行抽样,抽取80%作为训练样本,剩下的20%作为测试样本,用于水质评价检验。其数据抽样代码如代码清单9-1所示。

代码清单9-1 数据抽样代码

#-*- 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%为测试数据

代码详见:demo/code/svm.py

本案例采用支持向量机作为水质评价分类模型,模型的输入包括两部分,一部分是训练样本的输入,另一部分是建模参数的输入。各参数说明如表9-3所示。

表9-3 预测模型输入变量

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

经过反复测试,本次建模中k的最优值大约为30,因此,我们将输入的特征统一乘以30,然后建立支持向量机模型,代码如代码清单9-2所示。

代码清单9-2 构建支持向量机模型代码(接9-1)

#构造特征和标签
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(output-
     file2)

代码详见:demo/code/svm.py

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文