自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

手把手:用Python搭建機(jī)器學(xué)習(xí)模型預(yù)測(cè)黃金價(jià)格

企業(yè)動(dòng)態(tài)
自古以來(lái),黃金一直作為貨幣而存在,就是在今天,黃金也具有非常高的儲(chǔ)藏價(jià)值,那么有沒(méi)有可能預(yù)測(cè)出黃金價(jià)格的變化趨勢(shì)呢?答案是肯定的,讓我們使用機(jī)器學(xué)習(xí)中的回歸算法來(lái)預(yù)測(cè)世界上貴重金屬之一,黃金的價(jià)格吧。

[[220629]]

編譯:小明同學(xué)君、吳雙、Yawei xia

新年總是跟黃金密不可分。新年第一天,讓我們嘗試用python搭建一個(gè)機(jī)器學(xué)習(xí)線性回歸模型,預(yù)測(cè)金價(jià)!

自古以來(lái),黃金一直作為貨幣而存在,就是在今天,黃金也具有非常高的儲(chǔ)藏價(jià)值,那么有沒(méi)有可能預(yù)測(cè)出黃金價(jià)格的變化趨勢(shì)呢?

答案是肯定的,讓我們使用機(jī)器學(xué)習(xí)中的回歸算法來(lái)預(yù)測(cè)世界上貴重金屬之一,黃金的價(jià)格吧。

我們將建立一個(gè)機(jī)器學(xué)習(xí)線性回歸模型,它將從黃金ETF (GLD)的歷史價(jià)格中獲取信息,并返回黃金ETF價(jià)格在第二天的預(yù)測(cè)值。

GLD 是最大的以黃金進(jìn)行直接投資的ETF交易基金。

在python的開(kāi)發(fā)環(huán)境下用機(jī)器學(xué)習(xí)預(yù)測(cè)黃金價(jià)格的步驟:

  • 導(dǎo)入Python庫(kù)并讀取黃金ETF 的數(shù)據(jù)
  • 定義解釋變量
  • 將數(shù)據(jù)切分為模型訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集
  • 建立線性回歸模型
  • 預(yù)測(cè)黃金ETF的價(jià)格

導(dǎo)入Python庫(kù)并讀取黃金 ETF 的數(shù)據(jù)

首先:導(dǎo)入實(shí)現(xiàn)此策略所需的所有必要的庫(kù)(LinearRegression,pandas,numpy,matplotlib,seaborn和fix_yahoo_finance)

  1. # LinearRegression is a machine learning library for linear regression   
  2. from sklearn.linear_model import LinearRegression   
  3. # pandas and numpy are used for data manipulation   
  4. import pandas as pd   
  5. import numpy as np   
  6. # matplotlib and seaborn are used for plotting graphs   
  7. import matplotlib.pyplot as plt   
  8. import seaborn   
  9. # fix_yahoo_finance is used to fetch data import f 

然后我們讀取過(guò)去10年間每天黃金ETF的價(jià)格數(shù)據(jù),并將數(shù)據(jù)儲(chǔ)存在Df中。我們移除那些不相關(guān)的變量并使用dropna函數(shù)刪除NaN值。然后我們繪制出黃金ETF的收盤(pán)價(jià)格。

  1. # Read data   
  2. Df = yf.download('GLD','2008-01-01','2017-12-31') 
  3. # Only keep close columns   
  4. DfDf=Df[['Close']]   
  5. # Drop rows with missing values   
  6. DfDf= Df.dropna()   
  7. # Plot the closing price of GLD   
  8. Df.Close.plot(figsize=(10,5))   
  9. plt.ylabel("Gold ETF Prices")  
  10. plt.show() 

輸出

定義解釋變量

解釋變量是被用來(lái)決定第二天黃金ETF價(jià)格數(shù)值的變量。簡(jiǎn)單地說(shuō),就是我們用來(lái)預(yù)測(cè)黃金ETF價(jià)格的特征值。本例中的解釋變量是過(guò)去3天和9天的價(jià)格移動(dòng)平均值。我們使用dropna()函數(shù)刪除NaN值,并將特征變量存于X中。

然而,你還可以在X中放入更多你認(rèn)為對(duì)于預(yù)測(cè)黃金ETF價(jià)格有用的變量。這些變量可以是技術(shù)指標(biāo),也可以是另一種ETF的價(jià)格(如黃金礦工ETF (簡(jiǎn)稱GDX)或石油ETF(簡(jiǎn)稱USO))或美國(guó)經(jīng)濟(jì)數(shù)據(jù)。

  1. Df['S_3'] = Df['Close'].shift(1).rolling(window=3).mean()   
  2. Df['S_9']= Df['Close'].shift(1).rolling(window=9).mean()   
  3. DfDf= Df.dropna()   
  4. X = Df[['S_3','S_9']]   
  5. X.head() 

輸出

定義因變量

同樣,因變量是取決于解釋變量的“被解釋變量”。簡(jiǎn)單地說(shuō),在這里就是我們?cè)噲D預(yù)測(cè)的黃金ETF價(jià)格。我們將黃金ETF的價(jià)格賦值為y。

  1. y = Df['Close'] 
  2. y.head() 

輸出

  1. 2008-02-08    91.000000  
  2. 2008-02-11    91.330002  
  3. 2008-02-12    89.330002  
  4. 2008-02-13    89.440002  
  5. 2008-02-14    89.709999  
  6. Name: Close, dtype: float64 

將數(shù)據(jù)切分為模型訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集

在此步驟中,我們將預(yù)測(cè)變量(解釋變量)數(shù)據(jù)和輸出(因變量)數(shù)據(jù)拆分為訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集。訓(xùn)練數(shù)據(jù)用于建立線性回歸模型,將輸入與預(yù)期輸出配對(duì)。測(cè)試數(shù)據(jù)用于評(píng)估模型的訓(xùn)練效果。

  • 前80%的數(shù)據(jù)用于訓(xùn)練模型,其余的數(shù)據(jù)用來(lái)測(cè)試模型。
  • X_train 和y_train是訓(xùn)練數(shù)據(jù)集。
  • X_test & y_test是測(cè)試數(shù)據(jù)集。
  1. t=.8   
  2. t = int(t*len(Df))   
  3. # Train dataset   
  4. XX_train = X[:t]   
  5. yy_train = y[:t]    
  6. # Test dataset   
  7. XX_test = X[t:]   
  8. yy_test = y[t:] 

建立線性回歸模型

接下來(lái)我們將建立一個(gè)線性回歸模型。什么是線性回歸呢?

如果我們?cè)噲D捕捉可以最優(yōu)解釋Y觀測(cè)值的X變量和Y變量之間的數(shù)學(xué)關(guān)系,我們將在X的觀測(cè)值形成的散點(diǎn)圖中去擬合一條線,那么這條線,也就是x和y之間的方程就被稱為線性回歸分析。

再進(jìn)一步地說(shuō),回歸解釋了因變量在自變量上的變化。因變量y是你想要預(yù)測(cè)的變量。自變量x是用來(lái)預(yù)測(cè)因變量的解釋變量。下面的回歸方程描述了這種關(guān)系:

  1. Y = m1 * X1 + m2 * X2 + CGold ETF price = m1 * 3 days moving average + m2 * 15 days moving average + c 

然后我們利用擬合方法來(lái)擬合自變量和因變量(x和y),從而生成系數(shù)和回歸常數(shù)。

  1. linear = LinearRegression().fit(X_train,y_train)   
  2. print "Gold ETF Price =", round(linear.coef_[0],2), \   
  3. "* 3 Days Moving Average", round(linear.coef_[1],2), \   
  4. "* 9 Days Moving Average +", round(linear.intercept_,2) 

輸出

黃金ETF價(jià)格=1.2×3天的移動(dòng)平均價(jià)-0.2×9天的移動(dòng)平均價(jià)+0.39

預(yù)測(cè)黃金ETF的價(jià)格

現(xiàn)在,是時(shí)候檢查模型是否在測(cè)試數(shù)據(jù)集中有效了。我們使用由訓(xùn)練數(shù)據(jù)集建立的線性模型來(lái)預(yù)測(cè)黃金ETF的價(jià)格。預(yù)測(cè)模型可以得到給定解釋變量X后相應(yīng)的黃金ETF價(jià)格(y)。

  1. predicted_price = linear.predict(X_test)    
  2. predicted_price = pd.DataFrame(predicted_price,index=y_test.index,columns = ['price'])    
  3. predicted_price.plot(figsize=(10,5))    
  4. y_test.plot()   
  5. plt.legend(['predicted_price','actual_price'])    
  6. plt.ylabel("Gold ETF Price")    
  7. plt.show() 

輸出

圖表顯示了黃金ETF價(jià)格的預(yù)測(cè)值和實(shí)際值(藍(lán)線是預(yù)測(cè)值,綠線是實(shí)際值)。

現(xiàn)在,讓我們使用score()函數(shù)來(lái)計(jì)算模型的擬合優(yōu)度。

  1. r2_score = linear.score(X[t:],y[t:])*100   
  2. float("{0:.2f}".format(r2_score)) 

可以看出,模型的R²是95.81%。R²總是在0到100%之間。接近100%的分?jǐn)?shù)表明該模型能很好地解釋黃金ETF的價(jià)格。

祝賀你,你剛剛學(xué)會(huì)了一種基本而又強(qiáng)大的機(jī)器學(xué)習(xí)技巧。

原文鏈接:

https://www.quantinsti.com/blog/gold-price-prediction-using-machine-learning-python/

【本文是51CTO專欄機(jī)構(gòu)大數(shù)據(jù)文摘的原創(chuàng)譯文,微信公眾號(hào)“大數(shù)據(jù)文摘( id: BigDataDigest)”】

     大數(shù)據(jù)文摘二維碼

 

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專欄
相關(guān)推薦

2022-01-18 09:21:17

Python機(jī)器學(xué)習(xí)黃金價(jià)格

2017-02-09 18:50:42

深度學(xué)習(xí)機(jī)器計(jì)算機(jī)

2021-12-02 11:39:28

Git服務(wù)器Linux

2022-03-14 14:47:21

HarmonyOS操作系統(tǒng)鴻蒙

2021-08-09 13:31:25

PythonExcel代碼

2017-10-18 09:48:13

深度學(xué)習(xí)TensorFlow入門(mén)篇

2011-03-25 12:45:49

Oracle SOA

2009-12-11 09:04:10

Windows搭建Li

2019-11-21 15:35:28

機(jī)器學(xué)習(xí)人工智能計(jì)算機(jī)

2017-01-18 09:04:13

TensorFlow圖像識(shí)別

2017-01-18 09:20:23

TensorFlow圖像識(shí)別

2016-04-27 09:49:16

用戶模型產(chǎn)品總結(jié)

2020-10-23 06:42:16

機(jī)器學(xué)習(xí)開(kāi)發(fā)人工智能

2010-07-06 09:38:51

搭建私有云

2010-07-06 09:43:57

搭建私有云

2022-01-04 08:52:14

博客網(wǎng)站Linux 系統(tǒng)開(kāi)源

2020-10-23 17:23:50

機(jī)器學(xué)習(xí)技術(shù)模型

2017-10-18 16:08:15

可視化交叉驗(yàn)證代碼

2018-04-05 22:55:34

數(shù)據(jù)問(wèn)答系統(tǒng)SQuAD

2021-02-02 13:31:35

Pycharm系統(tǒng)技巧Python
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)