大數(shù)據(jù)文摘作品 編譯:小明同學(xué)君、吳雙、Yawei xia 新年總是跟黃金密不可分。新年第一天,讓我們嘗試用python搭建一個(gè)機(jī)器學(xué)習(xí)線性回歸模型,預(yù)測金價(jià)! 自古以來,黃金一直作為貨幣而存在,就是在今天,黃金也具有非常高的儲(chǔ)藏價(jià)值,那么有沒有可能預(yù)測出黃金價(jià)格的變化趨勢呢? 答案是肯定的,讓我們使用機(jī)器學(xué)習(xí)中的回歸算法來預(yù)測世界上貴重金屬之一,黃金的價(jià)格吧。 我們將建立一個(gè)機(jī)器學(xué)習(xí)線性回歸模型,它將從黃金ETF (GLD)的歷史價(jià)格中獲取信息,并返回黃金ETF價(jià)格在第二天的預(yù)測值。 GLD 是最大的以黃金進(jìn)行直接投資的ETF交易基金。 (詳見:http://www./GLD) 在python的開發(fā)環(huán)境下用機(jī)器學(xué)習(xí)預(yù)測黃金價(jià)格的步驟:
導(dǎo)入Python庫并讀取黃金 ETF 的數(shù)據(jù) 首先:導(dǎo)入實(shí)現(xiàn)此策略所需的所有必要的庫(LinearRegression,pandas,numpy,matplotlib,seaborn和fix_yahoo_finance) # LinearRegression is a machine learning library for linear regression 然后我們讀取過去10年間每天黃金ETF的價(jià)格數(shù)據(jù),并將數(shù)據(jù)儲(chǔ)存在Df中。我們移除那些不相關(guān)的變量并使用dropna函數(shù)刪除NaN值。然后我們繪制出黃金ETF的收盤價(jià)格。 # Read data 輸出 定義解釋變量 解釋變量是被用來決定第二天黃金ETF價(jià)格數(shù)值的變量。簡單地說,就是我們用來預(yù)測黃金ETF價(jià)格的特征值。本例中的解釋變量是過去3天和9天的價(jià)格移動(dòng)平均值。我們使用dropna()函數(shù)刪除NaN值,并將特征變量存于X中。 然而,你還可以在X中放入更多你認(rèn)為對于預(yù)測黃金ETF價(jià)格有用的變量。這些變量可以是技術(shù)指標(biāo),也可以是另一種ETF的價(jià)格(如黃金礦工ETF (簡稱GDX)或石油ETF(簡稱USO))或美國經(jīng)濟(jì)數(shù)據(jù)。 Df['S_3'] = Df['Close'].shift(1).rolling(window=3).mean() 輸出 定義因變量 同樣,因變量是取決于解釋變量的“被解釋變量”。簡單地說,在這里就是我們試圖預(yù)測的黃金ETF價(jià)格。我們將黃金ETF的價(jià)格賦值為y。 y = Df['Close'] 輸出 2008-02-08 91.000000 將數(shù)據(jù)切分為模型訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集 在此步驟中,我們將預(yù)測變量(解釋變量)數(shù)據(jù)和輸出(因變量)數(shù)據(jù)拆分為訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集。訓(xùn)練數(shù)據(jù)用于建立線性回歸模型,將輸入與預(yù)期輸出配對。測試數(shù)據(jù)用于評估模型的訓(xùn)練效果。
t=.8 建立線性回歸模型 接下來我們將建立一個(gè)線性回歸模型。什么是線性回歸呢? 如果我們試圖捕捉可以最優(yōu)解釋Y觀測值的X變量和Y變量之間的數(shù)學(xué)關(guān)系,我們將在X的觀測值形成的散點(diǎn)圖中去擬合一條線,那么這條線,也就是x和y之間的方程就被稱為線性回歸分析。 再進(jìn)一步地說,回歸解釋了因變量在自變量上的變化。因變量y是你想要預(yù)測的變量。自變量x是用來預(yù)測因變量的解釋變量。下面的回歸方程描述了這種關(guān)系: Y = m1 * X1 + m2 * X2 + CGold ETF price = m1 * 3 days moving average + m2 * 15 days moving average + c 然后我們利用擬合方法來擬合自變量和因變量(x和y),從而生成系數(shù)和回歸常數(shù)。 linear = LinearRegression().fit(X_train,y_train) 輸出 黃金ETF價(jià)格=1.2×3天的移動(dòng)平均價(jià)-0.2×9天的移動(dòng)平均價(jià)+0.39 預(yù)測黃金ETF的價(jià)格 現(xiàn)在,是時(shí)候檢查模型是否在測試數(shù)據(jù)集中有效了。我們使用由訓(xùn)練數(shù)據(jù)集建立的線性模型來預(yù)測黃金ETF的價(jià)格。預(yù)測模型可以得到給定解釋變量X后相應(yīng)的黃金ETF價(jià)格(y)。 predicted_price = linear.predict(X_test) 輸出 圖表顯示了黃金ETF價(jià)格的預(yù)測值和實(shí)際值(藍(lán)線是預(yù)測值,綠線是實(shí)際值)。 現(xiàn)在,讓我們使用score()函數(shù)來計(jì)算模型的擬合優(yōu)度。 r2_score = linear.score(X[t:],y[t:])*100 可以看出,模型的R2是95.81%。R2總是在0到100%之間。接近100%的分?jǐn)?shù)表明該模型能很好地解釋黃金ETF的價(jià)格。 祝賀你,你剛剛學(xué)會(huì)了一種基本而又強(qiáng)大的機(jī)器學(xué)習(xí)技巧。 原文鏈接: https://www./blog/gold-price-prediction-using-machine-learning-python/ 【今日機(jī)器學(xué)習(xí)概念】 Have a Great Definition 志愿者介紹 |
|