日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习入门:隐马尔科夫模型-8

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习入门:隐马尔科夫模型-8 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

機器學習入門:隱馬爾科夫模型

1、實驗描述

  • 本實驗先簡單介紹隱馬爾科夫模型,然后提供一份股票交易的數據,通過建立隱馬爾科夫模型對股票數據進行分析,并將最終結果用圖的方式展示出來。

  • 實驗時長:45分鐘

  • 主要步驟:

    • 讀取數據文件

    • 數據預處理

    • 模型創建

    • 模型的預測

    • 模型評估

    • 繪制相關的指標

2、實驗環境

  • 虛擬機數量:1
  • 系統版本:CentOS 7.5
  • scikit-learn版本: 0.19.2
  • numpy版本:1.15.1
  • matplotlib版本:2.2.3
  • python版本:3.5
  • IPython版本:6.5.0
  • hmmlearn版本:0.2.0

3、相關技能

  • Python編程

  • Scikit-learn編程

  • Matplotlib編程

  • Numpy編程

  • 隱馬爾科夫模型

4、相關知識點

  • 隱馬爾科夫模型
  • 模型建立
  • 模型預測
  • 模型評估
  • 狀態序列
  • 觀測序列

5、實現效果

  • 使用隱馬爾科夫模型對股票維度分析結果如下圖所示:
圖 1

6、實驗步驟

6.1隱馬爾科夫模型:HMM(Hidden Markov Model)是關于時序的概率模型,描述由一個隱藏的馬爾科夫鏈生成不可觀測的狀態隨機序列,再由各個狀態生成觀測隨機序列的過程。隱馬爾科夫模型隨機生成的狀態隨機序列,稱為狀態序列;每個狀態生成一個觀測,由此產生的觀測隨機序列,稱為觀測序列。序列的每個位置可以看做是一個時刻。

6.1.1隱馬爾科夫模型三個基本問題:

6.1.1.1概率計算問題: 給定模型和觀測序列 ,計算模型λ下觀測序列O出現的概率P(O| λ)

6.1.1.2學習問題: 已知觀測序列,估計模型的參數,使得在該模型下觀測序列P(O| λ)最大

6.1.1.3預測問題:解碼問題:已知模型和觀測序列,求給定觀測序列條件概率P(I|O,λ)最大的狀態序列I

6.2.進入Anaconda創建的虛擬環境“ML” ,并準備相應的數據文件。

6.2.1.從zkpk的公共目錄下拷貝實驗所需的數據文件到zkpk的家目錄下

[zkpk@master ~]$ cd [zkpk@master ~]$ cp /home/zkpk/experiment/SH600000.txt /home/zkpk

6.2.1.1數據集SH600000.txt介紹:

6.2.1.2數據共1511行7列,每一行為一個股票交易相關的指標

6.2.1.3每列分別代表:日期、開盤、最高價、最低價、收盤、成交量、成交額

圖 2

6.2.2在zkpk的家目錄下執行如下命令

[zkpk@master ~]$ cd [zkpk@master ~]$ source activate ML (ML) [zkpk@ master ML]$

6.2.3此時已經進入虛擬環境。鍵入如下命令,進入ipython交互是編程環境

(ML) [zkpk@ master ML]$ ipython Python 3.5.4 |Anaconda, Inc.| (default, Nov 3 2017, 20:01:27) Type 'copyright', 'credits' or 'license' for more information IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help. In [1]:

6.3在Ipython交互式編程環境中開始進行實驗

6.3.1導入實驗所需的包

In [1]: import numpy as np...: from hmmlearn import hmm...: import matplotlib.pyplot as plt...: import matplotlib as mpl...: from sklearn.metrics.pairwise import pairwise_distances_argmin...: import warnings

6.3.2讀取數據文件

6.3.2.1使用“\t”分割符切詞, 跳過前兩行,抽取指定的列

In [2]: x = np.loadtxt('SH600000.txt', delimiter='\t', skiprows=2, usecols=(4, 5, 6, 2, 3)) # 列(4, 5, 6, 2, 3)分別對應數據集中的收盤價、成交量、成交額、最高、最低的數據

6.3.3數據預處理

6.3.3.1讀取對應的字段

In [6]: close_price = x[:, 0] #收盤價...: volumn = x[:, 1] #交易量...: amount = x[:, 2] #交易額

6.3.3.2計算振幅:每天的最高價與最低價的差

In [7]: amplitude_price = x[:, 3] - x[:, 4] # 振幅:每天的最高價與最低價的差 In [8]: diff_price = np.diff(close_price) # 漲跌值:收盤后價格做一個一階差分;即今日收盤價減去昨日收盤價

6.3.3.3所有元素跳過第一個元素

In [10]:volumn = volumn[1:] # 成交量...: amount = amount[1:] # 成交額...: amplitude_price = amplitude_price[1:] # 每日振幅

6.3.3.4將多個特征疊加起來,形成樣本。

In[11]: sample = np.column_stack((diff_price, volumn, amount, amplitude_price)) # 觀測值;column_stack利用1-D數組組成的序列,生成一個2-D數組,其中每個1-D數組依次作為結果2維數組中的列

6.3.4建立模型:訓練數據只有觀測序列,則HMM的學習需要使用EM算法,是非監督學習

In [12]: n = 5 #給定五個類別(狀態)...: model = hmm.GaussianHMM(n_components=n, covariance_type='full') # 建立模型 #指定每個類別的系數:方差各不相同。

6.3.5利用樣本進行模型訓練

In [13]:model.fit(sample) # 訓練模型

圖 3

6.3.6模型預測:

6.3.6.1輸出每個類別的相應概率值

6.3.6.2設置浮點輸出,以及每個維度的輸出個數

In [15]: y = model.predict_proba(sample) # 輸出類別的概率值...: np.set_printoptions(suppress=True, edgeitems=100)...: print('proba:\n', y)

圖 4

6.3.7繪制跌漲值,交易量,所有組分,組分概率的圖示

In [16]: t=np.arange(len(diff_price))#跌漲值的length作為時間維度的長度...: plt.figure(figsize=(10,6.7), facecolor='w') #設置圖示中畫布的整體大小及背影色...: plt.subplot(421) # 子圖的布局,4行兩列...: plt.plot(t, diff_price, 'r-')...: plt.grid(True)...: plt.title('amplitude_price') #每日振幅...: plt.subplot(422)...: plt.plot(t, volumn, 'g-') # 交易量...: plt.grid(True)...: plt.title('volumn')...: clrs = plt.cm.terrain(np.linspace(0, 0.8, n)) # linspace方法在指定范圍內返回均勻間隔的數字;...: plt.subplot(423)...: for i, clr in enumerate(clrs):...: plt.plot(t, y[:, i], '-', lw=0.3, color=clr, alpha=0.7)...: plt.title('All components') # 所有組分...: plt.grid(True)...: for i, clr in enumerate(clrs):...: axes = plt.subplot(4,2,i+4)...: plt.plot(t, y[:,i], '-', color=clr)...: print('Component probability ', y[:,i]) #組分概率...: plt.grid(True)...: plt.title("Compoent %d" %(i+1)) In [18]: plt.suptitle('SH600000 stock GaussianHMM Demarcation Hidden Variable') In [20]: plt.tight_layout() In [21]: plt.subplots_adjust(top=0.8) In [22]: plt.show()

圖 5

圖 6

7、參考答案

  • 代碼清單Hmm_test.py

圖 7

8、總結

本次實驗使用隱馬爾科夫模型,對股票數據進行分析,大體流程是數據預處理、建模、訓練模型、預測及最終結果可視化。涉及的理論及編碼知識量較大,需要大家多多理解相關的理論知識,在此基礎上進行相應的編程實現。在編程的過程中,要學會查閱文檔的方式解決疑問,如類、方法如何使用、作用是什么、某參數的意思是什么等等問題。

總結

以上是生活随笔為你收集整理的机器学习入门:隐马尔科夫模型-8的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。