美文网首页机器学习
07 隐马尔可夫模型 - 案例三 - 股票数据维度信息提取

07 隐马尔可夫模型 - 案例三 - 股票数据维度信息提取

作者: 白尔摩斯 | 来源:发表于2018-12-19 20:22 被阅读120次

    06 隐马尔可夫模型 - 案例二 - GMHMM应用

    股票数据维度信息提取案例 - 数据格式

    SH600000.txt

    常规操作

    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
    
    warnings.filterwarnings("ignore")   # hmmlearn(0.2.0) < sklearn(0.18)
    
    def expand(a, b):
        d = (b - a) * 0.05
        return a-d, b+d
    

    1、 加载数据

    0日期 1开盘 2最高 3最低 4收盘 5成交量 6成交额
    delimiter: 指定分隔符
    skiprows:给定前面多少行数据不进行处理
    usecols: 给定第4 5 6 2 3这五列数据进行读入(下标从0开始)

    x = np.loadtxt('SH600000.txt', delimiter='\t', skiprows=2, usecols=(4, 5, 6, 2, 3))
    close_price = x[:, 0] # 收盘价
    volumn = x[:, 1] # 成交量
    amount = x[:, 2] # 成交额
    amplitude_price = x[:, 3] - x[:, 4] # 每天的最高价与最低价的差
    diff_price = np.diff(close_price)   # 涨跌值(每天相对于昨天的涨跌幅)
    volumn = volumn[1:]                 # 成交量(今天的成交量)
    amount = amount[1:]                 # 成交额(今天的成交额度)
    amplitude_price = amplitude_price[1:]   # 每日振幅(今天的振幅)
    sample = np.column_stack((diff_price, volumn, amount, amplitude_price))    # 观测值
    print("样本量:%d, 特征数目:%d" % sample.shape)
    sample
    

    2 模型构建

    ## 给定隐特征的数目
    n = 5
    model = hmm.GaussianHMM(n_components=n, covariance_type='full')
    model.fit(sample)
    y = model.predict_proba(sample) # 获取预测的概率
    print(y)
    print(model.predict(sample)) # 获取预测状态值
    

    3、画图

    t = np.arange(len(diff_price))
    mpl.rcParams['font.sans-serif'] = [u'SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    plt.figure(figsize=(10,8), facecolor='w')
    plt.subplot(431)
    plt.plot(t, diff_price, 'r-')
    plt.grid(True)
    plt.title(u'涨跌幅')
    plt.subplot(432)
    plt.plot(t, volumn, 'g-')
    plt.grid(True)
    plt.title(u'交易量')
    
    # 产生一个颜色
    clrs = plt.cm.terrain(np.linspace(0, 0.8, n))
    plt.subplot(433)
    for i, clr in enumerate(clrs):
        # 画到一张图中
        plt.plot(t, y[:, i], '-', color=clr, alpha=0.7)
    plt.title(u'所有组分')
    plt.grid(True)
    
    # 分开画
    for i, clr in enumerate(clrs):
        plt.subplot(4, 3, i+4)
        plt.plot(t, y[:, i], '-', color=clr)
        plt.title(u'组分%d' % (i+1))
        plt.grid(True)
    plt.suptitle(u'SH600000股票:GaussianHMM分解隐变量', fontsize=18)
    plt.tight_layout()
    plt.subplots_adjust(top=0.9)
    plt.show()
    

    展望:

    我们假定了内部具有5个我们无法知道的隐含状态的影响;我们观测到的就是股票在今天相当于昨天是涨了还是迭了;

    可以深入探讨以下问题:如果现在假定观测到的今天的股票相对于昨天是"涨",那么明天相对于今天是涨的概率是多大,以及明天相对于今天是跌的概率是多少?

    PS: 这个案例是在假定了股票的涨跌只和前一天的相关指标有关,和前几天的无关。

    相关文章

      网友评论

        本文标题:07 隐马尔可夫模型 - 案例三 - 股票数据维度信息提取

        本文链接:https://www.haomeiwen.com/subject/fyjskqtx.html