在这篇文章中,将探讨如何使用数据科学和机器学习技术来预测农作物的损害情况。将通过简单的分类模型来尝试获得较高的准确率,并从数据集中获得深入的洞察。
目标是确定收获季节的结果,即作物是否健康(存活)、是否因农药而受损,或因其他原因受损。有两个数据集,一个用于训练,一个用于测试。
数据集中包含以下字段:
ID: 唯一标识符
Estimated_Insects_Count: 每平方米估计的昆虫数量
Crop_Type: 作物类型(0,1)
Soil_Type: 土壤类型(0,1)
Pesticide_Use_Category: 农药使用类型(1-从未使用,2-之前使用过,3-目前正在使用)
Number_Doses_Week: 每周剂量数量
Number_Weeks_Used: 使用周数
Number_Weeks_Quit: 停止使用周数
Season: 季节类别(1,2,3)
Crop_Damage: 作物损害类别(0=存活,1=其他原因损害,2=农药损害)
首先,需要导入必要的库,如NumPy、pandas、matplotlib和seaborn。然后,将数据集从CSV格式加载并转换为panda DataFrame,并检查前五行以分析数据。
在数据清洗阶段,执行以下步骤:
dataset.isnull().sum()
检查数据集中的空值,发现Number_Weeks_Used变量中有9000个缺失值。在这个阶段,将进行EDA以获得数据的洞察并熟悉数据。首先,使用info()
方法获取信息。
相关性:使用sns.heatmap()
检查相关性。从热图中得出的推断:
数据可视化:为了收集洞察,数据可视化是必不可少的。
对于单变量,绘制了Crop_Damage的计数图。观察结果:与农药损害相比,其他原因造成的作物损害较少。作物类型0的生存几率比作物类型1高。
现在,为Crop_Damage与作物类型的昆虫数量绘制了计数图。观察结果:
单变量分析中的另一个图表以收集更多洞察。观察结果:
在双变量分析中,绘制了Crop_Damage与Estimated_Insects_Count之间的条形图。从上面的图表中可以清楚地观察到,大多数昆虫攻击发生在作物类型0上。
作物类型与使用周数之间的条形图。观察结果:
在数据预处理阶段,执行以下步骤:
现在将使用箱线图检查异常值。在Insect_Count、doses_week和number_weeks_quit列中明显存在一些异常值。为了移除这些异常值,简单地找到每列的平均值,并用它替换异常值。
使用histplot检查数据的偏斜性,并观察到所有数据都呈正态分布。现在,数据集已经准备好输入机器学习模型进行分类分析。
缩放数据集:通常,第一步是丢弃目标变量,然后使用Standard Scaler对数据集进行缩放,使数据呈正态分布。
分割数据集:预处理后,现在将数据分割为训练/测试子集。
评估模型:现在检查了各种分类模型,并计算了精确度、召回率和F1分数等指标。将运行以下模型:
从初始模型准确率值来看,KNN的表现优于其他模型,准确率为83%。它具有最高的准确率得分和最小的标准差。
现在使用GridSearchCV找到最佳参数,即n_neighbors,范围为(2,30),cv=5,评分为‘accuracy’,为KNN模型找到了n_neighbor=22。
再次运行KNN模型,使用其最佳参数,即n_neighbor=22。
为了检查模型性能,现在将绘制不同的性能指标。
从观察中,发现模型的准确率(~0.84)、精确度和召回率都不错,这表明模型适合预测。
为了获得更好的结果,可以进行超参数调整,这将有助于提高模型的准确率。但总体而言,KNN在所有模型中提供了良好的准确率,因此将其保存为最终模型。