【Intel校企合作课程】淡水预测

目录

1. 作业简介:淡水预测

1.1 问题描述

1.2 预期解决方案

1.4 数据集来源

2. 数据预处理

2.1 数据集结构

2.2 数据集探索性分析

2.2.1 缺失值、重复值

2.2.2 特征描述性统计

2.2.3 正负标签占比

2.2.4 特征数据分布

2.2.5 相关系数柱状图

2.3 数据预处理

3. 模型训练

3.1 训练集与测试集划分

3.2 模型训练

3.2.1 随机森林算法

3.2.2 XGBoost算法

3.3 小结

4. 推理测试

4.1 随机森林算法

4.2 XGBoost算法 

        4.3 小结

5. 总结


 

1. 作业简介:淡水预测

1.1 问题描述

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

        在这个问题中,我们所需解决的是一个机器学习分类挑战——可非饮用水二分类问题。即,我们的任务是建立一个二分类模型,能够准确地判断采得样品是饮用水还是非饮用水。

1.2 预期解决方案

        我们的目标是训练一个机器学习模型,使其在给定一组样品数据时能够准确地判断其是否为饮用水。该模型应该能够推广到从未见过的样品数据,并在测试数据上表现良好。我们期待该模型在模拟的生产环境中部署的结果——这里将推理时间和二分类准确度(F1分数)作为评分的主要依据。

1.3 使用到的Intel工具包
    1. Intel-optimized Scikit-learn

        使用“面向Scikit-learn的Intel扩展”,您可以加速您的Scikit-learn程序,又不影响先前有关Scikit-learn的API与算法。面向Scikit-learn的Intel扩展是一款免费的AI加速器,可在各种应用程序中提供超过10倍甚至100倍的加速。

    2. Intel-optimized XGBoost

        XGBoost是一个优化的分布式梯度提升库,设计为高效、灵活和便携。它在Gradient Boosting框架下实现了机器学习算法。XGBoost提供了一种并行的树提升(也称为GBDT、GBM),可以快速准确地解决许多数据科学问题。

1.4 数据集来源

        这里提供一种方式下载数据集https://filerepo.idzcn.com/hack2023/datasetab75fb3.zip

2. 数据预处理

2.1 数据集结构

        本项目数据集共有5956841组数据,23个特征和1个标签。

        

data = data.infer_objects()
data.info()
print()


# 划分各特征(离散量、连续量)
cols = data.columns
discrete_cols, continuous_cols = [], []
for col in cols:  # 特征值数量统计
    if data[col].value_counts().count() < 15:  # 离散量
        discrete_cols.append(col)
    else:  # 连续量
        continuous_cols.append(col)

print("离散量:", discrete_cols)
print("连续量:", continuous_cols)

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

2.2 数据集探索性分析

2.2.1 缺失值、重复值

        对各特征的缺失值、重复值进行统计,并将结果输出。

        

        

2.2.2 特征描述性统计

        查看各特征的描述性统计,包括数量、均值、标准差、最小值、25%分位数等十个统计特征。

        

        从上面可以看出,24个特征总体上都是呈现比较标准的正态分布的

        

2.2.3 正负标签占比

        通过将淡海水样本数量绘制成饼状图,可以直观地反映出正负样本的比例关系。

        

2.2.4 特征数据分布

        通过绘制柱状图,可以看出各特征值在正坐标轴上的分布情况。此外,在这里排除了Index列和Target列。

        

2.2.5 相关系数柱状图

        

        

        根据上图可以看出,浑浊度(Turbidity)、铜含量(Copper)、氯化物含量(Chloride)与标签有着比较强的线性关系,而采样日期(Day)、来源(Source)、导电率(Conductivity)等十个特征与标签线性关系较差甚至不存在线性关系。

2.3 数据预处理

        由于存在离散量以及缺失值,我们需要进行数据预处理。此次采用的方法是,对于离散量,将其因子化,而缺失值则是用方法默认的-1将其填充;对于连续量的缺失值,则是用对应特征的中位数将其填充。实现代码如下。

        

 

3. 模型训练

        为了提升模型在整个数据集上的准确率,我们采取迭代的方式,不断划分训练集与测试集,并对模型参数进行逐步优化。以下是详细的训练步骤:

  • 数据集的划分:将数据集按照7:3的比例划分为训练集和测试集,确保训练数据充足且测试数据具有代表性。
  • 初始化过程:为所选模型设置基本参数,并确定参数优化的范围,为后续的参数调优提供基础。
  • 超参数调优:通过采用超参数调优方法,寻找能够使模型性能达到最优的一组参数组合。
  • 模型评估:在每次迭代训练后,记录评估所花费的时间,并根据预测结果与实际结果计算F1分数,以评估模型的性能。

        通过这一系列的迭代训练与评估过程,我们期望模型能够逐渐提升预测准确率,并在未知数据上表现出更好的泛化能力。

3.1 训练集与测试集划分

        由于只有一组数据集,因此需要将该数据集拆分为训练集与测试集供模型训练。这里以7:3的比例将数据集分别拆分为训练集与测试集。

          

3.2 模型训练


        在这里我使用了以下几个部分来提高训练的精度:

        (1):网格搜索 (GridSearchCV)。在指定的参数空间内,依次尝试每一组参数,从而在参数空间中找到效果最好的一组参数。由于是一次遍历每一组参数,网格搜索得到的参数效果能得到保障。

        (2):随机搜索 (RandomizedSearchCV)。与网格搜索相类似,而随机搜索在搜索时参数间隔是随机的,而非网格搜索的等间距,因而随机搜索的搜索时间更短,搜索速度更快。

3.2.1 随机森林算法

3.2.2 XGBoost算法

        

3.3 小结

        从训练算法上看,XGBoost算法对该数据集的训练效果更好,但模型拟合时间也更长。

4. 推理测试

4.1 随机森林算法

        

4.2 XGBoost算法 

        

        

        4.3 小结

        从训练算法上看,XGBoost算法对测试集的推理速度更快,并且查准率等评估指标有更好。

5. 总结


       在这次实验中,我深刻领悟到了Intel对于机器学习、深度学习以及数据分析等核心领域的库进行了精细化的优化。通过亲身实践与学习,我感受到了Intel AI Analytics Toolkit在解决理论与实践问题上的显著助力。oneAPI不仅为人工智能领域注入了新的活力,而且在机器学习和深度学习方面也表现出色,极大地简化了开发者和应用者的工作流程。

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值