ToB企服应用市场:ToB评测及商务社交产业平台

标题: 大数据农业数据分析:基于Python呆板学习算法农业数据可视化分析预测体系( [打印本页]

作者: 金歌    时间: 2024-12-28 04:45
标题: 大数据农业数据分析:基于Python呆板学习算法农业数据可视化分析预测体系(
大数据农业数据分析:基于Python呆板学习算法农业数据可视化分析预测体系(随机丛林算法+XGBoost算法)

一、项目简介

基于python呆板学习随机丛林算法+XGBoost的算法农业数据可视化分析预测体系,旨在资助农民和相关从业者更好地预测农作物产量,以优化农业生产。该体系主要包括四个功能模块。
首先,农作物数据可视化模块利用Echarts、Ajax、Flask、PyMysql技术实现了可视化展示农作物产量相关数据的功能。
其次,产量预测模块利用pandas、numpy等技术,通过对气象和农作物产量关系数据集的分析和练习,实现了对农作物产量的预测功能。该模块可以通过随机丛林算法+XGBoost的算法对当前或未来某一时间段的农作物产量举行预测,并提供预测结果的可视化展示。
然后,用户登录与用户注册模块利用layui、Flask、PyMysql技术实现了用户登录和注册功能。用户可以通过登录体系后,利用该体系提供的预测和可视化功能,更好地规划和管理自己的农业生产。
末了,数据管理模块利用layui、Flask、PyMysql技术,实现了用户管理、公告管理和农作物数据管理等功能。体系管理员可以通过后台界面对用户信息、公告信息和农作物数据举行管理和维护,保证体系的正常运行和信息安全。
本体系的实现对农业生产的优化具有积极的意义。通过对气象和农作物产量关系数据的分析和练习,该体系可以资助用户更好地了解不同作物产量随时间变化的趋势和规律,提高农作物的产量和品质,促进农业生产的可持续发展。
二、开发环境

开发环境版本/工具PYTHON3.x开发工具PyCharm2021操作体系Windows 10内存要求16GB欣赏器Firefox数据库MySQL 8.0数据库工具Navicat Premium 15项目框架FLASK、layui 三、项目技术

后端:Flask、sklearn、PyMySQL、MySQL、urllib
前端:Jinja2、Jquery、Ajax、layui
四、功能结构

农业数据大屏可视化模块:通过ECharts实现数据可视化,展示农作物产量的趋势、关联因素等。
呆板学习预测农作物产量模型构建与练习:利用Scikit-learn、Pandas、NumPy构建呆板学习模型,对农作物产量举行预测。
用户登录与注册:通过Flask、PyMySQL、LAYUI实现用户登录和注册功能。
体系后台管理模块:
​ 用户模块:管理用户信息,权限等。
​ 公告模块:发布和管理体系相关公告信息。
​ 农作物数据管理模块:存储和管理与农作物产量预测相关的数据集。
​ 预测可视化后台交互:提供用户与预测数据的交互界面,通过随机丛林算法+XGBoost的算法利用Ajax哀求后端数据接口展示数据可视化结果。
体系结构图

五、功能实现

部分算法模型构建

随机丛林部分核心代码

  1. def model(X_data, y_label, testst, prediction):
  2.     """模型搭建
  3.     """
  4.     global params_rf  # 模型参数,设置全局变量便于调参
  5.     n_splits = 25
  6.     res = []
  7.     kf = KFold(n_splits=n_splits, shuffle=True, random_state=520)
  8.     for i, (train_index, test_index) in enumerate(kf.split(X_data)):
  9.         print('第{}次训练...'.format(i + 1))
  10.         train_data = X_data.iloc[train_index]
  11.         train_label = y_label.iloc[train_index]
  12.         valid_data = X_data.iloc[test_index]
  13.         valid_label = y_label.iloc[test_index]
  14.         rf_model = RandomForestRegressor(**params_rf)
  15.         rf_model.fit(train_data, train_label)
  16.         valid = rf_model.predict(valid_data)
  17.         valid_score = mean_squared_error(valid_label, valid) * 0.5
  18.         if valid_score > 0.01:
  19.             # 验证集分数不好的模型丢弃
  20.             continue
  21.         preds = rf_model.predict(testst)
  22.         res.append(preds)
  23.         print("\n")
  24.     res = np.array(res)
  25.     print(res.shape)
  26.     res = res.mean(axis=0)
  27.     prediction["pre_randomforest"] = res
  28.     prediction.to_csv('result_rf.csv', index=False, encoding='gbk')
  29. def arr(a):
  30.     return a.split("_")[0]
  31. if __name__ == "__main__":
  32.     # deal_loss()
  33.     # change()
  34.     # change_week()
  35.     path = "../data/"
  36.     params_rf = {
  37.         'n_estimators': 100,
  38.         'max_depth': 4,
  39.         'min_samples_split': 2,
  40.         'min_samples_leaf': 1,
  41.         'random_state': 520
  42.     }
  43.     X_data, y_label, testst, prediction = get_data()
  44.     model(X_data, y_label, testst, prediction)
复制代码
部分截图展示:

这里model 函数界说了一个随机丛林模型的练习和预测过程。参数包括练习数据 X_data、练习标签 y_label、测试数据 testst 和一个空的预测结果 prediction。在该函数中,利用 KFold 交叉验证来划分数据集,练习多个随机丛林模型,对测试集举行预测,并将结果生存到 result_rf.csv 文件中。利用均方偏差 (MSE) 衡量模型预测的准确性,计算方式为预测值与实际值之间的差异的平方的平均值。利用 r2_score 函数计算模型的 R2 拟合优度,该值越靠近1表现模型拟合得越好。利用 Matplotlib 举行预测结果的可视化,将实际值与预测值举行散点图绘制,并添加一条表现完善预测的直线,模型拟合准确准确率可以到达95%以上。
xgboost部分核心代码

  1. def model(X_data,y_label,testst,prediction):
  2.     """模型搭建
  3.     """
  4.     global params_xgb  #模型参数,设置全局变量便于调参
  5.     n_splits = 25
  6.     res = []
  7.     kf = KFold(n_splits = n_splits, shuffle=True, random_state=520)
  8.     for i, (train_index, test_index) in enumerate(kf.split(X_data)):
  9.         print('第{}次训练...'.format(i+1))
  10.         train_data = X_data.iloc[train_index]
  11.         train_label = y_label.iloc[train_index]
  12.         valid_data = X_data.iloc[test_index]
  13.         valid_label = y_label.iloc[test_index]
  14.         xgb_train = xgb.DMatrix(train_data, label=train_label)
  15.         xgb_valid = xgb.DMatrix(valid_data, valid_label)
  16.         evallist = [(xgb_valid, 'eval'), (xgb_train, 'train')]
  17.         cgb_model = xgb.train(params_xgb, xgb_train, num_boost_round=500 , evals=evallist, verbose_eval=500, early_stopping_rounds=300, feval=myFeval)
  18.         valid = cgb_model.predict(xgb_valid, ntree_limit=cgb_model.best_ntree_limit)
  19.         valid_score = mean_squared_error(valid_label,valid)*0.5
  20.         if valid_score > 0.01:
  21.             #验证集分数不好的模型丢弃
  22.             continue
  23.         xgb_test = xgb.DMatrix(testst)
  24.         preds = cgb_model.predict(xgb_test, ntree_limit=cgb_model.best_ntree_limit)
  25.         res.append(preds)
  26.         print("\n")
复制代码

利用XGBoost(Extreme Gradient Boosting)算法举行回归任务的模型搭建函数。
封装类用于网格调参

  1. class XGBoostre(object):
  2.     """封装类用于网格调参
  3.     """
  4.     def __init__(self,**kwargs):
  5.         self.params = kwargs
  6.         if "num_boost_round" in self.params:
  7.             self.num_boost_round = self.params["num_boost_round"]
  8.         self.params.update({'objective': 'reg:squarederror','silent': 0,'seed': 1000})
  9.     def fit(self,x_train,y_train):
  10.         xgb_train = xgb.DMatrix(x_train, label=y_train)
  11.         self.bst = xgb.train(params=self.params, dtrain=xgb_train, num_boost_round=self.num_boost_round,  verbose_eval=100, feval=myFeval)
  12.     def predict(self,x_pred):
  13.         dpred = xgb.DMatrix(x_pred)
  14.         return self.bst.predict(dpred)
  15.     def kfold(self,x_train,y_train,n_fold=5):
  16.         xgb_train = xgb.DMatrix(x_train, label=y_train)
  17.         bst_cv = xgb.cv(params=self.params, dtrain=xgb_train,feval=myFeval,num_boost_round=self.num_boost_round, nfold=n_fold,)
  18.         return bst_cv.iloc[-1,:]
  19.     def plt_feature_importance(self):
  20.         feat = pd.Series(self.bst.get_fscore()).sort_values(ascending=False)
  21.         feat.plot(title = "Feature_importance")
  22.     def get_params(self,deep=True):
  23.         return self.params
  24.     def set_params(self,**params):
  25.         self.params.update(params)
  26.         return self
复制代码

这个XGBoostre类为XGBoost模型提供了一个封装接口,使得用户可以更方便地举行模型练习、预测和评估,同时还可以举行参数调优和特征重要性分析。
练习模型

  1. if __name__ == "__main__":
  2.     deal_loss()
  3.     change()
  4.     change_week()
  5.     params_xgb = {
  6.         'booster': 'gbtree',
  7.         'objective': 'reg:squarederror',
  8.         'eval_metric': 'rmse',  # 对于回归问题,默认值是rmse,对于分类问题,默认值是error
  9.         'gamma': 0.1,     #损失下降多少才分裂
  10.         'max_depth': 4,
  11.         'lambda': 1.2,    #控制模型复杂度的权重值的L2曾泽化参数,参数越大越不容易过拟合
  12.         'subsample': 0.9,   #随机采样的训练样本
  13.         'colsample_bytree': 0.9,    #生成树时特征采样比例
  14.         'min_child_weight': 3,  # 6
  15.         'silent': 0,    #信息输出设置成1则没有信息输出
  16.         'eta': 0.12,   #类似学习率
  17.         'seed': 1000,
  18.         'nthread': 9,
  19.     }
  20.     X_data,y_label,testst,prediction = get_data()
  21.     model(X_data,y_label,testst,prediction)
  22.     df = pd.read_csv("result.csv",encoding="gbk")
  23.     df["区县id"] =  df["columns"].apply(arr)
复制代码

对预测模型举行练习和预测,然后将结果生存到一个 CSV 文件中,并举行后续的数据处理。
体系可视化数据哀求接口


  1. @app.route('/')
  2. def main_page():
  3.     month_rain = data_service.get_month_rain_volume()
  4.     ave_wind = data_service.get_ave_wind()
  5.     count, output, weather = data_service.get_total()
  6.     yearly_outputs = data_service.get_yearly_output()
  7.     months_temp = data_service.get_months_temp()
  8.     times_selling = data_service.get_times_selling()
  9.     months_sun = data_service.get_months_sun()
  10.     table_list = data_service.get_table_list()
  11.     return render_template("main.html", month_rain=month_rain,
  12.                            ave_wind=ave_wind,
  13.                            table_list=table_list,
  14.                            count=count, output=output, weather=weather,
  15.                            yearly_outputs=yearly_outputs, months_temp=months_temp,
  16.                            times_selling=times_selling, months_sun=months_sun)
复制代码
模型评分 0.5*mse

  1. def myFeval(preds, xgbtrain):
  2.     """模型评分 0.5*mse
  3.     """
  4.     xgbtrain = xgbtrain.get_label() #将xgboost.core.DMatrix类转化为ndarray类别
  5.     score = mean_squared_error(xgbtrain,preds)*0.5
  6.     return 'myFeval', score
复制代码

自界说评估函数 myFeval,用于在XGBoost模型练习过程中评估模型的性能。
六、体系实现

启动项目

可视化模块主要实现了对各个地区农业产量的轮播数据展示、对气象变化归路展 示、对气象天气举行分类统计、对日照时间举行统计柱状图分析等功能。实现流程首先 通过欣赏器发动 http 哀求,Flask 接收到哀求后,通过 PyMysql 对数据库举行查询,然 后格式化与分析后相应给前端,前端通过 Echarts 技术在举行可视化剖析与渲染,最终 实现可视化效果。

用户模块核心带主要是用户登录时候的校验,这里以用户登录的业务逻辑层代码为
例,如下图 所示。

登录页面

注册页面

管理员登录体系后台管理:

体系用户管理

公告管理

产量数据管理

气象数据管理

呆板学习算法产量预测可视化分析

随机丛林算法模型预测分析


XgBoost算法模型预测分析


体系个人登录管理

七、总结

基于随机丛林算法和基于XGBoost的算法分析预测具有许多上风,这些上风使得随机丛林算法和XGBoost成为许多应用场景的首选算法之一。
八、结语

总结来说,随机丛林算法+XGBoost的算法在性能、鲁棒性和可解释性等方面都表现精彩,使其成为解决复杂题目的强大工具,也为农业数据预测提供了可靠的建模手段。
需项目资料/商业合作/交换探讨等可以添加下面个人手刺,感谢各位的喜欢与支持!
后续持续更新更多优质内容!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4