【視頻】K近鄰KNN算法原理與R語言結合新冠疫情對股票價格預測|附代碼數據

2023-03-17     tecdat拓端

原標題:【視頻】K近鄰KNN算法原理與R語言結合新冠疫情對股票價格預測|附代碼數據

全文下載連結:http://tecdat.cn/?p=24057

最近我們被客戶要求撰寫關於KNN算法的研究報告,包括一些圖形和統計輸出。

本文的目標是使用K-最近鄰(K近鄰),ARIMA和神經網絡模型分析Google股票數據集預測Google的未來股價,然後分析各種模型

K-最近鄰(K近鄰)是一種用於回歸和分類的監督學習算法。K近鄰 試圖通過計算測試數據與所有訓練點之間的距離來預測測試數據的正確類別。然後選擇最接近測試數據的K個點。K近鄰算法計算測試數據屬於'K'個訓練數據的類的機率,並且選擇機率最高的類。在回歸的情況下,該值是「K」個選定訓練點的平均值。

讓我們看看下面的例子,以便更好地理解

為什麼我們需要 K近鄰 算法?

假設有兩個類別,A 和B,並且我們有一個新的數據點x1,那麼這個數據點將位於這些類別中的哪一個。為了解決這類問題,我們需要一個K近鄰算法。藉助K近鄰,我們可以輕鬆識別特定數據集的類別。考慮下圖:

K近鄰 是如何工作的?

K近鄰 的工作原理可以根據以下算法進行解釋:

  • 步驟1:選擇鄰居的數量K
  • 步驟2:計算K個鄰居的歐幾里得距離
  • 步驟3:根據計算出的歐幾里得距離取K個最近鄰。
  • 步驟4:在這k個鄰居中,統計每個類別的數據點個數。
  • 步驟 5:將新數據點分配給鄰居數量最大的類別。
  • 步驟6:我們的模型準備好了。

假設我們有一個新的數據點,我們需要把它放在所需的類別中。

首先,我們將選擇鄰居的數量,因此我們將選擇 k=5。

接下來,我們將計算數據點之間的歐幾里得距離。歐幾里得距離是兩點之間的距離,我們已經在幾何學中研究過。可以計算為:

通過計算歐幾里得距離,我們得到了最近鄰,即 A 類中的2個最近鄰和 B 類中的3個最近鄰。

正如我們所見,3 個最近的鄰居來自類別B,因此這個新數據點必須屬於類別B。

如何選擇 K 值?

Kvalue 表示最近鄰的計數。我們必須計算測試點和訓練過的標籤點之間的距離。每次疊代更新距離度量的計算成本很高,這就是為什麼 K近鄰 是一種惰性學習算法。

那麼如何選擇最優的K值呢?

  • 沒有預先定義的統計方法來找到最有利的 K 值。
  • 初始化一個隨機的 K 值並開始計算。
  • 選擇較小的 K 值會導致決策邊界不穩定。
  • 較大的 K 值更適合分類,因為它可以平滑決策邊界。
  • 得出錯誤率和 K 之間的圖,表示定義範圍內的值。然後選擇K值作為具有最小錯誤率。

現在您將了解通過實施模型來選擇最佳 K 值。

計算距離:

第一步是計算新點和每個訓練點之間的距離。計算該距離有多種方法,其中最常見的方法是歐幾里得、曼哈頓(用於連續)和漢明距離(用於分類)。

歐幾里得距離:歐幾里得距離計算為新點 (x) 和現有點 (y) 之間的平方差之和的平方根。

曼哈頓距離:這是實際向量之間的距離,使用它們的絕對差之和。

結合新冠疫情COVID-19對股票價格預測:ARIMA,KNN和神經網絡時間序列分析

1.概要

本文的目標是使用各種預測模型分析Google股票數據集 查看文末了解數據獲取方式 預測Google的未來股價,然後分析各種模型。

拓端

,贊32

拓端

,贊18

拓端

,贊13

2.簡介

預測算法是一種試圖根據過去和現在的數據預測未來值的過程。提取並準備此歷史數據點,來嘗試預測數據集所選變量的未來值。在市場歷史期間,一直有一種持續的興趣試圖分析其趨勢,行為和隨機反應。不斷關注在實際發生之前先了解發生了什麼,這促使我們繼續進行這項研究。我們還將嘗試並了解 COVID-19對股票價格的影響。

3.所需包

library(quantmod) R的定量金融建模和交易框架

library(forecast) 預測時間序列和時間序列模型

library(tseries) 時間序列分析和計算金融。

library(timeseries) 'S4'類和金融時間序列的各種工具。

library(readxl) readxl包使你能夠輕鬆地將數據從Excel中取出並輸入R中。

library(kableExtra) 顯示表格

library(data.table) 大數據的快速聚合

library(DT) 以更好的方式顯示數據

library(tsfknn) 進行KNN回歸預測

4.數據準備

4.1導入數據

我們使用Quantmod軟體包獲取了Google股票價格2015年1月1日到2020年4月24日的數據,用於我們的分析。為了分析COVID-19對Google股票價格的影響,我們從quantmod數據包中獲取了兩組數據。

  • 首先將其命名為data_before_covid,其中包含截至2020年2月28日的數據。
  • 第二個名為data_after_covid,其中包含截至2020年4月24日的數據。

所有分析和模型都將在兩個數據集上進行,以分析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數據的圖形表示

par(mfrow = c(1,2))

plot.ts(fore_c)

4.3數據集預覽

最終數據集可以在下面的交互式表格中找到。

table(before_covid)

4.4變量匯總

變量描述Open當日股票開盤價High當日股票最高價Low當日股價最低Close當日股票收盤價Volumn總交易量Adjusted調整後的股票價格,包括風險或策略5. ARIMA模型

我們首先分析兩個數據集的ACF和PACF圖。

par(mfrow = c(2,2))

acft(bfoe_covid)

pacf(bfre_covid)

然後,我們進行 ADF(Dickey-Fuller) 檢驗和 KPSS(Kwiatkowski-Phillips-Schmidt-Shin) 檢驗,檢驗兩個數據集收盤價的時間序列數據的平穩性。

print(adf.test)

print(adfes(sata_after_covid))

通過以上ADF檢驗,我們可以得出以下結論:

  • 對於COVID-19之前的數據集,ADF測試給出的p值為 0.2093,該值大於0.05,因此說明時間序列數據 不是平穩的。
  • 對於COVID-19之後的數據集,ADF測試給出的p值為0.01974,該值 小於0.05,這說明時間序列數據是 平穩的。

print(kpss.s(t_before_covid))

print(kpss.est(Dafter_covid))

通過以上KPSS測試,我們可以得出以下結論:

  • 對於COVID-19之前的數據集,KPSS測試得出的p值為 0.01,該值小於0.05,因此說明時間序列數據 不是平穩的。
  • 對於COVID-19之後的數據集,KPSS測試給出的p值為 0.01,該值小於0.05,這說明時間序列數據 不是平穩的。

因此,我們可以從以上兩個測試得出結論,時間序列數據 不是平穩的。

然後,我們使用 auto 函數來確定每個數據集的時間序列模型。

auto.ar(befor_covid, lamd = "auto")

auto.arma(after_covid)

從auto函數中,我們得出兩個數據集的以下模型:

  • 在COVID-19之前:ARIMA(2,1,0)
  • 在COVID-19之後:ARIMA(1,1,1)

獲得模型後,我們將對每個擬合模型執行殘差診斷。

par(mfrow = c(2,3))

plot(before_covidresiduals)

plot(mfter_covidresiduals)

從殘差圖中,我們可以確認殘差的平均值為0,並且方差也為常數。對於滯後> 0,ACF為0,而PACF也為0。

因此,我們可以說殘差表現得像白噪聲,並得出結論:ARIMA(2,1,0)和ARIMA(1,1,1)模型很好地擬合了數據。或者,我們也可以使用Box-Ljung檢驗在0.05的顯著性水平上進行檢驗殘差是符合白噪聲。

Box.test(moderesiduals)

Box.tst(moeit_fter_covidreia, type = "Ljung-Box")

在此,兩個模型的p值均大於0.05。因此,在顯著性水平為0.05的情況下,我們無法拒絕原假設,而得出的結論是殘差遵循白噪聲。這意味著該模型很好地擬合了數據。

一旦為每個數據集確定了模型,就可以預測未來幾天的股票價格。

點擊標題查閱往期內容

自然語言處理NLP:主題LDA、情感分析疫情下的新聞文本數據

左右滑動查看更多

01

02

03

04

6. KNN回歸時間序列預測模型

KNN模型可用於分類和回歸問題。最受歡迎的應用是將其用於分類問題。現在,使用r軟體包,可以在任何回歸任務應用KNN。這項研究的目的是說明不同的預測工具,對其進行比較並分析預測的行為。在我們的KNN研究之後,我們提出可以將其用於分類和回歸問題。為了預測新數據點的值,模型使用「特徵相似度」,根據新點與訓練集上點的相似程度為值分配新點。

第一項任務是確定我們的KNN模型中的k值。選擇k值的一般經驗法則是取樣本中數據點數的平方根。因此,對於COVID-19之前的數據集,我們取k = 32;對於COVID-19之後的數據集,我們取k = 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 )

然後,我們針對預測時間序列評估KNN模型。

before_cvid <- ll_ig(pdn_befr_vid)

afer_vd<- rog_ogn(redkn_afer_vd)

7.前饋神經網絡建模

我們將嘗試實現的下一個模型是帶有神經網絡的預測模型。在此模型中,我們使用單個隱藏層形式,其中只有一層輸入節點將加權輸入發送到接收節點的下一層。預測函數將單個隱藏層神經網絡模型擬合到時間序列。函數模型方法是將時間序列的滯後值用作輸入數據,以達到非線性自回歸模型。

第一步是確定神經網絡的隱藏層數。儘管沒有用於計算隱藏層數的特定方法,但時間序列預測遵循的最常見方法是通過計算使用以下公式:

其中Ns:訓練樣本數Ni:輸入神經元數No:輸出神經元數a:1.5 ^ -10

#隱藏層的創建

hn_before_covid <- length(before.Close)/(alpha*(lengthGOOG.Close + 61)

hn_after_covid <- length(after_covidClose)/(alpha*(lengthafter_ovdClose+65))

#擬合nn

nn(before_covid$GOOG.Close, size = hn_beoe_cid,

# 使用nnetar進行預測。

forecast(befe_cvid, h 61, I =UE)

forecast(aftr_coid, h = 5, I = RE)

plot(nn_fcst_afte_cvid)

然後,我們使用以下參數分析神經網絡模型的性能:

accuracy

accuracy

8.所有模型的比較

現在,我們使用參數諸如RMSE(均方根誤差),MAE(均值絕對誤差)和MAPE(均值絕對百分比誤差)對所有三個模型進行分析 。

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神經網絡13.08.71.0kable(sumary_tbl_aft_ci

fulith = F, fixdtead = T )

模型RMSEMAEMAPEARIMA16.610.41.0KNN45.935.73.3神經網絡14.79.81.0因此,從以上模型性能參數的總結中,我們可以看到神經網絡模型在兩個數據集上的性能均優於ARIMA和KNN模型。因此,我們將使用神經網絡模型來預測未來兩個月的股價。

9.最終模型:COVID-19之前

現在,我們使用直到2月的數據來預測3月和4月的值,然後將預測價格與實際價格進行比較,以檢查是否由於COVID-19可以歸因於任何重大影響。

foestdungcvid<- datafame("De

"Actua Values" =

datatable(foestdungcvid, ilte= 'to')

從表中我們可以看到,3月和4月期間,Google股票的實際價值通常比預測值要高一些。因此,可以說,儘管發生了這種全球性大流行,但Google股票的表現仍然相當不錯。

10.最終模型:COVID-19之後

現在,我們使用直到4月的數據預測5月和6月的值,以了解Google的未來股價。

foreataov <- data.frae(dn_reataeimean )

table(foreataov )

從表中可以得出結論,在5月和6月的接下來的幾個月中,Google股票的價格將繼續上漲並表現良好。

點擊標題查閱往期內容

Fama French (FF) 三因子模型和CAPM模型分析股票市場投資組合風險/收益可視化

配對交易策略統計套利量化交易分析股票市場

Copula 算法建模相依性分析股票收益率時間序列案例

用COPULA模型進行蒙特卡洛(MONTE CARLO)模擬和擬合股票收益數據分析

R使用LASSO回歸預測股票收益

金融時間序列模型ARIMA 和GARCH 在股票市場預測應用

時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格

自然語言處理NLP:主題LDA、情感分析疫情下的新聞文本數據

在R語言中使用航空公司複雜網絡對疫情進行建模

matlab用高斯曲線擬合模型分析疫情數據

R語言ARIMA-GARCH波動率模型預測股票市場蘋果公司日收益率時間序列

R語言中的時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格

R語言用綜合信息準則比較隨機波動率(SV)模型對股票價格時間序列建模

R語言回測交易:根據歷史信號/交易創建股票收益曲線

Python中TensorFlow的長短期記憶神經網絡(LSTM)、指數移動平均法預測股票市場和可視化

R語言k-Shape時間序列聚類方法對股票價格時間序列聚類

R語言邏輯回歸Logistic回歸分析預測股票漲跌

R語言時變波動率和ARCH,GARCH,GARCH-in-mean模型分析股市收益率時間序列

R語言中的copula GARCH模型擬合時間序列並模擬分析

R語言多元Copula GARCH 模型時間序列預測

R語言ARMA-GARCH-COPULA模型和金融時間序列案例R語言多元CopulaGARCH模型時間序列預測R語言乘法GARCH模型對高頻交易數據進行波動性預測

R語言GARCH-DCC模型和DCC(MVT)建模估計

Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預測

R語言時間序列GARCH模型分析股市波動率

R語言ARMA-EGARCH模型、集成預測算法對SPX實際波動率進行預測

matlab實現MCMC的馬爾可夫轉換ARMA - GARCH模型估計

Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預測

使用R語言對S&P500股票指數進行ARIMA + GARCH交易策略

R語言用多元ARMA,GARCH ,EWMA, ETS,隨機波動率SV模型對金融時間序列數據建模

R語言股票市場指數:ARMA-GARCH模型和對數收益率數據探索性分析

R語言多元Copula GARCH 模型時間序列預測

R語言使用多元AR-GARCH模型衡量市場風險

R語言中的時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格

R語言用Garch模型和回歸模型對股票價格分析

GARCH(1,1),MA以及歷史模擬法的VaR比較

matlab估計arma garch 條件均值和方差模型

R語言ARMA-GARCH-COPULA模型和金融時間序列案例

文章來源: https://twgreatdaily.com/zh-cn/d4395517267801ed5775486f349e1f82.html