44

技术贴:如何用「线性回归」和「梯度下降」预测比特币价格

 5 years ago
source link: http://www.huoxing24.com/newsdetail/20180818171404905894.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

rqIV32E.jpg!web

作者 | marciok;来源 | GitHub

能否窥探到比特币价格走势的一些情况?

在本文中,我将展示梯度下降如何与线性回归相结合,整个过程我将采用比特币价格及其在Google上的搜索次数作为数据来源。

我们假设谷歌搜索比特币的次数与比特币的价格之间存在某种关系。如果我们绘制一个图表,其中x轴是搜索次数、y是价格,我们可以注意到:这中间存在着线性模式,搜索次数越多,比特币价格呈现上涨的结果。

zyAFZrJ.jpg!web

y轴代表美元价格,x代表搜索数量

本文重点在于展示梯度下降的工作原理,并不能准确预测比特币价格涨跌。

我们先绘制一条遵循线性模式的线,为了准确预测,线与数据点接近。

首先,用等式绘制出线条:y = mx + b,其中m是线斜率,b是线与y轴相交的交点位置。

我们怎么才能找到最佳值?有一种称为Gradient Descent(梯度下降)的技术可以帮助我们找到最佳值。

什么是梯度下降?

梯度下降是一种优化技术、有助于减少误差函数产生误差的技术,此处的误差函数是误差平方的总和。

NBZZNne.jpg!web

可以设想一下,整条线是用m和b的猜测值绘制的,其中的误差是点到线的距离平方之和,再除以点数。

如何减少误差?

我们可以随机猜测m和b的值,并检查下错误是否减少,但这种方法并不理智。

换一种方法,我们先求出部分导数的话就可以知道误差值的移动速度,因此我们可以巧妙地更新这些值,想象一个球向下移动,底部是我们想要到达的地方,导数值可以告诉我们如何更新数据以便更接近底部。

iyYRbmQ.jpg!web

在本例中,y轴是误差,x轴是m或b,而不是图中的w

我们要做什么:

1、 提取比特币价格和谷歌搜索数量;

2、 将价格与搜索日期相匹配;

3、 设置超参数:初始值、学习率,m和b的初始值;

4、 计算误差,检查我们的算法;

5、 计算梯度:求m的导数和b的偏导数;

6、 乘以学习率,并更新与当前m和b的差值。

接着将所有数据放在一起,绘制所得的最佳直线:

r2eaeye.jpg!web

使用m和b的最佳值,我们可以画出接近最多点的线,由于梯度下降,我们也能够照需要的方向更新数值并降低错误率,从而生成适合我们想要的线。

Github完整推演过程: https://github.com/marciok/bitcoin-prices-and-gradient-descent/blob/master/Predicting%20Bitcoin%20prices%20with%20Google%20search%20.ipynb


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK