日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python数据分析天气预报论文_用python+sklearn(机器学习)实现天气预报数据 模型和使用...

發布時間:2023/12/10 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python数据分析天气预报论文_用python+sklearn(机器学习)实现天气预报数据 模型和使用... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目地址

系列教程

0.前言

在上一篇教程里我們已經獲取了所需要的全部數據,包括訓練數據集和測試數據集,使用ProcessData()調用,所以接下來寫模型的建立和預測

1.建立模型

沒段代碼在文章后面都會整合成一段,分段展示只是便于閱讀

a.準備

引入所需要的頭文件

from sklearn.ensemble import RandomForestRegressor # 隨機樹森林模型

import joblib # 保存模型為pkl

from sklearn.metrics 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,

# 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)

e.封裝

GetModel.py

# -*- coding: utf-8 -*-

# @Time: 2020/12/16

# @Author: Eritque arcus

# @File: GetModel.py

from sklearn.ensemble import RandomForestRegressor

import joblib

from sklearn.metrics 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

# -*- 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天預測")

print(preds)

all_ave_t = []

all_high_t = []

all_low_t = []

for a in range(1, 7):

today = DT.datetime.now()

time = (today + DT.timedelta(days=a)).date()

print(time.year, '/', time.month, '/', 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]是預測數據

參考Main.py,自己寫一個符合你需求的啟動文件

3.最后效果

本系列教程到這就結束了,代碼具體還要以github項目:PYWeatherReport為主,可能會在這個github項目上不定期優化更新

有問題可以在評論問問

-END-

總結

以上是生活随笔為你收集整理的python数据分析天气预报论文_用python+sklearn(机器学习)实现天气预报数据 模型和使用...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。