歡迎閱讀 Python 機器學習系列教程的回歸部分。這里,你應(yīng)該已經(jīng)安裝了 Scikit-Learn。如果沒有,安裝它,以及 Pandas 和 Matplotlib。
pip install numpy
pip install scipy
pip install scikit-learn
pip install matplotlib
pip install pandas
除了這些教程范圍的導入之外,我們還要在這里使用 Quandl:
pip install quandl
首先,對于我們將其用于機器學習而言,什么是回歸呢?它的目標是接受連續(xù)數(shù)據(jù),尋找最適合數(shù)據(jù)的方程,并能夠?qū)μ囟ㄖ颠M行預測。使用簡單的線性回歸,你可以僅僅通過創(chuàng)建最佳擬合直線,來實現(xiàn)它。
這里,我們可以使用這條直線的方程,來預測未來的價格,其中日期是 x 軸。
回歸的熱門用法是預測股票價格。由于我們會考慮價格隨時間的流動,并且使用連續(xù)的數(shù)據(jù)集,嘗試預測未來的下一個流動價格,所以可以這樣做。
回歸是監(jiān)督的機器學習的一種,也就是說,科學家向其展示特征,之后向其展示正確答案來教會機器。一旦教會了機器,科學家就能夠使用一些不可見的數(shù)據(jù)來測試機器,其中科學家知道正確答案,但是機器不知道。機器的答案會與已知答案對比,并且度量機器的準確率。如果準確率足夠高,科學家就會考慮將其算法用于真實世界。
由于回歸廣泛用于股票價格,我們可以使用一個示例從這里開始。最開始,我們需要數(shù)據(jù)。有時候數(shù)據(jù)易于獲取,有時你需要出去并親自收集。我們這里,我們至少能夠以簡單的股票價格和成交量信息開始,它們來自 Quandl。我們會抓取 Google 的股票價格,它的代碼是GOOGL:
import pandas as pd
import quandl
df = quandl.get("WIKI/GOOGL")
print(df.head())
注意:寫這篇文章的時候,Quandl 的模塊使用大寫 Q 引用,但現(xiàn)在是小寫 q,所以import quandl。
到這里,我們擁有:
Open High Low Close Volume Ex-Dividend
Date
2004-08-19 100.00 104.06 95.96 100.34 44659000 0
2004-08-20 101.01 109.08 100.50 108.31 22834300 0
2004-08-23 110.75 113.48 109.05 109.40 18256100 0
2004-08-24 111.24 111.60 103.57 104.87 15247300 0
2004-08-25 104.96 108.00 103.88 106.00 9188600 0
Split RaTIo Adj. Open Adj. High Adj. Low Adj. Close
Date
2004-08-19 1 50.000 52.03 47.980 50.170
2004-08-20 1 50.505 54.54 50.250 54.155
2004-08-23 1 55.375 56.74 54.525 54.700
2004-08-24 1 55.620 55.80 51.785 52.435
2004-08-25 1 52.480 54.00 51.940 53.000
Adj. Volume
Date
2004-08-19 44659000
2004-08-20 22834300
2004-08-23 18256100
2004-08-24 15247300
2004-08-25 9188600
這是個非常好的開始,我們擁有了數(shù)據(jù),但是有點多了。
這里,我們有很多列,許多都是多余的,還有些不怎么變化。我們可以看到,常規(guī)和修正(Adj)的列是重復的。修正的列看起來更加理想。常規(guī)的列是當天的價格,但是股票有個叫做分拆的東西,其中一股突然就變成了兩股,所以一股的價格要減半,但是公司的價值不變。修正的列為股票分拆而調(diào)整,這使得它們對于分析更加可靠。
所以,讓我們繼續(xù),削減原始的 DataFrame。
df = df[['Adj. Open', 'Adj. High', 'Adj. Low', 'Adj. Close', 'Adj. Volume']]
現(xiàn)在我們擁有了修正的列,以及成交量。有一些東西需要注意。許多人談?wù)摶蛘呗犝f機器學習,就像無中生有的黑魔法。機器學習可以突出已有的數(shù)據(jù),但是數(shù)據(jù)需要先存在。你需要有意義的數(shù)據(jù)。所以你怎么知道是否有意義呢?我的最佳建議就是,僅僅簡化你的大腦??紤]一下,歷史價格會決定未來價格嗎?有些人這么認為,但是久而久之這被證實是錯誤的。但是歷史規(guī)律呢?突出的時候會有意義(機器學習會有所幫助),但是還是太弱了。那么,價格變化和成交量隨時間的關(guān)系,再加上歷史規(guī)律呢?可能更好一點。所以,你已經(jīng)能夠看到,并不是數(shù)據(jù)越多越好,而是我們需要使用有用處的數(shù)據(jù)。同時,原始數(shù)據(jù)應(yīng)該做一些轉(zhuǎn)換。
考慮每日波動,例如最高價減最低價的百分比差值如何?每日的百分比變化又如何呢?你覺得Open, High, Low, Close這種簡單數(shù)據(jù),還是Close, Spread/VolaTIlity, %change daily更好?我覺得后者更好一點。前者都是非常相似的數(shù)據(jù)點,后者基于前者的統(tǒng)一數(shù)據(jù)創(chuàng)建,但是帶有更加有價值的信息。