【視頻】K近鄰KNN算法原理與R語言結(jié)合新冠疫情對(duì)股票價(jià)格預(yù)測(cè)|數(shù)據(jù)分享|附代碼數(shù)據(jù)
全文下載鏈接:http://tecdat.cn/?p=24057
本文的目標(biāo)是使用K-最近鄰(K近鄰),ARIMA和神經(jīng)網(wǎng)絡(luò)模型分析Google股票數(shù)據(jù)集預(yù)測(cè)Google的未來股價(jià),然后分析各種模型?(?點(diǎn)擊文末“閱讀原文”獲取完整代碼數(shù)據(jù)********?)?。
K-最近鄰(K近鄰)是一種用于回歸和分類的監(jiān)督學(xué)習(xí)算法。K近鄰?試圖通過計(jì)算測(cè)試數(shù)據(jù)與所有訓(xùn)練點(diǎn)之間的距離來預(yù)測(cè)測(cè)試數(shù)據(jù)的正確類別。然后選擇最接近測(cè)試數(shù)據(jù)的K個(gè)點(diǎn)。K近鄰算法計(jì)算測(cè)試數(shù)據(jù)屬于'K'個(gè)訓(xùn)練數(shù)據(jù)的類的概率,并且選擇概率最高的類。在回歸的情況下,該值是“K”個(gè)選定訓(xùn)練點(diǎn)的平均值。
讓我們看看下面的例子,以便更好地理解
為什么我們需要 K近鄰?算法?
假設(shè)有兩個(gè)類別,A 和B,并且我們有一個(gè)新的數(shù)據(jù)點(diǎn)x1,那么這個(gè)數(shù)據(jù)點(diǎn)將位于這些類別中的哪一個(gè)。為了解決這類問題,我們需要一個(gè)K近鄰算法。借助K近鄰,我們可以輕松識(shí)別特定數(shù)據(jù)集的類別。考慮下圖:
K近鄰?是如何工作的?
K近鄰?的工作原理可以根據(jù)以下算法進(jìn)行解釋:
步驟1:選擇鄰居的數(shù)量K
步驟2:計(jì)算K個(gè)鄰居的歐幾里得距離
步驟3:根據(jù)計(jì)算出的歐幾里得距離取K個(gè)最近鄰。
步驟4:在這k個(gè)鄰居中,統(tǒng)計(jì)每個(gè)類別的數(shù)據(jù)點(diǎn)個(gè)數(shù)。
步驟 5:將新數(shù)據(jù)點(diǎn)分配給鄰居數(shù)量最大的類別。
步驟6:我們的模型準(zhǔn)備好了。
假設(shè)我們有一個(gè)新的數(shù)據(jù)點(diǎn),我們需要把它放在所需的類別中。
首先,我們將選擇鄰居的數(shù)量,因此我們將選擇 k=5。
接下來,我們將計(jì)算數(shù)據(jù)點(diǎn)之間的歐幾里得距離。歐幾里得距離是兩點(diǎn)之間的距離,我們已經(jīng)在幾何學(xué)中研究過??梢杂?jì)算為:
通過計(jì)算歐幾里得距離,我們得到了最近鄰,即 A 類中的2個(gè)最近鄰和 B 類中的3個(gè)最近鄰。
正如我們所見,3 個(gè)最近的鄰居來自類別B,因此這個(gè)新數(shù)據(jù)點(diǎn)必須屬于類別B。
如何選擇 K 值?
Kvalue 表示最近鄰的計(jì)數(shù)。我們必須計(jì)算測(cè)試點(diǎn)和訓(xùn)練過的標(biāo)簽點(diǎn)之間的距離。每次迭代更新距離度量的計(jì)算成本很高,這就是為什么 K近鄰?是一種惰性學(xué)習(xí)算法。
那么如何選擇最優(yōu)的K值呢?
沒有預(yù)先定義的統(tǒng)計(jì)方法來找到最有利的 K 值。
初始化一個(gè)隨機(jī)的 K 值并開始計(jì)算。
選擇較小的 K 值會(huì)導(dǎo)致決策邊界不穩(wěn)定。
較大的 K 值更適合分類,因?yàn)樗梢云交瑳Q策邊界。
得出錯(cuò)誤率和 K 之間的圖,表示定義范圍內(nèi)的值。然后選擇K值作為具有最小錯(cuò)誤率。
現(xiàn)在您將了解通過實(shí)施模型來選擇最佳 K 值。
計(jì)算距離:
第一步是計(jì)算新點(diǎn)和每個(gè)訓(xùn)練點(diǎn)之間的距離。計(jì)算該距離有多種方法,其中最常見的方法是歐幾里得、曼哈頓(用于連續(xù))和漢明距離(用于分類)。
歐幾里得距離:歐幾里得距離計(jì)算為新點(diǎn) (x) 和現(xiàn)有點(diǎn) (y) 之間的平方差之和的平方根。
曼哈頓距離:這是實(shí)際向量之間的距離,使用它們的絕對(duì)差之和。
**
**
結(jié)合新冠疫情COVID-19對(duì)股票價(jià)格預(yù)測(cè):ARIMA,KNN和神經(jīng)網(wǎng)絡(luò)時(shí)間序列分析
1.概要
本文的目標(biāo)是使用各種預(yù)測(cè)模型分析Google股票數(shù)據(jù)集?(?查看文末了解數(shù)據(jù)獲取方式?)?預(yù)測(cè)Google的未來股價(jià),然后分析各種模型。
2.簡介
預(yù)測(cè)算法是一種試圖根據(jù)過去和現(xiàn)在的數(shù)據(jù)預(yù)測(cè)未來值的過程。提取并準(zhǔn)備此歷史數(shù)據(jù)點(diǎn),來嘗試預(yù)測(cè)數(shù)據(jù)集所選變量的未來值。在市場(chǎng)歷史期間,一直有一種持續(xù)的興趣試圖分析其趨勢(shì),行為和隨機(jī)反應(yīng)。不斷關(guān)注在實(shí)際發(fā)生之前先了解發(fā)生了什么,這促使我們繼續(xù)進(jìn)行這項(xiàng)研究。我們還將嘗試并了解?COVID-19對(duì)股票價(jià)格的影響。
3.所需包
library(quantmod)?R的定量金融建模和交易框架library(forecast)?預(yù)測(cè)時(shí)間序列和時(shí)間序列模型library(tseries)?時(shí)間序列分析和計(jì)算金融。library(timeseries)?'S4'類和金融時(shí)間序列的各種工具。library(readxl)?readxl包使你能夠輕松地將數(shù)據(jù)從Excel中取出并輸入R中。library(kableExtra)?顯示表格library(data.table)?大數(shù)據(jù)的快速聚合library(DT)?以更好的方式顯示數(shù)據(jù)library(tsfknn)?進(jìn)行KNN回歸預(yù)測(cè)
4.數(shù)據(jù)準(zhǔn)備
4.1導(dǎo)入數(shù)據(jù)
我們使用Quantmod軟件包獲取了Google股票價(jià)格2015年1月1日到2020年4月24日的數(shù)據(jù),用于我們的分析。為了分析COVID-19對(duì)Google股票價(jià)格的影響,我們從quantmod數(shù)據(jù)包中獲取了兩組數(shù)據(jù)。
首先將其命名為data_before_covid,其中包含截至2020年2月28日的數(shù)據(jù)。
第二個(gè)名為data_after_covid,其中包含截至2020年4月24日的數(shù)據(jù)。
所有分析和模型都將在兩個(gè)數(shù)據(jù)集上進(jìn)行,以分析COVID-19的影響(如果有)。
getSymbols("GOG"?fro=?"2015-01-01",?to?=?"2019-02-28")before_covid?<-dafae(GOOG)getSymbols("GOG"?,?frm?=?"2015-01-01")after_covid?<-?as.tae(GOOG)
4.2數(shù)據(jù)的圖形表示
par(mfrow?=?c(1,2))
plot.ts(fore_c)
4.3數(shù)據(jù)集預(yù)覽
最終數(shù)據(jù)集可以在下面的交互式表格中找到。
table(before_covid)
4.4變量匯總
變量描述Open當(dāng)日股票開盤價(jià)High當(dāng)日股票最高價(jià)Low當(dāng)日股價(jià)最低Close當(dāng)日股票收盤價(jià)Volumn總交易量Adjusted調(diào)整后的股票價(jià)格,包括風(fēng)險(xiǎn)或策略
5. ARIMA模型
我們首先分析兩個(gè)數(shù)據(jù)集的ACF和PACF圖。
par(mfrow?=?c(2,2))acft(bfoe_covid)pacf(bfre_covid)
然后,我們進(jìn)行?ADF(Dickey-Fuller)?檢驗(yàn)和?KPSS(Kwiatkowski-Phillips-Schmidt-Shin)?檢驗(yàn),檢驗(yàn)兩個(gè)數(shù)據(jù)集收盤價(jià)的時(shí)間序列數(shù)據(jù)的平穩(wěn)性。
print(adf.test)
print(adfes(sata_after_covid))
通過以上ADF檢驗(yàn),我們可以得出以下結(jié)論:
對(duì)于COVID-19之前的數(shù)據(jù)集,ADF測(cè)試給出的p值為?0.2093,該值大于0.05,因此說明時(shí)間序列數(shù)據(jù)?不是平穩(wěn)的。
對(duì)于COVID-19之后的數(shù)據(jù)集,ADF測(cè)試給出的p值為0.01974,該值?小于0.05,這說明時(shí)間序列數(shù)據(jù)是?平穩(wěn)的。
print(kpss.s(t_before_covid))
print(kpss.est(Dafter_covid))
通過以上KPSS測(cè)試,我們可以得出以下結(jié)論:
對(duì)于COVID-19之前的數(shù)據(jù)集,KPSS測(cè)試得出的p值為?0.01,該值小于0.05,因此說明時(shí)間序列數(shù)據(jù)?不是平穩(wěn)的。
對(duì)于COVID-19之后的數(shù)據(jù)集,KPSS測(cè)試給出的p值為?0.01,該值小于0.05,這說明時(shí)間序列數(shù)據(jù)?不是平穩(wěn)的。
因此,我們可以從以上兩個(gè)測(cè)試得出結(jié)論,時(shí)間序列數(shù)據(jù)?不是平穩(wěn)的。
然后,我們使用?auto?函數(shù)來確定每個(gè)數(shù)據(jù)集的時(shí)間序列模型。
?auto.ar(befor_covid,?lamd?=?"auto")
?auto.arma(after_covid)
從auto函數(shù)中,我們得出兩個(gè)數(shù)據(jù)集的以下模型:
在COVID-19之前:ARIMA(2,1,0)
在COVID-19之后:ARIMA(1,1,1)
獲得模型后,我們將對(duì)每個(gè)擬合模型執(zhí)行殘差診斷。
par(mfrow?=?c(2,3))plot(before_covidresiduals)plot(mfter_covidresiduals)
從殘差圖中,我們可以確認(rèn)殘差的平均值為0,并且方差也為常數(shù)。對(duì)于滯后> 0,ACF為0,而PACF也為0。
因此,我們可以說殘差表現(xiàn)得像白噪聲,并得出結(jié)論:ARIMA(2,1,0)和ARIMA(1,1,1)模型很好地?cái)M合了數(shù)據(jù)。或者,我們也可以使用Box-Ljung檢驗(yàn)在0.05的顯著性水平上進(jìn)行檢驗(yàn)殘差是符合白噪聲。
Box.test(moderesiduals)
Box.tst(moeit_fter_covidreia,?type?=?"Ljung-Box")
在此,兩個(gè)模型的p值均大于0.05。因此,在顯著性水平為0.05的情況下,我們無法拒絕原假設(shè),而得出的結(jié)論是殘差遵循白噪聲。這意味著該模型很好地?cái)M合了數(shù)據(jù)。
一旦為每個(gè)數(shù)據(jù)集確定了模型,就可以預(yù)測(cè)未來幾天的股票價(jià)格。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
自然語言處理NLP:主題LDA、情感分析疫情下的新聞文本數(shù)據(jù)
左右滑動(dòng)查看更多
01
02
03
04
6. KNN回歸時(shí)間序列預(yù)測(cè)模型
KNN模型可用于分類和回歸問題。最受歡迎的應(yīng)用是將其用于分類問題?,F(xiàn)在,使用r軟件包,可以在任何回歸任務(wù)應(yīng)用KNN。這項(xiàng)研究的目的是說明不同的預(yù)測(cè)工具,對(duì)其進(jìn)行比較并分析預(yù)測(cè)的行為。在我們的KNN研究之后,我們提出可以將其用于分類和回歸問題。為了預(yù)測(cè)新數(shù)據(jù)點(diǎn)的值,模型使用“特征相似度”,根據(jù)新點(diǎn)與訓(xùn)練集上點(diǎn)的相似程度為值分配新點(diǎn)。
第一項(xiàng)任務(wù)是確定我們的KNN模型中的k值。選擇k值的一般經(jīng)驗(yàn)法則是取樣本中數(shù)據(jù)點(diǎn)數(shù)的平方根。因此,對(duì)于COVID-19之前的數(shù)據(jù)集,我們?nèi) = 32;對(duì)于COVID-19之后的數(shù)據(jù)集,我們?nèi) = 36。
par(mfrow?=?c(2,1))
knn_before_covid?<-?kn(bfrvdGO.Clse,??k?=?32)
knn_after_covid?<-?kn(ber_oiGOG.lose?,k?=?36)plot(knn_before_covid?)plot(knn_after_covid?)
然后,我們針對(duì)預(yù)測(cè)時(shí)間序列評(píng)估KNN模型。
before_cvid?<-?ll_ig(pdn_befr_vid)
afer_vd<-?rog_ogn(redkn_afer_vd)
7.前饋神經(jīng)網(wǎng)絡(luò)建模
我們將嘗試實(shí)現(xiàn)的下一個(gè)模型是帶有神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)模型。在此模型中,我們使用單個(gè)隱藏層形式,其中只有一層輸入節(jié)點(diǎn)將加權(quán)輸入發(fā)送到接收節(jié)點(diǎn)的下一層。預(yù)測(cè)函數(shù)將單個(gè)隱藏層神經(jīng)網(wǎng)絡(luò)模型擬合到時(shí)間序列。函數(shù)模型方法是將時(shí)間序列的滯后值用作輸入數(shù)據(jù),以達(dá)到非線性自回歸模型。
第一步是確定神經(jīng)網(wǎng)絡(luò)的隱藏層數(shù)。盡管沒有用于計(jì)算隱藏層數(shù)的特定方法,但時(shí)間序列預(yù)測(cè)遵循的最常見方法是通過計(jì)算使用以下公式:
其中Ns:訓(xùn)練樣本數(shù)Ni:輸入神經(jīng)元數(shù)No:輸出神經(jīng)元數(shù)a:1.5 ^ -10
#隱藏層的創(chuàng)建
hn_before_covid?<-?length(before.Close)/(alpha*(lengthGOOG.Close?+?61)
hn_after_covid?<-?length(after_covidClose)/(alpha*(lengthafter_ovdClose+65))
#擬合nnnn(before_covid$GOOG.Close,?size?=?hn_beoe_cid,?
#?使用nnetar進(jìn)行預(yù)測(cè)。
?forecast(befe_cvid,?h?61,?I?=UE)forecast(aftr_coid,?h?=?5,?I?=?RE)
plot(nn_fcst_afte_cvid)
然后,我們使用以下參數(shù)分析神經(jīng)網(wǎng)絡(luò)模型的性能:
accuracy
accuracy
8.所有模型的比較
現(xiàn)在,我們使用參數(shù)諸如RMSE(均方根誤差),MAE(均值絕對(duì)誤差)和MAPE(均值絕對(duì)百分比誤差)對(duì)所有三個(gè)模型進(jìn)行分析?。
sumary_le_efore_oid?<-?data.frame(RMSE?=?nuerc(),?MAE?=?uer(),?
????????????????????????????MAPE?=?numric(),?snsAsacrs?=?FALSE)
summ_tabe_fter_ovd?<-?data.fame(RMSE?=?umeri(),?MAE?=?nmei(),?
????????????????????????????MAPE?=?numeic())kable(smary_abe_eor_oid?)
模型RMSEMAEMAPEARIMA13.08.81.0KNN44.033.73.1神經(jīng)網(wǎng)絡(luò)13.08.71.0kable(sumary_tbl_aft_cifulith?=?F,?fixdtead?=?T?)
模型RMSEMAEMAPEARIMA16.610.41.0KNN45.935.73.3神經(jīng)網(wǎng)絡(luò)14.79.81.0
因此,從以上模型性能參數(shù)的總結(jié)中,我們可以看到神經(jīng)網(wǎng)絡(luò)模型在兩個(gè)數(shù)據(jù)集上的性能均優(yōu)于ARIMA和KNN模型。因此,我們將使用神經(jīng)網(wǎng)絡(luò)模型來預(yù)測(cè)未來兩個(gè)月的股價(jià)。
9.最終模型:COVID-19之前
現(xiàn)在,我們使用直到2月的數(shù)據(jù)來預(yù)測(cè)3月和4月的值,然后將預(yù)測(cè)價(jià)格與實(shí)際價(jià)格進(jìn)行比較,以檢查是否由于COVID-19可以歸因于任何重大影響。
foestdungcvid<-?datafame("De
????????????????????????????????????"Actua?Values"?=?
datatable(foestdungcvid,?ilte=?'to')
從表中我們可以看到,3月和4月期間,Google股票的實(shí)際價(jià)值通常比預(yù)測(cè)值要高一些。因此,可以說,盡管發(fā)生了這種全球性大流行,但Google股票的表現(xiàn)仍然相當(dāng)不錯(cuò)。
10.最終模型:COVID-19之后
現(xiàn)在,我們使用直到4月的數(shù)據(jù)預(yù)測(cè)5月和6月的值,以了解Google的未來股價(jià)。
foreataov?<-?data.frae(dn_reataeimean?)table(foreataov?)
從表中可以得出結(jié)論,在5月和6月的接下來的幾個(gè)月中,Google股票的價(jià)格將繼續(xù)上漲并表現(xiàn)良好。
數(shù)據(jù)獲取
在下面公眾號(hào)后臺(tái)回復(fù)“股票數(shù)****據(jù)”,可獲取完整數(shù)據(jù)。
本文摘選?《?R語言結(jié)合新冠疫情COVID-19股票價(jià)格預(yù)測(cè):ARIMA,KNN和神經(jīng)網(wǎng)絡(luò)時(shí)間序列分析?》?,點(diǎn)擊“閱讀原文”獲取全文完整資料。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
Fama French (FF) 三因子模型和CAPM模型分析股票市場(chǎng)投資組合風(fēng)險(xiǎn)/收益可視化
配對(duì)交易策略統(tǒng)計(jì)套利量化交易分析股票市場(chǎng)
Copula 算法建模相依性分析股票收益率時(shí)間序列案例
用COPULA模型進(jìn)行蒙特卡洛(MONTE CARLO)模擬和擬合股票收益數(shù)據(jù)分析
R使用LASSO回歸預(yù)測(cè)股票收益
金融時(shí)間序列模型ARIMA 和GARCH 在股票市場(chǎng)預(yù)測(cè)應(yīng)用
時(shí)間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價(jià)格
自然語言處理NLP:主題LDA、情感分析疫情下的新聞文本數(shù)據(jù)
在R語言中使用航空公司復(fù)雜網(wǎng)絡(luò)對(duì)疫情進(jìn)行建模
matlab用高斯曲線擬合模型分析疫情數(shù)據(jù)
R語言ARIMA-GARCH波動(dòng)率模型預(yù)測(cè)股票市場(chǎng)蘋果公司日收益率時(shí)間序列
R語言中的時(shí)間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價(jià)格
R語言用綜合信息準(zhǔn)則比較隨機(jī)波動(dòng)率(SV)模型對(duì)股票價(jià)格時(shí)間序列建模
R語言回測(cè)交易:根據(jù)歷史信號(hào)/交易創(chuàng)建股票收益曲線
Python中TensorFlow的長短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM)、指數(shù)移動(dòng)平均法預(yù)測(cè)股票市場(chǎng)和可視化
R語言k-Shape時(shí)間序列聚類方法對(duì)股票價(jià)格時(shí)間序列聚類
R語言邏輯回歸Logistic回歸分析預(yù)測(cè)股票漲跌
R語言時(shí)變波動(dòng)率和ARCH,GARCH,GARCH-in-mean模型分析股市收益率時(shí)間序列
R語言中的copula GARCH模型擬合時(shí)間序列并模擬分析
R語言多元Copula GARCH 模型時(shí)間序列預(yù)測(cè)
R語言ARMA-GARCH-COPULA模型和金融時(shí)間序列案例R語言多元CopulaGARCH模型時(shí)間序列預(yù)測(cè)R語言乘法GARCH模型對(duì)高頻交易數(shù)據(jù)進(jìn)行波動(dòng)性預(yù)測(cè)
R語言GARCH-DCC模型和DCC(MVT)建模估計(jì)
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進(jìn)行股價(jià)預(yù)測(cè)
R語言時(shí)間序列GARCH模型分析股市波動(dòng)率
R語言ARMA-EGARCH模型、集成預(yù)測(cè)算法對(duì)SPX實(shí)際波動(dòng)率進(jìn)行預(yù)測(cè)
matlab實(shí)現(xiàn)MCMC的馬爾可夫轉(zhuǎn)換ARMA - GARCH模型估計(jì)
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進(jìn)行股價(jià)預(yù)測(cè)
使用R語言對(duì)S&P500股票指數(shù)進(jìn)行ARIMA + GARCH交易策略
R語言用多元ARMA,GARCH ,EWMA, ETS,隨機(jī)波動(dòng)率SV模型對(duì)金融時(shí)間序列數(shù)據(jù)建模
R語言股票市場(chǎng)指數(shù):ARMA-GARCH模型和對(duì)數(shù)收益率數(shù)據(jù)探索性分析
R語言多元Copula GARCH 模型時(shí)間序列預(yù)測(cè)
R語言使用多元AR-GARCH模型衡量市場(chǎng)風(fēng)險(xiǎn)
R語言中的時(shí)間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價(jià)格
R語言用Garch模型和回歸模型對(duì)股票價(jià)格分析
GARCH(1,1),MA以及歷史模擬法的VaR比較
matlab估計(jì)arma garch 條件均值和方差模型
R語言ARMA-GARCH-COPULA模型和金融時(shí)間序列案例