能源大數(shù)據(jù)分析理論與實(shí)踐 課件 11.油氣大數(shù)據(jù)分析案例;12.電力大數(shù)據(jù)分析_第1頁(yè)
能源大數(shù)據(jù)分析理論與實(shí)踐 課件 11.油氣大數(shù)據(jù)分析案例;12.電力大數(shù)據(jù)分析_第2頁(yè)
能源大數(shù)據(jù)分析理論與實(shí)踐 課件 11.油氣大數(shù)據(jù)分析案例;12.電力大數(shù)據(jù)分析_第3頁(yè)
能源大數(shù)據(jù)分析理論與實(shí)踐 課件 11.油氣大數(shù)據(jù)分析案例;12.電力大數(shù)據(jù)分析_第4頁(yè)
能源大數(shù)據(jù)分析理論與實(shí)踐 課件 11.油氣大數(shù)據(jù)分析案例;12.電力大數(shù)據(jù)分析_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

油氣大數(shù)據(jù)分析案例11TheCaseofOilandGasBigData11.1油氣消費(fèi)量的影響因素分析石油和天然氣是經(jīng)濟(jì)發(fā)展的重要驅(qū)動(dòng)因素,分析油氣消費(fèi)量的影響因素和影響效果對(duì)政府決策具有重要意義。影響油氣消費(fèi)量的因素較多,本案例選取經(jīng)濟(jì)發(fā)展、經(jīng)濟(jì)結(jié)構(gòu)、科技發(fā)展及人口規(guī)模4種因素,研究其對(duì)油氣消費(fèi)量的影響,從而介紹回歸分析的應(yīng)用方法。其中,油氣消費(fèi)量用符號(hào)OGC表示;經(jīng)濟(jì)發(fā)展使用GDP指標(biāo)量化,用符號(hào)ED表示;經(jīng)濟(jì)結(jié)構(gòu)使用第三產(chǎn)業(yè)產(chǎn)值占GDP比值來(lái)量化,用符號(hào)ES表示;科技發(fā)展通過(guò)研究與試驗(yàn)發(fā)展經(jīng)費(fèi)支出來(lái)量化,用符號(hào)TD表示;人口規(guī)模使用年末總?cè)丝跀?shù)來(lái)量化,用符號(hào)PS表示。1.案例描述11.1油氣消費(fèi)量的影響因素分析2.回歸分析(1)數(shù)據(jù)采集與處理本案例以2001年—2020年全國(guó)數(shù)據(jù)為例,探究各因素對(duì)油氣消費(fèi)量的影響,數(shù)據(jù)來(lái)源于《中國(guó)統(tǒng)計(jì)年鑒》。采集數(shù)據(jù)之后,需要將數(shù)據(jù)文件保存為CSV文件,圖1部分?jǐn)?shù)據(jù)11.1油氣消費(fèi)量的影響因素分析2.回歸分析(2)繪制散點(diǎn)圖觀察變量關(guān)系首先使用pandas庫(kù)讀取數(shù)據(jù),使用前需要提前導(dǎo)入這個(gè)庫(kù)。案例中使用的數(shù)據(jù)文件名是“Oil_and_gas.csv”,然后使用read_csv()函數(shù)讀取數(shù)據(jù)文件中的數(shù)據(jù),并用第一列作為每一行的索引。繪制自變量與目標(biāo)變量之間的散點(diǎn)圖,即OGC關(guān)于ED、OGC關(guān)于ES、OGC關(guān)于TD、OGC關(guān)于PS的散點(diǎn)圖。Matplotlib庫(kù)是用于繪制可視化圖像的2D繪圖庫(kù),該部分使用Matplotlib庫(kù)的子庫(kù)matplotlib.pyplot,直接調(diào)用plot()函數(shù)對(duì)列表數(shù)據(jù)畫(huà)圖。plot()函數(shù)默認(rèn)為繪制線形(kind='line')圖形,繪制散點(diǎn)圖需要kind='scatter',設(shè)置好“x”和“y”等內(nèi)容,最終使用show()函數(shù)進(jìn)行展示。11.1油氣消費(fèi)量的影響因素分析2.回歸分析importpandasaspdimportmatplotlib.pyplotaspltfilename='Oil_and_gas.csv'data=pd.read_csv(filename,index_col=0)data.plot(kind='scatter',x='ED',y='OGC',title='ED-OGC')plt.xlabel("ED")plt.ylabel("OGC")plt.show()data.plot(kind='scatter',x='ES',y='OGC',title='ES-OGC')plt.xlabel("ES")plt.ylabel("OGC")plt.show()data.plot(kind='scatter',x='TD',y='OGC',title='TD-OGC')plt.xlabel("TD")plt.ylabel("OGC")plt.show()data.plot(kind='scatter',x='PS',y='OGC',title='PS-OGC')plt.xlabel("PS")plt.ylabel("OGC")plt.show()圖2散點(diǎn)圖繪制結(jié)果散點(diǎn)圖繪制結(jié)果如圖所示,該模型所選擇的4個(gè)自變量均與目標(biāo)變量存在線性相關(guān)關(guān)系,可以嘗試使用線性回歸方法進(jìn)行估計(jì)。11.1油氣消費(fèi)量的影響因素分析2.回歸分析(3)回歸分析模型應(yīng)用建立回歸分析模型可以使用statsmodels庫(kù),它是Python中的統(tǒng)計(jì)分析庫(kù),提供了多種用于統(tǒng)計(jì)建模和分析的函數(shù)和類(lèi),用于擬合多種統(tǒng)計(jì)模型,執(zhí)行統(tǒng)計(jì)測(cè)試及數(shù)據(jù)探索和可視化。首先使用iloc()函數(shù)定位數(shù)據(jù)所在列,并將數(shù)據(jù)類(lèi)型轉(zhuǎn)換成浮點(diǎn)型;然后使用sm.add_constant()函數(shù)在“X”上加入一列常數(shù)項(xiàng),從而得出后續(xù)的常數(shù)項(xiàng);接著使用OLS()函數(shù)建立模型,使用fit()函數(shù)獲取擬合結(jié)果,最后使用summary()函數(shù)展示擬合模型的詳細(xì)結(jié)果。importstatsmodels.apiassmX=data.iloc[:,1:5].values.astype(float)y=data.iloc[:,0].values.astype(float)X=sm.add_constant(X)model=sm.OLS(y,X)results=model.fit()print('檢驗(yàn)的結(jié)果為:\n',results.summary())11.1油氣消費(fèi)量的影響因素分析3.結(jié)果分析可以通過(guò)程序輸出結(jié)果觀察我國(guó)油氣消費(fèi)量與影響因素之間的關(guān)系,在回歸分析模型中,R2為0.998,表明模型的擬合度較好,自變量經(jīng)濟(jì)發(fā)展(ED)的回歸系數(shù)為0.0207,P值為0.446,說(shuō)明經(jīng)濟(jì)發(fā)展對(duì)油氣消費(fèi)量有正向促進(jìn)作用,但顯著性不高;經(jīng)濟(jì)結(jié)構(gòu)(ES)的回歸系數(shù)為-0.6158,P值為0.104,雖未低于0.1,但基本說(shuō)明了經(jīng)濟(jì)結(jié)構(gòu)的優(yōu)化對(duì)降低油氣消費(fèi)量產(chǎn)生了正向促進(jìn)作用;科技發(fā)展(TD)的回歸系數(shù)為0.1668,通過(guò)了5%的顯著性檢驗(yàn),表明當(dāng)科技發(fā)展水平較高時(shí),會(huì)促進(jìn)油氣消費(fèi)量的增加,說(shuō)明科技發(fā)展的方向主要是拉動(dòng)經(jīng)濟(jì)增長(zhǎng),在降低能耗方面未得到體現(xiàn);人口規(guī)模(PS)的回歸系數(shù)為3.5771,通過(guò)了1%的顯著性檢驗(yàn),表明人口規(guī)模越大,油氣消費(fèi)量越高。圖3回歸分析模型輸出結(jié)果11.2石油管線損失預(yù)測(cè)石油管線事故是指在石油管線系統(tǒng)中發(fā)生的意外事件,導(dǎo)致石油或石油產(chǎn)品的泄漏、溢出或其他不良后果,造成巨大的損失。本案例針對(duì)石油管線事故損失進(jìn)行預(yù)測(cè),通過(guò)搜集到的數(shù)據(jù)集和機(jī)器學(xué)習(xí)算法(隨機(jī)森林)建立模型來(lái)預(yù)測(cè)石油管線事故可能導(dǎo)致的損失,包括人員傷亡、環(huán)境破壞、財(cái)務(wù)成本等。本案例主要展示如何基于機(jī)器學(xué)習(xí)算法建立一個(gè)有效的預(yù)測(cè)系統(tǒng),幫助石油公司更好地管理風(fēng)險(xiǎn)和進(jìn)行資源分配,以提高石油管線安全性,降低損失。1.案例描述11.2石油管線損失預(yù)測(cè)步驟1:采集數(shù)據(jù)并準(zhǔn)備數(shù)據(jù)集。需要準(zhǔn)備用于訓(xùn)練和測(cè)試模型的數(shù)據(jù)集,數(shù)據(jù)集應(yīng)包含特征和對(duì)應(yīng)的目標(biāo)變量。特征是用于預(yù)測(cè)目標(biāo)變量的特征或指標(biāo),目標(biāo)變量是需要進(jìn)行預(yù)測(cè)的值。通常,需要將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集,其中訓(xùn)練集用于訓(xùn)練模型,測(cè)試集用于評(píng)估模型的性能。2.隨機(jī)森林回歸的步驟11.2石油管線損失預(yù)測(cè)步驟2:模型訓(xùn)練與預(yù)測(cè)。在sklearn庫(kù)中,可以使用RandomForestRegressor類(lèi)來(lái)構(gòu)建隨機(jī)森林回歸模型??梢栽O(shè)置一些參數(shù)來(lái)控制隨機(jī)森林的行為,例如決策樹(shù)的數(shù)量、特征選擇的方式、決策樹(shù)的生長(zhǎng)方式等,可以根據(jù)實(shí)際問(wèn)題和需求進(jìn)行參數(shù)的調(diào)整。使用訓(xùn)練集對(duì)隨機(jī)森林回歸模型進(jìn)行訓(xùn)練,模型將根據(jù)訓(xùn)練集中的樣本和目標(biāo)變量的值來(lái)構(gòu)建多棵決策樹(shù),并在每棵樹(shù)上進(jìn)行特征選擇和劃分。使用訓(xùn)練好的隨機(jī)森林回歸模型對(duì)測(cè)試集中的樣本進(jìn)行預(yù)測(cè),模型將對(duì)每棵決策樹(shù)的預(yù)測(cè)結(jié)果進(jìn)行平均或加權(quán)平均,從而得到最終的回歸預(yù)測(cè)結(jié)果。2.隨機(jī)森林回歸的步驟11.2石油管線損失預(yù)測(cè)步驟3:模型評(píng)估與調(diào)優(yōu)。通過(guò)與真實(shí)目標(biāo)變量的比較,評(píng)估模型的性能??梢允褂酶鞣N回歸性能指標(biāo),如均方誤差(MeanSquaredError,MSE)、平均絕對(duì)誤差(MeanAbsoluteError,MAE)、決定系數(shù)(R2)等,來(lái)評(píng)估模型的準(zhǔn)確性和泛化能力。根據(jù)評(píng)估結(jié)果可以對(duì)隨機(jī)森林回歸模型進(jìn)行調(diào)優(yōu),嘗試調(diào)整隨機(jī)森林回歸模型的參數(shù),從而提高模型的性能。步驟4:模型應(yīng)用。模型評(píng)估與調(diào)優(yōu)后,可以將訓(xùn)練好的隨機(jī)森林回歸模型保存為文件,在使用時(shí)讀取文件并進(jìn)行實(shí)際預(yù)測(cè)。2.隨機(jī)森林回歸的步驟11.2石油管線損失預(yù)測(cè)3.程序?qū)崿F(xiàn)與結(jié)果分析(1)數(shù)據(jù)預(yù)處理首先導(dǎo)入模型訓(xùn)練需要的各個(gè)包,然后利用Python的第三方庫(kù)pandas將數(shù)據(jù)集加載到DataFrame中,可以通過(guò)直接打印輸出DataFrame查看數(shù)據(jù)集的大小(數(shù)據(jù)集有多少個(gè)樣本及每個(gè)樣本有多少個(gè)特征),通過(guò)isnull()函數(shù)查看每列的非空值數(shù)量。對(duì)于空值超過(guò)50%以上的特征,直接刪除。圖4數(shù)據(jù)集部分內(nèi)容11.2石油管線損失預(yù)測(cè)3.程序?qū)崿F(xiàn)與結(jié)果分析(1)數(shù)據(jù)預(yù)處理

fromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportmean_squared_error,mean_absolute_error,r2_scoreimportmatplotlib.pyplotaspltimportnumpyasnpimportpandasaspdfromsklearn.ensembleimportRandomForestRegressorplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsedf=pd.read_csv('data.csv')columns=df.columnslack=df.isnull().sum()/2795lack=df.isnull().sum()/2795lack=lack.apply(lambdax:format(x,'.2%'))columns_1=['LiquidSubtype','LiquidName','IntentionalRelease(Barrels)','ShutdownDate/Time','RestartDate/Time','OperatorEmployeeInjuries','OperatorContractorInjuries','EmergencyResponderInjuries','OtherInjuries','PublicInjuries','AllInjuries','OperatorEmployeeFatalities','OperatorContractorFatalities','EmergencyResponderFatalities','OtherFatalities','PublicFatalities','AllFatalities']df=df.drop(columns_1,axis=1)11.2石油管線損失預(yù)測(cè)3.程序?qū)崿F(xiàn)與結(jié)果分析(1)數(shù)據(jù)預(yù)處理

對(duì)于剩下的特征,如AccidentDate/Time列,將其拆分為年、月、日三個(gè)特征,來(lái)表示事故發(fā)生時(shí)間的特征,對(duì)于PipelineLocation、PipelineType等列,由于其特征值為分類(lèi)變量,因此用One-hot編碼進(jìn)行處理,對(duì)于部分缺失值用0填充。最后根據(jù)變量的實(shí)際意義,刪除與預(yù)測(cè)事故總成本沒(méi)有關(guān)系的特征。

df['AccidentDate/Time']=pd.to_datetime(df['AccidentDate/Time'])df['AccidentMonth']=df['AccidentDate/Time'].dt.monthdf['AccidentDay']=df['AccidentDate/Time'].dt.daycolumns_2=['ReportNumber','SupplementalNumber','OperatorName','Pipeline/FacilityName','AccidentCity','AccidentCounty','AccidentState','CauseSubcategory','PublicEvacuations','OtherCosts','PropertyDamageCosts','AccidentDate/Time','OperatorID']df=df.drop(columns_2,axis=1)df.fillna(0,inplace=True)columns_3=['PipelineLocation','PipelineType','LiquidType','CauseCategory','LiquidIgnition','LiquidExplosion','PipelineShutdown']data=pd.get_dummies(df,columns=columns_3)data['AllCosts']=data.pop('AllCosts')11.2石油管線損失預(yù)測(cè)3.程序?qū)崿F(xiàn)與結(jié)果分析(2)模型訓(xùn)練與預(yù)測(cè)

首先將標(biāo)簽和特征分開(kāi),并以8∶2的比例劃分訓(xùn)練集和測(cè)試集,然后基于得到的訓(xùn)練集數(shù)據(jù)(訓(xùn)練集特征X_train和訓(xùn)練集標(biāo)簽y_train)來(lái)擬合決策樹(shù)模型,最后使用訓(xùn)練好的模型對(duì)測(cè)試集數(shù)據(jù)進(jìn)行預(yù)測(cè)。其中,使用sklearn庫(kù)中的RandomForestRegressor類(lèi)來(lái)建立決策樹(shù)模型,可以設(shè)置不同的參數(shù)來(lái)調(diào)整樹(shù)的數(shù)量、深度、分裂準(zhǔn)則等。

X=data.iloc[:,:-1]y=data.iloc[:,-1]X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=33)random_forest_regressor=RandomForestRegressor(n_estimators=20,random_state=33)random_forest_regressor.fit(X_train,y_train)y_pred=random_forest_regressor.predict(X_test)11.2石油管線損失預(yù)測(cè)3.程序?qū)崿F(xiàn)與結(jié)果分析(3)模型評(píng)估與調(diào)優(yōu)將模型得到的測(cè)試集的預(yù)測(cè)值和真實(shí)值(測(cè)試集標(biāo)簽y_test)進(jìn)行比較,可以計(jì)算均方誤差(MSE)、均方根誤差(RMSE)、平均絕對(duì)誤差(MAE)、決定系數(shù)(R2)來(lái)評(píng)估模型的擬合效果。

mse=mean_squared_error(y_test,y_pred)print("均方誤差(MSE):",mse)rmse=np.sqrt(mse)print("均方根誤差(RMSE):",rmse)mae=mean_absolute_error(y_test,y_pred)print("平均絕對(duì)誤差(MAE):",mae)r_squared=r2_score(y_test,y_pred)print("決定系數(shù)(R-squared):",r_squared)通過(guò)調(diào)整隨機(jī)森林中決策樹(shù)的數(shù)量,對(duì)比預(yù)測(cè)結(jié)果,當(dāng)n_estimator=20時(shí),模型在測(cè)試集上預(yù)測(cè)結(jié)果的R2達(dá)到了0.912,說(shuō)明模型的準(zhǔn)確率較好??蓢L試調(diào)整其他參數(shù),這里僅對(duì)n_estimator進(jìn)行了簡(jiǎn)單調(diào)優(yōu)。Thankyou!電力大數(shù)據(jù)分析12E-PowerBigDataAnalysis12.1基于LSTM方法的家庭用電量預(yù)測(cè)案例數(shù)據(jù)集來(lái)自UCI機(jī)器學(xué)習(xí)數(shù)據(jù)集,該數(shù)據(jù)集包含了2006年12月16日至2010年11月26日期間收集的1000個(gè)測(cè)量值,部分?jǐn)?shù)據(jù)集如圖所示。數(shù)據(jù)集中的特征信息如下。(1)Date:日期,格式為dd/mm/yyyy。(2)Time:時(shí)間,格式為hh:mm:ss。(3)Global_active_power:全球每分鐘消耗的家用平均有功功率(千瓦)。(4)Global_reactive_power:全球每分鐘消耗的家用平均無(wú)功功率(千瓦)。(5)Voltage:每分鐘平均電壓(伏特)。(6)Global_intensity:全球每分鐘的家用平均電流強(qiáng)度(安培)。12.1基于LSTM方法的家庭用電量預(yù)測(cè)(7)Sub_metering_1:1號(hào)能量子計(jì)量(以瓦時(shí)為單位的有功能量),主要是指廚房中的洗碗機(jī)、烤箱和微波爐消耗的電量。(8)Sub_metering_2:2號(hào)能量子計(jì)量(以瓦時(shí)為單位的有功能量),主要是指洗衣房中洗衣機(jī)、烘干機(jī)等消耗的電量。(9)Sub_metering_3:3號(hào)能量子計(jì)量(以瓦時(shí)為單位的有功能量),主要是指電熱水器和空調(diào)消耗的電量。12.1基于LSTM方法的家庭用電量預(yù)測(cè)1)數(shù)據(jù)的導(dǎo)入與預(yù)處理數(shù)據(jù)集包含一些缺失值(約占行數(shù)的1.25%),數(shù)據(jù)集中存在所有日歷時(shí)間戳,但對(duì)于某些時(shí)間戳,缺少測(cè)量值,因此需要對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。在進(jìn)行數(shù)據(jù)預(yù)處理之前,導(dǎo)入所需的數(shù)據(jù),該數(shù)據(jù)集包含2075259行和7列的數(shù)據(jù)。首先對(duì)缺失數(shù)據(jù)進(jìn)行檢查,查看各列缺失數(shù)據(jù)的情況并用均值進(jìn)行填充,以保證數(shù)據(jù)的統(tǒng)計(jì)特性,并提高分析的準(zhǔn)確性。代碼如下。defETL_data():df=pd.read_csv('household_power_consumption.txt',sep=';',parse_dates={'dt':['Date','Time']},low_memory=False,na_values=['nan','?'],index_col='dt',dayfirst=True)print(df.shape)print(df.isnull().sum())df=df.fillna(df.mean())print(df.isnull().sum())print(df.corr())returndf12.1基于LSTM方法的家庭用電量預(yù)測(cè)2)數(shù)據(jù)可視化為了進(jìn)一步理解和分析數(shù)據(jù),可以對(duì)現(xiàn)有的數(shù)據(jù)集進(jìn)行可視化操作,分別繪制各列數(shù)據(jù)每月、每日、每小時(shí)的均值,代碼如下。defdata_plot(df):i=1cols=[0,1,3,4,5,6]plt.figure(figsize=(20,10))forcolincols:plt.subplot(len(cols),1,i)plt.plot(df.resample('M').mean().values[:,col])plt.title(df.columns[col]+'dataresampleovermonthformean',y=0.75,loc='left')i+=1plt.show()i=1

12.1基于LSTM方法的家庭用電量預(yù)測(cè)cols=[0,1,3,4,5,6]plt.figure(figsize=(20,10))forcolincols:plt.subplot(len(cols),1,i)plt.plot(df.resample('D').mean().values[:,col])plt.title(df.columns[col]+'dataresampleoverdayformean',y=0.75,loc='center')i+=1plt.show()i=1cols=[0,1,3,4,5,6]plt.figure(figsize=(20,10))forcolincols:plt.subplot(len(cols),1,i)plt.plot(df.resample('H').mean().values[:,col])plt.title(df.columns[col]+'dataresampleoverhourformean',y=0.75,loc='left')i+=1plt.show()12.1基于LSTM方法的家庭用電量預(yù)測(cè)各列數(shù)據(jù)的月均值、日均值、小時(shí)均值分別如圖所示。12.1基于LSTM方法的家庭用電量預(yù)測(cè)在使用LSTM模型進(jìn)行預(yù)測(cè)之前,考慮特征之間的相關(guān)性是非常重要的。特征之間的相關(guān)性可能會(huì)影響模型的性能和預(yù)測(cè)結(jié)果,因此需要進(jìn)行一些數(shù)據(jù)分析和處理來(lái)確保模型的有效性和穩(wěn)定性。在使用LSTM模型時(shí),需要對(duì)數(shù)據(jù)集中的特征進(jìn)行選擇。特征選擇的目標(biāo)是保留重要的特征,并且避免高度相關(guān)的特征,因?yàn)檫@樣的特征可能會(huì)增加模型的復(fù)雜性。通常可以使用相關(guān)性分析等方法來(lái)幫助選擇高度相關(guān)的特征,相應(yīng)的語(yǔ)句為df.corr()。12.1基于LSTM方法的家庭用電量預(yù)測(cè)3)LSTM數(shù)據(jù)準(zhǔn)備本案例利用LSTM模型來(lái)預(yù)測(cè)Global_active_power這一變量。為了減少計(jì)算時(shí)間,并快速得到結(jié)果來(lái)測(cè)試模型,對(duì)每小時(shí)的數(shù)據(jù)進(jìn)行重抽樣,將數(shù)據(jù)大小從2075259個(gè)減少到34589個(gè)(以分鐘為單位)。因此,數(shù)據(jù)包含了當(dāng)前時(shí)間(以小時(shí)為單位)的7個(gè)輸入變量和1個(gè)“Global_active_power”輸出變量。將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集,此處選擇了34589個(gè)數(shù)據(jù)中的4000個(gè)數(shù)據(jù)進(jìn)行訓(xùn)練,其余的將用于測(cè)試模型。代碼如下。deflstm(df):df=df[['Global_active_power','Global_reactive_power','Voltage','Global_intensity','Sub_metering_2','Sub_metering_1','Sub_metering_3']]df_resample=df.resample('h').mean()values=df_resample.valuesscaler=MinMaxScaler(feature_range=(0,1))scaled=scaler.fit_transform(values)12.1基于LSTM方法的家庭用電量預(yù)測(cè)reframed=series_to_supervised(scaled,1,1)r=list(range(df_resample.shape[1]+1,2*df_resample.shape[1]))reframed.drop(reframed.columns[r],axis=1,inplace=True)values=reframed.valuesn_train_time=4000train=values[:n_train_time,:]test=values[n_train_time:,:]train_x,train_y=train[:,:-1],train[:,-1]test_x,test_y=test[:,:-1],test[:,-1]train_x=train_x.reshape((train_x.shape[0],1,train_x.shape[1]))test_x=test_x.reshape((test_x.shape[0],1,test_x.shape[1]))12.1基于LSTM方法的家庭用電量預(yù)測(cè)上述代碼中使用MinMaxScaler函數(shù)進(jìn)行歸一化處理,將數(shù)據(jù)映射到[0,1]區(qū)間,并使用fit_transform函數(shù)對(duì)values進(jìn)行歸一化處理。接下來(lái),使用series_to_supervised函數(shù)將原始數(shù)據(jù)進(jìn)行滯后期處理,將滯后一期的數(shù)據(jù)作為特征來(lái)預(yù)測(cè)當(dāng)前一期的Global_active_power。series_to_supervised函數(shù)的代碼如下。defseries_to_supervised(data,n_in=1,n_out=1,dropnan=True):n_vars=1iftype(data)islistelsedata.shape[1]dff=pd.DataFrame(data)cols,names=list(),list()foriinrange(n_in,0,-1):cols.append(dff.shift(-i))names+=[('var%d(t-%d)'%(j+1,i))forjinrange(n_vars)]foriinrange(0,n_out):12.1基于LSTM方法的家庭用電量預(yù)測(cè)cols.append(dff.shift(-i))ifi==0:names+=[('var%d(t)'%(j+1))forjinrange(n_vars)]else:names+=[('var%d(t+%d)'%(j+1))forjinrange(n_vars)]agg=pd.concat(cols,axis=1)agg.columns=namesifdropnan:agg.dropna(inplace=True)returnagg12.1基于LSTM方法的家庭用電量預(yù)測(cè)4)LSTM模型建立和擬合首先創(chuàng)建一個(gè)Sequential函數(shù),該函數(shù)允許將各個(gè)神經(jīng)網(wǎng)絡(luò)層按順序添加。然后依次添加具有100個(gè)神經(jīng)元的LSTM層、Dropout層(用于在訓(xùn)練過(guò)程中隨機(jī)禁用一部分神經(jīng)元,以減少過(guò)擬合)、Dense層(具有一個(gè)神經(jīng)元,用于輸出預(yù)測(cè)結(jié)果Global_active_power)。model=Sequential()model.add(LSTM(100,input_shape=(train_x.shape[1],train_x.shape[2])))model.add(Dropout(0.1))model.add(Dense(1))pile(loss='mean_squared_error',optimizer='adam')12.1基于LSTM方法的家庭用電量預(yù)測(cè)5)模型訓(xùn)練將這樣一個(gè)LSTM模型訓(xùn)練50個(gè)epoch,batch_size為70。即在訓(xùn)練過(guò)程中,模型將在整個(gè)數(shù)據(jù)集上迭代訓(xùn)練50次,并且在每次迭代中,都會(huì)根據(jù)70個(gè)數(shù)據(jù)樣本(數(shù)據(jù)點(diǎn))更新其權(quán)重。訓(xùn)練過(guò)程和損失函數(shù)的圖形繪制代碼如下。history=model.fit(train_x,train_y,epochs=50,batch_size=70,validation_data=(test_x,test_y),verbose=2,shuffle=False)plt.plot(history.history['loss'])plt.plot(history.history['val_loss'])plt.title('modelloss')plt.ylabel('loss')plt.xlabel('epoch')plt.legend(['train','test'],loc='upperright')plt.show()12.1基于LSTM方法的家庭用電量預(yù)測(cè)模型在訓(xùn)練集和測(cè)試集上的損失變化情況如圖所示,可以看出訓(xùn)練集和測(cè)試集上的誤差都呈現(xiàn)了收斂的狀態(tài)。size=df_resample.shape[1]yhat=model.predict(test_x)test_x=test_x.reshape((test_x.shape[0],size))inv_yhat=np.concatenate((yhat,test_x[:,1-size:]),axis=1)inv_yhat=scaler.inverse_transform(inv_yhat)inv_yhat=inv_yhat[:,0]test_y=test_y.reshape((len(test_y),1))inv_y=np.concatenate((test_y,test_x[:,1-size:]),axis=1)inv_y=scaler.inverse_transform(inv_y)inv_y=inv_y[:,0]rmse=np.sqrt(mean_squared_error(inv_y,inv_yhat))print('TestRMSE:%.3f'%rmse)print(model.summary())12.1基于LSTM方法的家庭用電量預(yù)測(cè)由于數(shù)據(jù)進(jìn)行了歸一化操作,因此需要將數(shù)據(jù)還原后重新計(jì)算均方根誤差。對(duì)模型預(yù)測(cè)結(jié)果進(jìn)行逆處理,將預(yù)測(cè)值恢復(fù)到原始的數(shù)據(jù)范圍。通過(guò)這些步驟,可以獲得模型在測(cè)試集上的實(shí)際預(yù)測(cè)結(jié)果,并進(jìn)行后續(xù)的分析和比較。代碼如下。12.1基于LSTM方法的家庭用電量預(yù)測(cè)6)訓(xùn)練結(jié)果與分析模型訓(xùn)練完成后,可以對(duì)結(jié)果進(jìn)行可視化,對(duì)比分析預(yù)測(cè)值與真實(shí)值的差異情況,此處分別比較1~500小時(shí)時(shí)段和20000~21000小時(shí)時(shí)段的預(yù)測(cè)結(jié)果,可視化代碼如下。aa=[xforxinrange(500)]plt.figure(figsize=(25,10))plt.plot(aa,inv_y[:500],marker='.',label="actual")plt.plot(aa,inv_yhat[:500],'r',label="prediction")plt.ylabel(df.columns[0],size=15)plt.xlabel('Timestepforfirst500hours',size=15)plt.legend(fontsize=15)plt.show()aa=[xforxinrange(1000)]plt.figure(figsize=(25,10))plt.plot(aa,inv_y[20000:21000],marker='.',label="actual")plt.plot(aa,inv_yhat[20000:21000],'r',label="prediction")plt.ylabel(df.columns[0],size=15)plt.xlabel('Timestepfor1000hoursfrom20,000to21,000',size=15)plt.legend(fontsize=15)plt.show()12.1基于LSTM方法的家庭用電量預(yù)測(cè)Global_active_power在1~500小時(shí)時(shí)段和20000~21000小時(shí)時(shí)段的預(yù)測(cè)值與真實(shí)值對(duì)比分別如圖所示。12.2基于Stacking融合方法的電網(wǎng)負(fù)荷預(yù)測(cè)Stacking融合方法單個(gè)模型難以擬合復(fù)雜數(shù)據(jù),且抗干擾能力較低,而集成多個(gè)模型可以結(jié)合不同模型的優(yōu)點(diǎn),提高泛化能力。集成學(xué)習(xí)主要有兩種方法:Boosting和Bagging。Boosting采用串行方式,逐步優(yōu)化基學(xué)習(xí)器以構(gòu)造強(qiáng)學(xué)習(xí)器;Bagging則構(gòu)造多個(gè)獨(dú)立基學(xué)習(xí)器,并通過(guò)選舉或加權(quán)方式提升整體性能。Stacking融合方法結(jié)合了Boosting和Bagging的特點(diǎn),首先利用多個(gè)基學(xué)習(xí)器學(xué)習(xí)原始數(shù)據(jù),再用第二層模型擬合這些學(xué)習(xí)器的輸出。Stacking又稱(chēng)堆疊泛化,通過(guò)多個(gè)基礎(chǔ)模型的預(yù)測(cè)結(jié)果構(gòu)建元模型,生成最終預(yù)測(cè),提高模型的綜合性能。12.2基于Stacking融合方法的電網(wǎng)負(fù)荷預(yù)測(cè)Stacking模型的應(yīng)用步驟如下。步驟1:數(shù)據(jù)集劃分。把原始數(shù)據(jù)集劃分成訓(xùn)練集與測(cè)試集,訓(xùn)練集部分用來(lái)訓(xùn)練Stacking模型,測(cè)試集部分用來(lái)測(cè)試Stacking模型。步驟2:基礎(chǔ)模型訓(xùn)練。Stacking模型是基于K折交叉驗(yàn)證的,把訓(xùn)練集分成K個(gè)部分(K折),訓(xùn)練K次,每一次選取一個(gè)沒(méi)有選取過(guò)的部分作為驗(yàn)證集,通過(guò)基礎(chǔ)模型得到K個(gè)預(yù)測(cè)結(jié)果,這些預(yù)測(cè)結(jié)果合并在一起變成一個(gè)新的訓(xùn)練集?;A(chǔ)模型1的訓(xùn)練過(guò)程如圖所示。12.2基于Stacking融合方法的電網(wǎng)負(fù)荷預(yù)測(cè)步驟3:元模型訓(xùn)練。將N個(gè)基礎(chǔ)模型的輸出值按照列的方式進(jìn)行堆疊,就形成了新的樣本數(shù)據(jù),將新的樣本數(shù)據(jù)作為特征,新數(shù)據(jù)的標(biāo)簽仍然為原始數(shù)據(jù)的標(biāo)簽,將新數(shù)據(jù)的和交給元模型進(jìn)行訓(xùn)練,這個(gè)模型就融合了前一輪的N個(gè)模型結(jié)果。步驟4:測(cè)試集結(jié)果輸出。在每個(gè)基礎(chǔ)模型訓(xùn)練完成后,使用訓(xùn)練后的模型對(duì)測(cè)試集進(jìn)行預(yù)測(cè)(這一步在步驟

2之后完成),這樣每個(gè)基礎(chǔ)模型均產(chǎn)生一個(gè)測(cè)試集的預(yù)測(cè)結(jié)果。同樣按照列的方式進(jìn)行堆疊,將測(cè)試集的真實(shí)標(biāo)簽作為標(biāo)簽,使用步驟

3的元模型訓(xùn)練Stacking模型,輸出測(cè)試集的預(yù)測(cè)結(jié)果,從而驗(yàn)證Stacking模型的學(xué)習(xí)效果。12.2基于Stacking融合方法的電網(wǎng)負(fù)荷預(yù)測(cè)電網(wǎng)負(fù)荷數(shù)據(jù)集案例數(shù)據(jù)集為西班牙2015年—2018年的電網(wǎng)負(fù)荷數(shù)據(jù),其中包含每小時(shí)的電網(wǎng)負(fù)荷數(shù)據(jù),共35065條記錄,可用于電網(wǎng)負(fù)荷的預(yù)測(cè),數(shù)據(jù)取自Kaggle。數(shù)據(jù)集主要包含“generationbiomass”“generationfossilbrowncoal/lignite”“generationfossilgas”“generationfossilhardcoal”“generationfossiloil”“generationhydropumpedstorageconsumption”“generationhydrorun-of-riverandpoundage”“generationhydrowaterreservoir”“generationnuclear”“generationother”“generationotherrenewable”“generationsolar”“generationwaste”“generationwindonshore”共14個(gè)輸入變量,輸出變量為“totalloadactual”?;赟tacking融合方法的電網(wǎng)負(fù)荷預(yù)測(cè)Stacking模型的應(yīng)用與實(shí)現(xiàn)1)數(shù)據(jù)預(yù)處理首先,導(dǎo)入pandas庫(kù)、sklearn庫(kù)相關(guān)模塊,其中MinMaxScaler和StandardScaler是從sklearn庫(kù)導(dǎo)入的類(lèi),用于特征縮放。使用pandas在讀取名為“energy_dataset.csv”的CSV文件,df.dropna用于刪除數(shù)據(jù)集中包含空值的行。split_rate=0.8說(shuō)明數(shù)據(jù)集劃分比例為0.8,意味著80%的數(shù)據(jù)將用于訓(xùn)練,20%的數(shù)據(jù)將用于測(cè)試。split_point用于計(jì)算將數(shù)據(jù)集分成訓(xùn)練集和測(cè)試集的索引點(diǎn)。它使用split_rate來(lái)確定用于訓(xùn)練的數(shù)據(jù)比例。在劃分?jǐn)?shù)據(jù)集后,從訓(xùn)練集和測(cè)試集中分離出特征和標(biāo)簽。代碼如下。12.2基于Stacking融合方法的電網(wǎng)負(fù)荷預(yù)測(cè)importpandasaspdfromsklearn.preprocessingimportMinMaxScalerfromsklearn.preprocessingimportStandardScalerdf=pd.read_csv('energy_dataset.csv',encoding='utf-8')df=df.dropna(subset=['totalloadactual','generationbiomass','generationfossilbrowncoal/lignite','generationfossilgas','generationfossilhardcoal','generationfossiloil','generationhydropumpedstorageconsumption','generationhydrorun-of-riverandpoundage','generationhydrowaterreservoir','generationnuclear','generationother','generationotherrenewable','generationsolar','generationwaste','generationwindonshore'])label_df=dfencoder=StandardScaler()dataset=label_dfraw_data=dataset.copy()split_rate=0.8split_point=int(len(raw_data)*split_rate)train_data=raw_data[:split_point]test_data=raw_data[split_point:]feature=['generationbiomass','generationfossilbrowncoal/lignite','generationfossilgas','generationfossilhardcoal','generationfossiloil','generationhydropumpedstorageconsumption','generationhydrorun-of-riverandpoundage','generationhydrowaterreservoir','generationnuclear','generationother','generationotherrenewable','generationsolar','generationwaste','generationwindonshore',]predict_class="totalloadactual"12.2基于Stacking融合方法的電網(wǎng)負(fù)荷預(yù)測(cè)然后,根據(jù)方差閾值(0.5)進(jìn)行特征選擇。創(chuàng)建VarianceThreshold對(duì)象variance_selector并使用訓(xùn)練集中的特征進(jìn)行擬合。使用get_support()方法獲取經(jīng)過(guò)方差閾值篩選后的特征列,更新feature變量,將其設(shè)置為經(jīng)過(guò)方差閾值篩選后的特征,將訓(xùn)練集中的特征和標(biāo)簽分開(kāi)。接著,初始化兩個(gè)MinMaxScaler對(duì)象feature_scaler和label_scaler,用于對(duì)特征和標(biāo)簽進(jìn)行歸一化處理。對(duì)訓(xùn)練集中的特征和標(biāo)簽執(zhí)行fit_transform方法,最后,使用feature_scaler對(duì)象的transform方法對(duì)測(cè)試集中的特征進(jìn)行歸一化處理。代碼如下。fromsklearn.feature_selectionimportVarianceThresholdthreshold=0.5variance_selector=VarianceThreshold(threshold=threshold)variance_selector.fit(train_data[feature])variance_support=variance_selector.get_support()variance_feature=train_data[feature].loc[:,variance_support].columns.tolist()12.2基于Stacking融合方法的電網(wǎng)負(fù)荷預(yù)測(cè)feature=variance_featuretrain_features=train_data[feature]train_labels=train_data[predict_class]test_features=test_data[feature]test_labels=test_data[predict_class]feature_scaler=MinMaxScaler()label_scaler=MinMaxScaler()train_features_normalized=feature_scaler.fit_transform(train_features)train_labels_normalized=label_scaler.fit_transform(train_labels.values.reshape(-1,1))test_features_normalized=feature_scaler.transform(test_features)test_labels_normalized=label_scaler.transform(test_labels.values.reshape(-1,1))12.2基于Stacking融合方法的電網(wǎng)負(fù)荷預(yù)測(cè)2)建立基礎(chǔ)模型首先從torch庫(kù)、sklearn庫(kù)等庫(kù)中導(dǎo)入所需的模塊,然后定義LSTMModel類(lèi)和PyTorchRegressor類(lèi),LSTMModel類(lèi)是一個(gè)自定義的PyTorch模型類(lèi),用于定義一個(gè)包含3個(gè)LSTM層和1個(gè)Dense層的循環(huán)神經(jīng)網(wǎng)絡(luò)模型。構(gòu)造函數(shù)__init__中初始化了3個(gè)LSTM層和1個(gè)Dense層,每個(gè)LSTM層的輸入維度和隱藏層維度逐漸減小,這個(gè)模型用于接收輸入序列數(shù)據(jù)并輸出回歸值。forward方法定義了模型的前向傳播邏輯,首先初始化LSTM層的初始隱藏狀態(tài)和神經(jīng)元狀態(tài)(這里都初始化為0),然后依次經(jīng)過(guò)3個(gè)LSTM層,最后通過(guò)Dense層將最終時(shí)間步的輸出轉(zhuǎn)換為回歸值。12.2基于Stacking融合方法的電網(wǎng)負(fù)荷預(yù)測(cè)45classLSTMModel(nn.Module):def__init__(self,input_dim):super(LSTMModel,self).__init__()self.lstm1=nn.LSTM(input_dim,100,batch_first=True)self.lstm2=nn.LSTM(100,50,batch_first=True)self.lstm3=nn.LSTM(50,25,batch_first=True)self.fc=nn.Linear(25,1)defforward(self,x):h_0=torch.zeros(1,x.size(0),100)c_0=torch.zeros(1,x.size(0),100)out,_=self.lstm1(x,(h_0,c_0))h_1=torch.zeros(1,x.size(0),50)c_1=torch.zeros(1,x.size(0),50)out,_=self.lstm2(out,(h_1,c_1))h_2=torch.zeros(1,x.size(0),25)c_2=torch.zeros(1,x.size(0),25)out,_=self.lstm3(out,(h_2,c_2))out=self.fc(out[:,-1,:])returnout12.2基于Stacking融合方法的電網(wǎng)負(fù)荷預(yù)測(cè)PyTorchRegressor類(lèi)是一個(gè)自定義的回歸器類(lèi),它繼承自sklearn庫(kù)中的BaseEstimator類(lèi)和RegressorMixin類(lèi),以便與sklearn庫(kù)的模型接口兼容。fit方法用于訓(xùn)練模型,它接收輸入特征x和目標(biāo)標(biāo)簽y,首先將它們轉(zhuǎn)換為PyTorch張量(x_tensor和y_tensor),然后進(jìn)行多輪訓(xùn)練。在每個(gè)訓(xùn)練輪次中,模型首先前向傳播,計(jì)算損失,然后反向傳播和優(yōu)化參數(shù)。predict方法用于進(jìn)行模型預(yù)測(cè),它首先將輸入特征x轉(zhuǎn)換為PyTorch張量,然后使用訓(xùn)練好的模型進(jìn)行前向傳播,得到模型的預(yù)測(cè)輸出。相關(guān)代碼如下。classPyTorchRegressor(BaseEstimator,RegressorMixin):def__init__(self,model,epochs=100,batch_size=512):self.model=modelself.epochs=epochsself.batch_size=batch_sizeself.optimizer=torch.optim.Adam(self.model.parameters())self.criterion=nn.MSELoss()

基于Stacking融合方法的電網(wǎng)負(fù)荷預(yù)測(cè)deffit(self,x,y):x_tensor=torch.tensor(x,dtype=torch.float32).unsqueeze(1)y_tensor=torch.tensor(y,dtype=torch.float32).view(-1,1)forepochinrange(self.epochs):self.model.train()self.optimizer.zero_grad()outputs=self.model(x_tensor)loss=self.criterion(outputs,y_tensor)print(f"Thisisepoch{epoch}/{self.epochs},Lossis{loss.item()}")loss.backward()self.optimizer.step()returnselfdefpredict(self,x):self.model.eval()withtorch.no_grad():x_tensor=torch.tensor(x,dtype=torch.float32).unsqueeze(1)outputs=self.model(x_tensor)returnoutpu

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論