注意:本文引用自专业人工智能社区Venus AI
更多AI知识请参考原站 ([www.aideeplearning.cn])
项目背景
饮用水是人类生存的基本需求之一,也是维护健康和有效保护健康政策的重要组成部分。因此,确保饮用水质量对于国家、地区和地方层面的健康和发展至关重要。在某些地区,已经证明投资于供水和卫生设施可以产生净经济效益,因为减少了不良健康效应和医疗成本,这些成本超过了实施干预措施的成本。
项目目标
本项目的主要目标是建立一个机器学习模型,通过水质指标来预测饮用水是否安全可饮用。我们将利用水质数据集中的各种指标来训练模型,以便快速、准确地判断水是否适合人类消费。这将有助于政府、水供应公司和公众监控和确保饮用水的质量,从而维护健康和提高生活质量。
项目应用
这个项目的应用潜力非常广泛。一些潜在的应用包括:
- 饮用水供应公司:可以使用该模型来定期检查饮用水质量,确保其符合标准,并采取必要的措施来解决潜在问题。
- 政府监管机构:可以使用该模型来监测和调查水质问题,确保公众的健康和安全。
- 智能家居设备:家用净水器或自动饮水机可以使用该模型来检测进入系统的水是否安全。
- 公众健康宣传:政府和非营利组织可以使用这一模型来提高公众对饮用水质量的意识,鼓励人们保持警惕。
数据集描述
我们将使用名为”water_potability.csv”的数据集,其中包含了3276个不同水体的水质指标。以下是数据集中的主要特征:
- pH值:评估水的酸碱平衡的重要参数。WHO建议的pH值范围为6.5到8.5。
- 硬度:主要由钙和镁盐引起。硬度可影响水的肥皂性能。
- 溶解固体总量 (TDS):反映水中的矿物质溶解度。高TDS值表示水中的矿物质含量高。
- 氯胺:主要用于处理饮用水的消毒剂。
- 硫酸盐:天然存在于土壤、岩石和水中的物质。
- 电导率:反映水中溶解物质的离子浓度。
- 有机碳:反映水中的有机物含量。
- 三卤甲烷:可能存在于用氯处理的水中。
- 浊度:反映水中固体物质的数量。
- 饮用水可饮性:1表示可饮,0表示不可饮。
模型选择与依赖库
为了预测饮用水的可饮性,我们将使用以下机器学习模型进行训练和比较:
- Logistic回归
- KNN分类器
- Gaussian朴素贝叶斯
- 决策树
- 随机森林分类器
- 梯度提升分类器
- AdaBoost分类器
- XGBoost分类器
在项目中,我们将使用以下Python库来进行数据预处理、可视化和模型训练:
数据预处理和探索性数据分析(Preprocessing & EDA):
- pandas
- seaborn
- matplotlib
模型训练(Model Training):
- sklearn
- xgboost
通过这个项目,我们将能够快速而准确地评估水的质量,并为决策制定者、供水公司和公众提供有关饮用水是否安全的重要信息。这将有助于确保人们享有高质量的饮用水,从而维护和提高健康水平。
代码实现
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, cross_val_score, cross_validate
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, roc_curve
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier
from sklearn.neural_network import MLPClassifier
from xgboost import XGBClassifier
def warn(*args, **kwargs):
pass
import warnings
warnings.warn = warn
data = pd.read_csv('water_potability.csv') print("{} rows and {} columns".format(*data.shape)) data.head(10)
3276 rows and 10 columns
ph | Hardness | Solids | Chloramines | Sulfate | Conductivity | Organic_carbon | Trihalomethanes | Turbidity | Potability | |
---|---|---|---|---|---|---|---|---|---|---|
0 | NaN | 204.890455 | 20791.318981 | 7.300212 | 368.516441 | 564.3086 |