[校企合作]淡水的质量预测

2024-03-20 14:30

本文主要是介绍[校企合作]淡水的质量预测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1 选题介绍

1.1 问题描述:

1.2 预期解决方案:

1.3 数据集

1.4 项目重点技术

1.4.1 Modin

1.4.2 Sklearnex

1.4.3 daal4py组件

2 数据集处理

2.1 导库导包

2.2 读入数据集和显示

2.3 数据转化

2.4 相关性分析及图像

2.5 缺失,重复,偏差处理

2.6 检查数据平衡性

3 模型训练

3.1 划分数据

3.2 模型参数定义

3.3 进行训练

3.4 训练结果验证

4 思考总结


1 选题介绍

1.1 问题描述:

  淡水是我们最重要和最稀缺的自然资源之一,仅占地球总水量的 3%。它几乎触及我们日常生活的方方面面,从饮用、游泳和沐浴到生产食物、电力和我们每天使用的产品。获得安全卫生的供水不仅对人类生活至关重要,而且对正在遭受干旱、污染和气温升高影响的周边生态系统的生存也至关重要。

1.2 预期解决方案:

  通过参考英特尔的类似实现方案,预测淡水是否可以安全饮用和被依赖淡水的生态系统所使用,从而可以帮助全球水安全和环境可持续性发展。这里分类准确度和推理时间将作为评分的主要依据。

1.3 数据集

https://filerepo.idzcn.com/hack2023/datasetab75fb3.zip

1.4 项目重点技术

1.4.1 Modin

  Modin是一个用于数据处理的高性能库,它可以替代标准的Pandas库。Modin的设计目标是使得在大规模数据集上的数据操作变得更快,并且更容易地利用多核心和分布式计算资源。主要特点包括:

1.并行化和加速: Modin利用了并行计算和分布式计算的技术,可以在多个核心或多台机器上并行处理数据,从而加速数据处理过程。

2.无需修改代码: 使用Modin可以无缝替换掉原来的Pandas代码,因为它提供了与Pandas API 兼容的接口,这意味着你可以直接将Modin导入为Pandas,并且使用相同的代码来处理数据。

3.支持多种计算引擎: Modin可以配置使用不同的后端计算引擎,包括Dask、Ray等,以适应不同的数据规模和计算需求。

1.4.2 Sklearnex

  sklearnex:借助面向 Scikit-learn* 的英特尔® 扩展,加速 Scikit-learn ,并且仍然完全符合所有 Scikit-Learn API 和算法。英特尔® Extension for Scikit-learn是一款免费软件 AI 加速器,可为各种应用程序带来超过 10-100 倍的加速。

1.4.3 daal4py组件

  daal4py:可将训练好的xgboost转换为 daal4py 模型,以便进一步改进预测时间性能, 利用底层的英特尔® 高级矢量扩展指令集(英特尔® AVX-512)硬件,最大限度地提高英特尔® 至强® 处理器上的梯度提升性能。

2 数据集处理

2.1 导库导包

import os
import xgboost
from xgboost import XGBClassifier
import time
import warningsimport numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import plotly.io as pio
import plotly.graph_objects as go
from sklearn.utils import resamplefrom sklearn.model_selection import train_test_split, StratifiedKFold, GridSearchCV, RandomizedSearchCV
from sklearn.preprocessing import RobustScaler
from sklearn.metrics import roc_auc_score, roc_curve, auc, accuracy_score, f1_score
from sklearn.preprocessing import StandardScaler
import sklearn
from sklearn.metrics import precision_recall_curve, average_precision_score
import daal4py as d4pimport modin.pandas as pd
from modin.config import Engine
Engine.put("dask")from sklearnex import patch_sklearnpatch_sklearn()

2.2 读入数据集和显示

df = pd.read_csv('data/dataset.csv')
print("Data shape: {}\n".format(df.shape))
display(df.head())df.info()

2.3 数据转化

为后续处理做准备,将离散数据转化为连续数据

display(df.head())
factor = pd.factorize(df['Color'])
print(factor)
df.Color = factor[0]
factor = pd.factorize(df['Source'])
print(factor)
df.Source = factor[0]
factor = pd.factorize(df['Month'])
print(factor)
df.Month = factor[0]df.describe()

2.4 相关性分析及图像

import matplotlib.pyplot as plt
import numpy as np# 获取相关系数并排序
bar = df.corr()['Target'].abs().sort_values(ascending=False)[1:]# 设置图形大小
plt.figure(figsize=(15, 5))# 绘制柱状图
plt.bar(bar.index, bar, width=0.4, color='skyblue')# 设置 x 轴刻度标签的旋转角度和字体大小
plt.xticks(rotation=-60, fontsize=12)# 设置 y 轴标签的字体大小
plt.yticks(fontsize=12)# 设置 x 轴和 y 轴的标签
plt.xlabel('Features', fontsize=14)
plt.ylabel('Correlation', fontsize=14)# 添加网格线
plt.grid(axis='y', linestyle='--', alpha=0.7)# 显示图形
plt.show()

舍去相关性小的特性

2.5 缺失,重复,偏差处理

display(df.isna().sum())
missing = df.isna().sum().sum()
duplicates = df.duplicated().sum()
print("\nThere are {:,.0f} missing values in the data.".format(missing))
print("There are {:,.0f} duplicate records in the data.".format(duplicates))

做如下处理

df = df.fillna(df.interpolate(method='linear'))
df = df.drop_duplicates()
display(df.isna().sum())
missing = df.isna().sum().sum()
duplicates = df.duplicated().sum()
print("\nThere are {:,.0f} missing values in the data.".format(missing))
print("There are {:,.0f} duplicate records in the data.".format(duplicates))

检查皮尔逊相关系数与缺失值的比例和数值型特征的方差值来筛选符合要求的特征。

最后剩下15个特征

from scipy.stats import pearsonrvariables = df.columns
df = dfvar = df.var()
numeric = df.columns
df = df.fillna(df.interpolate())
for i in range(0, len(var) - 1):if var[i] <= 0.1:  # 方差大于10%print(variables[i])df = df.drop(numeric[i],axis=1)
variables = df.columnsfor i in range(0, len(variables)):x = df[variables[i]]y = df[variables[-1]]if pearsonr(x, y)[1] > 0.05:print(variables[i])df = df.drop(variables[i],axis=1)variables = df.columns
print(variables)
print(len(variables))

2.6 检查数据平衡性

import matplotlib.pyplot as plt# 获取目标列的值计数
target_counts = df.Target.value_counts()# 重命名索引标签
target_counts.rename(index={1: 'state 1', 0: 'state 0'}, inplace=True)# 绘制饼图
plt.figure(figsize=(8, 6))
plt.pie(target_counts, labels=target_counts.index, autopct='%1.1f%%', startangle=140, colors=['lightblue', 'lightgreen'])
plt.axis('equal')  # 使饼图呈正圆形
plt.title('Distribution of Target')
plt.show()

2.7 将数据进行正态分布变化

df.hist(bins=50,figsize=(16,12))
# 针对不规则分布的变量进行非线性变换,一般进行log
log_col = ['Iron', 'Zinc', 'Turbidity', 'Copper', 'Manganese']
show_col = []
for col in log_col:df[col + '_log'] = np.log(df[col])show_col.append(col + '_log')df[show_col].hist(bins=50,figsize=(16,12))

3 模型训练

3.1 划分数据

X = df.drop( ['Target','Iron', 'Zinc', 'Turbidity', 'Copper', 'Manganese'], axis=1)
y = df['Target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=21)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
print("Train Shape: {}".format(X_train_scaled.shape))
print("Test Shape: {}".format(X_test_scaled.shape))X_train, X_test = X_train_scaled, X_test_scaled

3.2 模型参数定义

xgb = XGBClassifier(learning_rate=0.1,n_estimators=15,max_depth=12,min_child_weight=6,gamma=0,subsample=1,colsample_bytree=1,objective='binary:logistic', nthread=4,alpha=4,scale_pos_weight=1,seed=27)
param_grid = {'max_depth': [10, 15, 20],"gamma": [0, 1, 2], "subsample": [0.9, 1], "colsample_bytree": [0.3, 0.5, 1], 'min_child_weight': [4, 6, 8], "n_estimators": [10,50, 80, 100],"alpha": [3, 4, 5]
}

3.3 进行训练

训练同时打印相关数据,最优F1值

refit_score = "f1_score"start_time = time.time()
print(start_time)
rd_search = RandomizedSearchCV(xgb, param_grid, n_iter=10, cv=3, refit=refit_score, scoring=sklearn.metrics.make_scorer(f1_score), verbose=10, return_train_score=True)
rd_search.fit(X_train, y_train)
print(rd_search.best_params_)
print(rd_search.best_score_)
print(rd_search.best_estimator_)
print(time.time() - start_time)

3.4 训练结果验证

将训练好的模型对统一测试集test_data.csv进行测试

test_data = pd.read_csv('data/test_data.csv')test_data = test_data.drop(columns=['Index', 'Day', 'Time of Day', 'Month', 'Water Temperature', 'Source', 'Conductivity', 'Air Temperature'])
pd.factorize(test_data['Color'])
test_data.Color = factor[0]
test_data = test_data.fillna(test_data.interpolate(method='linear'))
test_data = test_data.drop_duplicates()log_col = ['Iron', 'Zinc', 'Turbidity', 'Copper', 'Manganese']
show_col = []
for col in log_col:test_data[col + '_log'] = np.log(test_data[col])show_col.append(col + '_log')
test_data = test_data.drop( ['Iron', 'Zinc', 'Turbidity', 'Copper', 'Manganese'], axis=1)y_true = test_data['Target']
X_test = test_data.drop(columns=['Lead', 'Target'])scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)from datetime import datetime
start = datetime.now()
y_pred = xgb.predict(X_test)
time = datetime.now() - start
f1 = f1_score(y_true, y_pred)print('\n模型在测试集上的耗时: {}'.format(time))
print('模型在测试集上的f1分数: {}'.format(f1))

​​​​​​​​​​​​​​

4 思考总结

  在本次项目中,基于预测淡水质量这一实际问题,我结合了以往在机器学习和深度学习的知识,运用oneAPI组件来提升项目的运行速度和结果可靠度,自己也在这一方面有了更多的理解,尤其是daal4py的加速效率极高,使得项目模型训练速度大幅度提升,让我受益匪浅。

这篇关于[校企合作]淡水的质量预测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/829762

相关文章

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

充电宝哪个牌子好?哪个充电宝质量好且耐用?六款口碑好充电宝

现如今大家都离不开电子设备,出门必备一款充电宝,如果手机、电脑没电了还能及时得到一个续航,恢复正常出行,但是说实话现在市面上的充电宝品类层次不齐,有些价格高但是品质一般,有些价格性价比可能会更高一点,但是却很少人知道,大家往往都去追求价格高的充电宝却忽略了自己选购充电宝的一个需求,盲目跟风入手的充电宝很大一部分是不适合自己的,今天小编就把自己多年来选购充电宝的一些小技巧分享给大家!以便大家选购合适

金蝶盘点机PDA,序列号SN管理扫描入库出库质量追溯溯源防串货

比如有5个红米手机,红米手机的代码是100001, 那么这5个红米手机的条码是:100001+001,100001+002,100001+003,100001+004,100001+005, 那么入库时,依次扫描这些条码,自动生成金蝶里的入库单。并记录序列号信息。这样能实现序列号追溯,以后通过序列号就能查询出来该序列号的产品是从哪里进货的什么时候进货的,什么时间销售给谁了。 第一步:商

更改ip后还被封是ip质量的原因吗?

不同的代理IP的质量相同,一般来说可以根据以下几个因素来进行判断: 1.可用率 可用率就是提取的这些代理IP中可以正常使用的比率。假如我们无法使用某个代理IP请求目标网站或者请求超时,那么就代表这个代理不可用,一般来说免费代理的可用率普遍较低。 2.响应速度 响应速度可以用耗费时间来衡量,即计算使用这个代理请求网站一直到得到响应所耗费的时间。时间越短,证明代理的响应速度越快,用户在测试时可

2023-2024 学年第二学期小学数学六年级期末质量检测模拟(制作:王胤皓)(90分钟)

word效果预览: 一、我会填 1. 1.\hspace{0.5em} 1. 一个多位数,亿位上是次小的素数,千位上是最小的质数的立方,十万位是 10 10 10 和 15 15 15 的最大公约数,万位是最小的合数,十位上的数既不是质数也不是合数,这个数是 ( \hspace{4em} ),约等于 ( \hspace{1em} ) 万 2. 2.\hspace{0.5em} 2.

机器学习回归预测方法介绍:优缺点及适用情况

机器学习中的回归任务是预测连续变量的值,这在金融、医疗、市场分析等领域有着广泛的应用。本文将介绍几种常见的机器学习回归方法,探讨它们的基本原理、优缺点及适用情况。 目录 1. 线性回归(Linear Regression) 2. 多项式回归(Polynomial Regression) 3. 决策树回归(Decision Tree Regression) 4. 随机森林回

biostar handbook(五)|序列从何而来和质量控制

测序仪 2017年一篇发表在Nature的综述"DNA sequencing at 40: past, present and future"介绍了DNA测序这40年的发展历程。1976年,Sanger和Coulson同时发表了2种方法用于对上百个DNA碱基进行解码,这就是第一代测序技术。到了2005年,罗氏的454平台揭开了高通量测序的序幕,后面则是SOLiD,454和Illumina三方对抗

首次使用回声状态网络 (ESN) 和语音特征进行帕金森病 (PD) 预测

帕金森病(Parkinson's disease, PD)是一种使人衰弱的神经退行性疾病,它需要进行精确和早期的诊断,以便为患者提供有效的治疗和护理。这种疾病是由James Parkinson在1817年首次确定的,其特征是多巴胺生成神经元的退化。多巴胺的不足导致了一系列症状,包括静止性震颤、肌肉僵硬、运动迟缓(姿势不稳定)、以及其他重要特征,如睡眠障碍、心律失常、便秘和语音变化,这

Excel做简单的趋势预测

这种方法不能代替机器学习,时序分析等,只是为后面的时序预测提供一个经验认识。 step1         选中序号列(或时间列)与预测列如图1所示: 图1 step2         工具栏点击“数据”,然后再“数据”下点击“预测模型”,如图2所示: 图2 step3         这样就会跳出窗口,此处可以进行一些参数设置如图3所示: 图3

AI智能时代:ChatGPT如何在金融市场发挥策略分析与预测能力?

文章目录 一、ChatGPT在金融策略制定中的深度应用客户需求分析与定制化策略市场动态跟踪与策略调整策略分析与优化 二、ChatGPT在算法交易中的深度应用自动交易策略制定交易执行与监控风险管理 三、未来展望《智能量化:ChatGPT在金融策略与算法交易中的实践》亮点内容简介作者简介目录获取方式 随着人工智能技术的飞速发展,ChatGPT作为一种先进的自然语言处理模型,正逐渐