python数据分析天⽓预报论⽂_⽤python+sklearn(机器学
习)实现天⽓预报数。。。
项⽬地址
系列教程
0.前⾔
在上⼀篇教程⾥我们已经获取了所需要的全部数据,包括训练数据集和测试数据集,使⽤ProcessData()调⽤,所以接下来写模型的建⽴和预测
1.建⽴模型
没段代码在⽂章后⾯都会整合成⼀段,分段展⽰只是便于阅读
a.准备
引⼊所需要的头⽂件
semble import RandomForestRegressor # 随机树森林模型
import joblib # 保存模型为pkl
ics import mean_absolute_error # MAE评估⽅法
from ProcessData import ProcessData # 取数据
选择模型
⾸先我们先要从模型⾥选择⼀项适合这次场景的模型,⽐如从决策树,随机树森林,RGB模型等等中选择,本处选⽤的随机树森林也就是RandomForest
选择评估⽅法
⽬前有许多的模型准确率评估⽅法,本处使⽤的是MAE,也就是mean_absolute_error 平均错误数值,就每个预测的数值离正确数值错误数值的平均数
获取数据集
这次可以从ProcessData()获取到全部的被预处理后的数据,如
# 取到数据
[X_train, X_valid, y_train, y_valid, X_test] = ProcessData()
b.建⽴模型
# ⽤XGB模型,不过⽤有bug
# modelX = XGBRegressor(n_estimators=1000, learning_rate=0.05, random_state=0, n_jobs=4)
# # model.fit(X_train_3, y_train_3)
# # model.fit(X_train_2, y_train_2)
# col = ["Ave_t", "Max_t", "Min_t", "Prec","SLpress", "Winddir", "Windsp", "Cloud"]
# modelX.fit(X_train, y_train,
# early_stopping_rounds=5,
char类型的数组# eval_set=[(X_valid, y_valid)],
# verbose=False)
# 随机树森林模型
model = RandomForestRegressor(random_state=0, n_estimators=1001) # 训练模型
model.fit(X_train, y_train)
其中n_estimators是可⾃⼰选的,不过在多次调试后得到1001是MAE最优
c.获取模型评估结果
# ⽤MAE评估
score = mean_absolute_error(y_valid, preds)
d.⽤joblib模块保存模型
保存后的模型便于传播即可多次使⽤,但当前环境下的需求不⼤但我还是写了
# 保存模型到本地
joblib.dump(model, a)
cdn加速是什么意思
e.封装
GetModel.py
# -*- coding: utf-8 -*-
# @Time: 2020/12/16
# @Author: Eritque arcus
# @File: GetModel.py
semble import RandomForestRegressor
import joblib
ics import mean_absolute_error
from ProcessData import ProcessData
# 训练并保存模型
def GetModel(a="Model.pkl"):
"""
:param a: 模型⽂件名
:return:
[socre: MAE评估结果,
X_test: 预测数据集]
"""
# 取到数据
[X_train, X_valid, y_train, y_valid, X_test] = ProcessData()
# ⽤XGB模型,不过⽤有bug
# modelX = XGBRegressor(n_estimators=1000, learning_rate=0.05, random_state=0, n_jobs=4) # # model.fit(X_train_3, y_train_3)
# # model.fit(X_train_2, y_train_2)
# col = ["Ave_t", "Max_t", "Min_t", "Prec","SLpress", "Winddir", "Windsp", "Cloud"]
# modelX.fit(X_train, y_train,
# early_stopping_rounds=5,
# eval_set=[(X_valid, y_valid)],
# verbose=False)
# 随机树森林模型
model = RandomForestRegressor(random_state=0, n_estimators=1001)
# 训练模型
model.fit(X_train, y_train)
# 预测模型,⽤上个星期的数据
递归算法实现二分查preds = model.predict(X_valid)
# ⽤MAE评估
score = mean_absolute_error(y_valid, preds)
# 保存模型到本地
joblib.dump(model, a)
# 返回MAE
return [score, X_test]
2.总控
代码
这⼏篇⽂章写了零零散散好⼏个类,所以要写个总⽂件也就是启动⽂件串起来,然后在控制台输出
Main.py
气象python零基础入门教程
# -*- coding: utf-8 -*-
# @Time: 2020/12/16
# @Author: Eritque arcus
# @File: Main.py
import joblib
import datetime as DT
from GetModel import GetModel
import matplotlib.pyplot as plt
# 训练并保存模型并返回MAE
r = GetModel()
print("MAE:", r[0])
# 读取保存的模型
model = joblib.load('Model.pkl')
# 最终预测结果
preds = model.predict(r[1])
# 反归⼀化或标准化,不过出bug了,不⽤
# for cols in range(0, len(preds)):
# preds[cols] = scaler.inverse_transform(preds[cols])
# sns.lineplot(data=preds)
# plt.show()
# 打印结果到控制台
print("未来7天预测")js毫秒数转日期格式
print(preds)
all_ave_t = []
all_high_t = []
all_low_t = []
for a in range(1, 7):
today = w()
time = (today + DT.timedelta(days=a)).date()
ar, '/', h, '/', time.day,
': 平均⽓温', preds[a][0],
'最⾼⽓温', preds[a][1],
'最低⽓温', preds[a][2],
"降⾬量", preds[a][3],
"风⼒", preds[a][4])
all_ave_t.append(preds[a][0])
all_high_t.append(preds[a][1])
all_low_t.append(preds[a][2])
temp = {"ave_t": all_ave_t, "high_t": all_high_t, "low_t": all_low_t} # 绘画折线图
plt.plot(range(1, 7), temp["ave_t"], color="green", label="ave_t") plt.plot(range(1, 7), temp["high_t"], color="red", label="high_t") plt.plot(range(1, 7), temp["low_t"], color="blue", label="low_t") plt.legend() # 显⽰图例
plt.ylabel("Temperature(°C)")
plt.xlabel("day")
# 显⽰
plt.show()
使⽤⽅法
直接⽤python运⾏pre_weather/Main.py,就会在控制台输出预测的数据
python pre_weather/Main.py
或
在你的python代码⾥⽤joblib导⼊⽣成的模型,然后输⼊你的数据进⾏预测
(PS: 因为模型的训练⽤的数据⽇期和你预测数据的⽇期有关,所以不建议直接⽤使⽤⾮当天训练的模型进⾏预测,误差可能偏⼤)如以下代码(在Main.py的11⾏):
import joblib
# 读取保存的模型
model = joblib.load('Model.pkl')
# 最终预测结果
preds = model.predict(r[1])
其中,r[1]是预测数据
或
传奇access数据库怎么修改数据参考Main.py,⾃⼰写⼀个符合你需求的启动⽂件
3.最后效果
本系列教程到这就结束了,代码具体还要以github项⽬:PYWeatherReport为主,可能会在这个github项⽬上不定期优化更新
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论