Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用高斯混合模型对不同的股票市场状况进行聚类

使用高斯混合模型对不同的股票市场状况进行聚类

作者头像
deephub
发布于 2021-11-23 08:26:44
发布于 2021-11-23 08:26:44
1.8K00
代码可运行
举报
文章被收录于专栏:DeepHub IMBADeepHub IMBA
运行总次数:0
代码可运行

点击上方“Deephub Imba”,关注公众号,好文章不错过 !

介绍

通过过去的十年的发展,普通人越来越容易进入股票市场,每天进出市场的资金量创历史新高。

作为投资者,你可以通过多种方式培养何时买入或卖出的经验和直觉。其中一种最简单的方法是咨询朋友或其他投资者,但他们很快就会用相互矛盾的观点淹没你。

本篇文章将试图用严谨的数学工具而不是生硬的意见解决这个赚钱的黄金问题——我应该什么时候买入或卖出?

我将演示如何使用高斯混合模型来帮助确定资金何时进入或退出市场。

从数学上讲,任何给定时间的市场行情都可以称为“市场状态”。行情通常可以解释为任意数量的概念,例如熊市或牛市;波动大小等等。我们可以根据一些特征将交易日的状态进行聚类,这样会比每个对每个概念单独命名要好的多。

由于市场行情没有明确的定义——因此也没有代表市场的响应变量——所以使用无监督机器学习模型来确认市场状态可能要比监督式模型好很多,这也是本篇文章的理论假设。

有监督与无监督机器学习

这两种方法的区别在于使用的数据集是否有标记:监督学习使用有标注的输入和输出数据,而无监督学习算法没有确定的输出。数据集的标注是响应变量或试图预测的变量包含数值或分类值。因此,当使用监督机器学习算法时,预测变量是明确定义的。一个非常简单但强大的监督学习的例子是线性回归。通过x预测y

高斯混合模型(GMM)

高斯混合模型是p维空间中多个正态分布的重叠。空间的维度由变量的数量生成。例如,如果我们有一个变量(标准普尔 500 指数回报),GMM 将基于一维数据进行拟合。GMM 可用于模拟股票市场以及其他金融应用程序的状态。股市回报的一个特征是由高波动日产生的重尾。在分布的尾部捕获高度波动的日子的能力对于在建模过程中捕获信息十分重要。

上图代表了一些具有 4 个集群的多模态数据。高斯混合模型是一种用于标记数据的聚类模型。

使用 GMM 进行无监督聚类的一个主要好处是包含每个聚类的空间可以呈现椭圆形状。高斯混合模型不仅考虑均值,还考虑协方差来形成集群

GMM 方法的一个优点是它完全是数据驱动的。提供给模型的数据就可以进行聚类。重要的是,每个集群的标签可以是数字,因为数据驱动了潜在的特征,而不是人类的意见。

GMM 的数学解释

高斯混合模型的目标是将数据点分配到n个多正态分布中的一个。为此,使用期望最大化 (EM) 算法来求解每个多正态分布的参数。

第 1步:随机初始化起始正态分布参数

第 2 步:执行E步(Expectation),根据当前的参数值,计算样本隐藏变量的期望;

第 3 步:执行M步(Maximum),根据当前样本的隐藏变量,求解参数的最大似然估计;

第 4 步:计算(数据状态的分数,平均值,协方差)的联合概率的对数似然

第 5 步:重复第 2-4 步,直到对数似然收敛

每个数据点属于某个集群的概率如下所示。在索引的基础上,我们得到了每个数据点属于每个独立集群的概率。矩阵的大小将是按集群数量计算的数据点数。因为它是一个概率矩阵,在索引“i”下的值和为1。

索引i代表每个数据点或向量。索引 c 代表给定的集群;如果我们有三个集群 (c) 将是 1 或 2 或 3。

上面是多变量高斯公式,其中 mu 和 sigma 是需要使用 EM 算法进行估计的参数。

另一个关键概念是我们空间中的每个高斯分布都是无界的并且彼此重叠。根据数据点的位置,从每个分布中为其分配一个概率。属于任何集群的每个数据点的概率总和为 1。

最后,由于 EM 算法是一个迭代过程,我们需要衡量每一步的进度以了解何时停止。为此,我们使用模型的对数似然函数来测量参数何时收敛。

GMM 的实现

本节将分为两节,每节代表 GMM 的一个应用。

使用 GMM 将 S&P500 的回报分为三个状态。数据来自雅虎财经。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
import numpy as np
from datetime import datetime , timedelta 
import yfinance as yf  #import data via Yahoo
sp_list = ['SPY']

today = datetime.today()

# dd/mm/YY
#get last business day
offset = max(1, (today.weekday() + 6) % 7 - 3)
timed = timedelta(offset)
today_business = today - timed
print("d1 =", today_business)
today = today_business.strftime("%Y-%m-%d")

symbols_list = sp_list
start = '2000-01-01' 
end = today

print('S&P500 Stock download')
r = yf.download(symbols_list, start,end)

df_pivot = r
#replace all nan data with zero
treasury_yeild = df_pivot.Close

在这里我需要确定有多少状态最能代表市场环境,我们将假设三种状态——熊市、震荡、牛市。

我将使用 S&P500 的对数回报来拟合 GMM。

一维数据上 GMM 的 Python 实现非常简单。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scipy.stats import multivariate_normal
from sklearn.mixture import GaussianMixture
#'10YrYeild':treasury_yeild.Close.values
# 0. Create dataset
sp_list = ['SPY']

symbols_list = sp_list
start = '2008-01-01'

print('S&P500 Stock download')
r = yf.download(symbols_list, start,end)

daily_returns = (r.Close.pct_change()) #Daily log returns Close price for each day -  Y observations 
daily_returns = daily_returns.iloc[1:]

X = daily_returns.values

GMM = GaussianMixture(n_components=3).fit(X.reshape(-1,1)) # Instantiate and fit the model

使用 sklearn 的高斯混合模型就可以找到我们想得到的状态。

从上面的分析来看,两个状态也可能就可以了

可能出现的一个问题是趋同性。有可能是基于初始条件和EM算法中某个阈值的标准的定义上,也有可能是形成不同的分布。这个还需要进一步的调查。

使用符合 GMM 的宏观经济数据对美国经济进行分类

为了直观演示 GMM,我将使用二维数据(两个变量)。每个对应的簇都是三个维度的多正态分布。在这个例子中,第一个维度是通胀值(我们称之为 X),第二个维度是 S&P500 的月回报率(我们称之为 Y),第三个维度是 X&Y 的联合概率。换句话说,X 和 Y 的某个组合的概率是多少。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scipy.stats import multivariate_normal
from sklearn.mixture import GaussianMixture
#'10YrYeild':treasury_yeild.Close.values
# 0. Create dataset
gmm_data = pd.DataFrame({'Inflation':inflation.Weight,'Market_return':spy.Close.values})
gmm_data = gmm_data.to_numpy()

X = gmm_data

x,y = np.meshgrid(np.sort(X[:,0]),np.sort(X[:,1]))
XY = np.array([x.flatten(),y.flatten()]).T

GMM = GaussianMixture(n_components=3).fit(X) # Instantiate and fit the model
print('Converged:',GMM.converged_) # Check if the model has converged

该图展示了GMM相对于其他聚类算法的一个主要优点。正态分布可以产生椭圆形状,这个性质来自协方差矩阵。

给定二维数据,GMM 能够产生三种不同的状态。

最后,如果要创建一个有意义的模型,应该考虑更多的变量。实际上一系列不同的指标构成了美国经济及其表现。我们可以继续并合并任意数量的维度,但是在进入 n 维度之前,了解提供给模型的数据的相关结构很重要。

总结

这是我们如何将 GMM 应用于金融市场和经济的简单介绍。请记住这只是一个介绍, 引入 GMM 方法是为了提高将股票市场价格数据分类为状态的稳健性,市场条件和经济之间的联系还需要更加深入的研究。

作者:Ethan Johnson-Skinner, MSc

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DeepHub IMBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用高斯混合模型建立更精确的聚类
我真的很喜欢研究无监督学习问题。它们为监督学习问题提供了一个完全不同的挑战,用我拥有的数据进行实验的发挥空间要比监督学习大得多。毫无疑问,机器学习领域的大多数发展和突破都发生在无监督学习领域。
磐创AI
2019/11/18
1.1K0
使用高斯混合模型建立更精确的聚类
使用Python实现高斯混合模型聚类算法
高斯混合模型(Gaussian Mixture Model,GMM)是一种基于概率分布的聚类方法,它假设数据集由若干个高斯分布组成,每个高斯分布代表一个簇。在本文中,我们将使用Python来实现一个基本的高斯混合模型聚类算法,并介绍其原理和实现过程。
Echo_Wish
2024/04/15
5780
高斯混合模型:GMM和期望最大化算法的理论和代码实现
高斯混合模型(gmm)是将数据表示为高斯(正态)分布的混合的统计模型。这些模型可用于识别数据集中的组,并捕获数据分布的复杂、多模态结构。
deephub
2023/12/04
6770
高斯混合模型:GMM和期望最大化算法的理论和代码实现
高斯混合模型 GMM 的详细解释
来源:机器学习杂货店本文约3500字,建议阅读10+分钟本文为你介绍 KMeans 的一个替代方案之一,高斯混合模型。 高斯混合模型(后面本文中将使用他的缩写 GMM)听起来很复杂,其实他的工作原理和 KMeans 非常相似,你甚至可以认为它是 KMeans 的概率版本。这种概率特征使 GMM 可以应用于 KMeans 无法解决的许多复杂问题。 因为KMeans的限制很多,比如:它假设簇是球形的并且大小相同,这在大多数现实世界的场景中是无效的。并且它是硬聚类方法,这意味着每个数据点都分配给一个集群,这也是不
数据派THU
2023/05/11
1.1K0
高斯混合模型 GMM 的详细解释
使用高斯混合模型拆分多模态分布
高斯混合模型(Gaussian Mixture Models,简称GMM)是一种在统计和机器学习领域中常用的概率模型,用于对复杂数据分布进行建模和分析。GMM 是一种生成模型,它假设观测数据是由多个高斯分布组合而成的,每个高斯分布称为一个分量,这些分量通过权重来控制其在数据中的贡献。
deephub
2023/09/28
4720
使用高斯混合模型拆分多模态分布
EM算法与高斯混合聚类:理解与实践
文章链接:https://cloud.tencent.com/developer/article/2467869
小馒头学Python
2024/11/20
1930
EM算法与高斯混合聚类:理解与实践
如何利用高斯混合模型建立更好、更精确的集群?
高斯混合模型是一种强大的聚类算法。本文将带你了解高斯混合模型的工作原理以及如何在 Python 中实现它们,我们还将讨论 k-means 聚类算法,看看高斯混合模型是如何对它进行改进的。
AI研习社
2019/12/10
9320
【技术分享】高斯混合模型
  在上述定义中,x是维数为D的样本向量,mu是模型期望,sigma是模型协方差。对于单高斯模型,可以明确训练样本是否属于该高斯模型,所以我们经常将mu用训练样本的均值代替,将sigma用训练样本的协方差代替。 假设训练样本属于类别C,那么上面的定义可以修改为下面的形式:
腾讯云TI平台
2019/07/04
1.4K0
基于模型的聚类和R语言中的高斯混合模型
聚类模型是一个概念,用于表示我们试图识别的聚类类型。四种最常见的聚类方法模型是层次聚类,k均值聚类,基于模型的聚类和基于密度的聚类
拓端
2020/07/16
2K0
什么是高斯混合模型
机器学习可以分为两个主要领域:有监督学习和无监督学习。两者的主要区别在于数据的性质以及处理数据的方法。聚类是一个无监督学习的算法,利用这个算法可以从数据集里找到具有共性的点簇。假设我们有一个如下所示的数据集:
老齐
2020/09/08
1.5K0
深入机器学习系列之:高斯混合模型
现有的高斯模型有单高斯模型(SGM)和高斯混合模型(GMM)两种。从几何上讲,单高斯分布模型在二维空间上近似于椭圆,在三维空间上近似于椭球。 在很多情况下,属于同一类别的样本点并不满足“椭圆”分布的特性,所以我们需要引入混合高斯模型来解决这种情况。
数据猿
2019/11/20
9840
深入机器学习系列之:高斯混合模型
技术干货 | 一文详解高斯混合模型原理
高斯混合模型(Gaussian Mixture Model)通常简称GMM,是一种业界广泛使用的聚类算法,该方法使用了高斯分布作为参数模型,并使用了期望最大(Expectation Maximization,简称EM)算法进行训练。本文对该方法的原理进行了通俗易懂的讲解,期望读者能够更直观地理解方法原理。文本的最后还分析了高斯混合模型与另一种常见聚类算法K-means的关系,实际上在特定约束条件下,K-means算法可以被看作是高斯混合模型(GMM)的一种特殊形式(达观数据 陈运文)。 什么是高斯分布?
达观数据
2018/03/30
2.4K0
技术干货 | 一文详解高斯混合模型原理
K-Means(K均值)、GMM(高斯混合模型),通俗易懂,先收藏了!
什么是聚类算法?聚类是一种机器学习技术,它涉及到数据点的分组。给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组。理论上,同一组中的数据点应该具有相似的属性和/或特征,而不同组中的数据点应该具有高度不同的属性和/或特征。聚类是一种无监督学习的方法,是许多领域中常用的统计数据分析技术。
mantch
2019/07/30
6.7K0
K-Means(K均值)、GMM(高斯混合模型),通俗易懂,先收藏了!
如何用高斯混合模型 GMM 做聚类
当我们在做聚类任务时, 如果每一类的分布已知的话,那么要求出每个样本属于哪一类, 只需要计算出它归属于 k 个不同簇的概率,然后选择概率值最高的那个簇作为它最终的归属即可。
杨熹
2018/12/26
2.1K0
【数据挖掘】高斯混合模型 ( 模型简介 | 软聚类 | 概率作用 | 高斯分布 | 概率密度函数 | 高斯混合模型参数 | 概率密度函数 )
1 . 高斯混合模型 与 K-Means 相同点 : 高斯混合模型方法 与 K-Means 方法 , 都是通过多次迭代 , 每次迭代都对聚类结果进行改进 , 最终达到算法收敛 , 聚类分组结果达到最优 ;
韩曙亮
2023/03/27
1.9K0
机器学习高斯混合模型:聚类原理分析(前篇)
交流思想,注重分析,更注重通过实例让您通俗易懂。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来! 01 — 回顾 近几天,分析了期望最大算法的基本思想,它是用来迭代求解隐式变量的利器,我们举例了两地的苹果好坏分布为例来求解隐式参数,苹果的出处,进而求出烟台或威海的苹果好坏的二项分布的参数:好果的概率。关于二项分布和离散式随机变量的基础理论知识,请参考: 机器学习储备(11):说说离散型随机变量 机器学习储备(12):二项分布的例子解析 注意在求解烟台或威
double
2018/04/02
1.7K0
机器学习高斯混合模型:聚类原理分析(前篇)
机器学习day15高斯混合模型
高斯混合模型(Gaussian Mixed Model,GMM)也是常见的聚类算法。使用EM算法进行迭代计算。高斯混合模型假设了每个簇的数据符合正态分布(高斯分布),当前的数据分布就是各个簇的高斯分布叠加在一起。
福贵
2020/08/26
7040
机器学习day15高斯混合模型
【Scikit-Learn 中文文档】高斯混合模型 - 无监督学习 - 用户指南 | ApacheCN
2.1. 高斯混合模型 sklearn.mixture 是一个应用高斯混合模型进行非监督学习的包,支持 diagonal,spherical,tied,full四种协方差矩阵 (注:diagona
片刻
2018/01/15
2.6K0
【Scikit-Learn 中文文档】高斯混合模型 - 无监督学习 - 用户指南 | ApacheCN
高斯混合模型:不掉包实现多维数据聚类分析
《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来! 01 — 回顾 昨天实现推送了,GMM高斯混合的EM算法实现的完整代码,这是不掉包的实现,并且将结果和sklearn中的掉包实现做了比较:聚类结果基本一致,要想了解这个算法实现代码的小伙伴,可以参考: 机器学习高斯混合模型:聚类原理分析(前篇) 机器学习高斯混合模型(中篇):聚类求解 机器学习高斯混合模型(后篇):GMM求解完整代码实现 机器学习
double
2018/04/02
1.3K0
高斯混合模型:不掉包实现多维数据聚类分析
机器学习高斯混合模型(中篇):聚类求解
《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来! 01 — 回顾 昨天,介绍了高斯混合模型(GMM)的一些有意思的小例子,说到高斯混合能预测出每个样本点属于每个簇的得分值,这个具有非常重要的意义,大家想了解这篇推送的,请参考: 机器学习高斯混合模型:聚类原理分析(前篇) 02 — GMM求解思路 GMM中的归纳偏好是组成数据的几个簇都满足高斯分布。 GMM求解的已知条件: 被分簇的个数是已知的
double
2018/04/02
1.4K0
机器学习高斯混合模型(中篇):聚类求解
推荐阅读
相关推荐
使用高斯混合模型建立更精确的聚类
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验