色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

有沒有可能通過機器學習預測股價走勢

江奕云2年前11瀏覽0評論

有沒有可能通過機器學習預測股價走勢?

如果給定一組股價數據集我們是不是有可能預測出未來的股價走勢?從機器學習的角度來說,預測股價走勢就是一個數據科學問題,但從有效市場理論來說,股票市場因為受眾多因素影響是隨機的和不可預測的。

在本文中我們將嘗試使用三種不同的模型來預測蘋果公司的股價,并且我們會把這三種模型的結果繪制在一張圖上以進行比較。因此,本文主要將分為如下四部分:

安裝依賴項

收集數據

編寫模型腳本

可視化分析

下面是本實現所需要的四個依賴項:

pip install csv

pip install numpy

pip install scikit-learn

pip install matplotlib

其中,CSV 允許我們從股價 CSV 格式的文件中讀取數據,Numpy 允許我們在數據集上執行計算,而 sikit-learn 允許我們構建預測模型,當然最后我們還需要使用 matplotlib 繪制數據點和模型曲線,因此我們才能進行可視化分析。

下面,首先需要從 Google Finance 下載數據集,我們可以在如下搜索框鍵入「NASDAQ:AAPL」,在點擊左側的歷史數據后選擇下載。

下面我們需要寫模型,首先我們要導入函數庫,小編使用的是 Jupyter notebook,上面四個包是 Anaconda 預安裝的,所以直接導入并沒有報錯。

import csv

import numpy as np

from sklearn.svm import SVR

import matplotlib.pyplot as plt

下面則是定義變量和讀取數據的函數 get_data():

dates = []

prices = []

def get_data(filename):

with open(filename, 'r') as csvfile:

csvFileReader = csv.reader(csvfile)

next(csvFileReader)

for row in csvFileReader:

dates.append(int(row[0].split('-')[0]))

prices.append(float(row[1]))

return

在上面的代碼中,我們首先需要初始化兩個空列表,即 dates 和 prices。下面我們需要構建 get_data() 以讀取股票數據并存入變量中,其中 filename 就是我們所下載的數據集名稱。在這個函數中,我們需要打開 CSV 格式的文件,讀取并儲存在 CSV 文件變量中。Open() 函數代表抽取文件內容,其中'r'代表讀取操作。如上所示,我們在使用 csv.reader() 讀取 csv 文件變量后將其賦予 csvFileReader 變量。并且隨后采用一個循環語句對于 csv 文件的每一行,將日期和價格分別添加到我們前面所定義的變量中,python 中的 append 方法會在列表尾部添加一個新元素。而 Python 中的 split() 方法通過指定分隔符對字符串進行切片,在本文的語句中 row[0].split('-')[0] 代表 csv 文件每行的第一元素以'-'為標準進行分割,并且只取分割后的第一個元素,也就是每個月的哪一天。

def predict_prices(dates, prices, x):

dates = np.reshape(dates, (len(dates), 1))

svr_lin = SVR(kernel= 'linear', C=1e3)

svr_poly = SVR(kernel= 'poly', C=1e3, degree= 2)

svr_rbf = SVR(kernel= 'rbf', C=1e3, gamma=0.1)

svr_lin.fit(dates, prices)

svr_poly.fit(dates, prices)

svr_rbf.fit(dates, prices)

如上所示的代碼,下面我們需要構建預測模型。首先需要使用 Numpy 將列表元素轉換為 n*1 的矩陣,其中 reshape 函數的三個參數分別代表所要重塑的列表元素、長度為列表元素的個數、并且為 1*n 維矩陣,n 的值等于我們數據量的大小。下面我們創建出三種支持向量機模型。

支持向量機是一種強大的分類模型,它試圖在保留最大間隔的條件下尋找決策邊界并將數據分割出來,然后模型根據決策邊界對新數據進行預測。SVM 同樣可以用于回歸任務,支持向量回歸同樣也是一種 SVM 模型,它將數據點間的間隔作為誤差以預測最可能出現的下一個數據點。

plt.scatter(dates,

prices,

color="black",

label="Data")

plt.plot(dates,

svr_rbf.predict(dates),

color="red",

label="RBF Model")

plt.plot(dates,

svr_lin.predict(dates),

color="green",

label='linear Model')

plt.plot(dates,

svr_poly.predict(dates),

color="blue",

label="Ploynomial Model")

plt.xlabel('Dates')

plt.ylabel('Price')

plt.title('Support Vector Reg')

plt.legend()

plt.show()

return svr_rbf.predict(x)[0], svr_lin.predict(x)[0], svr_poly.predict(x)[0]

get_data('aapl.csv')

predicted_prices = predict_prices(dates, prices, 29)

print(predicted_prices)

隨后我們可以創建圖表,我們可以將初始數據點表示為黑點,不同的模式使用不同顏色的曲線表示。如上所示,我們在使用 plot() 函數時,因為要在一張圖上繪制所有的信息,所以我們需要將所有信息繪制完成后在 plot.show() 展示圖像。其中 plt.scatter() 表示繪制散點圖,而 plt.plot() 表示繪制連線圖。在繪制模型曲線時,我們需要調用前面使用 scikit-learn 訓練的模型預測器,比如說 svr_lin.fit(dates, prices) 代表使用數據擬合線性支持向量回歸,而后面需要調用這一模型進行預測就需要使用 svr_lin.predict(dates),其代表著調用模型對變量 datas 中的數據進行預測。

下面展示了這三個模型所繪制出的可視化圖表。