国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python基于機(jī)器學(xué)習(xí)實(shí)現(xiàn)的股票價(jià)格預(yù)測(cè)、股票預(yù)測(cè)源碼+數(shù)據(jù)集,機(jī)器學(xué)習(xí)大作業(yè)

這篇具有很好參考價(jià)值的文章主要介紹了Python基于機(jī)器學(xué)習(xí)實(shí)現(xiàn)的股票價(jià)格預(yù)測(cè)、股票預(yù)測(cè)源碼+數(shù)據(jù)集,機(jī)器學(xué)習(xí)大作業(yè)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Feature與預(yù)測(cè)目標(biāo)的選取

選擇的feature:

  • 開(kāi)盤(pán)價(jià)
  • 最高成交價(jià)
  • 最低成交價(jià)
  • 成交量

選擇的預(yù)測(cè)目標(biāo):

  • 收盤(pán)價(jià)

因?yàn)楣善眱r(jià)格的影響因素太多,通過(guò)k線數(shù)據(jù)預(yù)測(cè)未來(lái)的價(jià)格變化基本不可行,只有當(dāng)天之內(nèi)的數(shù)據(jù)還有一定的關(guān)聯(lián),故feature與target都選擇的是當(dāng)天的數(shù)據(jù)。

加載數(shù)據(jù)

為了加快數(shù)據(jù)的處理速度,提前將mariadb數(shù)據(jù)庫(kù)中的數(shù)據(jù)查詢(xún)出來(lái),保存成feather格式的數(shù)據(jù),以提高加載數(shù)據(jù)的速度。關(guān)鍵代碼如下:

def main_code_to_feather():
    # Get Cursor, Fieldinfo And Total Rows
    cur = conn.cursor()
    labels = [fld[0] for fld in get_fieldinfo(cur)] # 獲取所有的字段信息
    codes = get_all_stock_code(cur) # 獲取所有的股票代碼
    code_inedx = 0
    for code in codes:
        print("Processing:", code_inedx, "/", len(codes))
        code_inedx += 1
        data = fetch_by_code(cur, code, None, None).fetchall() # 獲取對(duì)應(yīng)股票的數(shù)據(jù)
        df = pd.DataFrame(data=data, columns=labels) # 將數(shù)據(jù)放入pd的表
        df.drop(columns=["id"], inplace=True) # 數(shù)據(jù)庫(kù)中的id字段沒(méi)有意義,drop掉
        os.makedirs("data_by_code", exist_ok=True)
        save_path = os.path.join("data_by_code", code+".feather") # 將股票數(shù)據(jù)保存成feather格式的數(shù)據(jù)
        df.to_feather(save_path)

if __name__ == "__main__":
    main_code_to_feather()

經(jīng)過(guò)處理,不同股票的數(shù)據(jù)保存在了不同的文件中,列名還保持著數(shù)據(jù)庫(kù)中的字段名。我選擇了股票代碼為sh600010的這只股票作為數(shù)據(jù)分析的數(shù)據(jù)來(lái)源。

從文件中加載數(shù)據(jù)的代碼如下:

df = pd.read_feather("data_by_code/sh600010.feather")

處理數(shù)據(jù)

從股票數(shù)據(jù)中取出開(kāi)盤(pán)價(jià)、最高成交價(jià)、最低成交價(jià)和成交量作為feature,取出收盤(pán)價(jià)作為預(yù)測(cè)的目標(biāo),最后取出日期作為繪圖的橫座標(biāo)數(shù)據(jù)。關(guān)鍵代碼如下:

x_tmp = []
y_tmp = []
date_tmp = []
for row in range(df.shape[0]):
    today = df.loc[row]
    # 當(dāng)天信息
    x_tmp.append(tuple([
        today["popen"] / 1e1,
        today["phigh"] / 1e1,
        today["plow"] / 1e1,
        today["vol"] / 1e4, # 防止loss溢出
    ]))
    # 收盤(pán)價(jià)格
    y_tmp.append(today["pclose"] / 1e1) # y/10防止loss溢出
    # 日期
    date_tmp.append(today["deal_date"])
x = tf.constant(x_tmp, dtype=tf.float32)
y = tf.constant(y_tmp, dtype=tf.float32)

這里將關(guān)鍵指標(biāo)都除以了一個(gè)固定的數(shù),可以防止loss溢出導(dǎo)致模型無(wú)法優(yōu)化。

劃分訓(xùn)練集與測(cè)試集,取最后5%的數(shù)據(jù)作為測(cè)試集。代碼如下:

data_size = len(x_data)
test_size = int(data_size * 0.05)
x_train = x_data[:data_size - test_size]
y_train = y_data[:data_size - test_size]
x_test = x_data[data_size - test_size:]
y_test = y_data[data_size - test_size:]
date_test = date_data[data_size - test_size:]

選取模型并進(jìn)行訓(xùn)練

我選取的是線性模型,使用線性模型進(jìn)行訓(xùn)練,在訓(xùn)練時(shí)使用了tensorflow的keras庫(kù)來(lái)簡(jiǎn)化代碼的編寫(xiě):

model = keras.Sequential(
    [
        layers.Dense(1, name="layer1"), # 輸出size為1,即線性回歸模型
    ]
)
model.compile(
    optimizer = optimizers.SGD(learning_rate=0.01),
    loss = losses.MeanSquaredError(),
)
history = model.fit(x_train, y_train, batch_size=256, epochs=128, validation_split=0.2)

使用模型進(jìn)行預(yù)測(cè)

使用訓(xùn)練過(guò)的模型對(duì)測(cè)試數(shù)據(jù)集進(jìn)行預(yù)測(cè):

y_predict = model.predict(x_test)
y_pred = []
for i in range(len(y_test)):
    y_pred.append(y_predict[i][0])

繪制真實(shí)值與預(yù)測(cè)值的圖像

使用matplotlib繪制圖表,使用日期作為橫座標(biāo),使用收盤(pán)價(jià)÷10作為縱座標(biāo)。

plt.figure(figsize=(16, 8))
plt.plot(date_test, y_test, label="real")
plt.plot(date_test, y_pred, label="predict")

對(duì)預(yù)測(cè)結(jié)果的分析

根據(jù)預(yù)測(cè)結(jié)果繪制的函數(shù)圖像如圖所示:

Python基于機(jī)器學(xué)習(xí)實(shí)現(xiàn)的股票價(jià)格預(yù)測(cè)、股票預(yù)測(cè)源碼+數(shù)據(jù)集,機(jī)器學(xué)習(xí)大作業(yè)

根據(jù)圖像可以看出,預(yù)測(cè)值和真實(shí)值差距較大。這是由于影響股票價(jià)格的因素很多,選取的幾個(gè)參數(shù)不能準(zhǔn)確預(yù)測(cè)。

但是同時(shí)也可以看出,預(yù)測(cè)出來(lái)的結(jié)果與真實(shí)值變化趨勢(shì)相近,說(shuō)明線性回歸模型在一定程度上能夠解釋收盤(pán)價(jià)與選取的feature之間的關(guān)系。

完整代碼下載地址:

Python基于機(jī)器學(xué)習(xí)實(shí)現(xiàn)的股票價(jià)格預(yù)測(cè)、股票預(yù)測(cè)源碼+數(shù)據(jù)集,機(jī)器學(xué)習(xí)大作業(yè)

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-418153.html

到了這里,關(guān)于Python基于機(jī)器學(xué)習(xí)實(shí)現(xiàn)的股票價(jià)格預(yù)測(cè)、股票預(yù)測(cè)源碼+數(shù)據(jù)集,機(jī)器學(xué)習(xí)大作業(yè)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包