Ruby中的线性回归

一点数学和一点代码,Ruby中的机器学习

线性回归是最简单的机器学习算法之一,但仍然可以很好地执行。 更重要的是,很容易掌握其中一些机器学习的核心概念,而不会因为那里更复杂的算法而分心。

我们将讲解线性回归的基础知识,在ruby中实现所有必要的代码,并使用它来预测一些事情。 将会有足够的数学来理解正在发生的事情,但是重点将放在代码上。

因为您正在阅读本文,所以您可能会对机器学习感兴趣。 对于开发人员来说,感觉就像与我们通常要面对的野兽完全不同。 至少我是这样。 真正帮助我理解一些事情的是编写自己的线性回归算法。 不,不用担心,这不是一个疯狂的壮举-实际上,这正是我们在一秒钟内要做的事情。 我的希望是,首先用代码解决这个话题可能会帮助我的一些红宝石开发人员更轻松地进行机器学习。

线性回归是一种受监督的机器学习算法。 与例如不同的值相比,预测的输出是连续的值。

监督:您在训练算法时告诉算法预期的结果,您基本上知道预期的结果。

连续价值:通常是诸如价格,环境价值之类的价值,与使您能够对某些事物进行分类的不同价值相反。 例如,当您的算法可以说:图片上有一辆汽车时,它会输出一个不同的值。 是的,有时候通过将某些东西与不是的东西进行对比来解释是比较容易的。

好的,因此基本流程(和术语)如下:您有一些值x,这些值将用于预测y值。 更具体地说,x通常被称为您的特征,而y是您的标签。 例如,您是天网,并向那些讨厌的人发送终结者。 您具有以下功能:

终止子数量:10,人类数量:1000,狗数量:10

也许天网对由此造成的人员损失很感兴趣。 这将是您的标签。

[终结者:10,人类:1000,狗:10]->人类损失

对该功能进行某些处理以便可以计算标签的部分称为假设。

线性回归非常简单,这意味着假设也是如此。 我们要做的就是为每个功能分配一个“权重”。 重量乘以该功能,所有这些乘积相加。

结果就是标签的值。

假设我们有以下重量:终结者/重量:200,人/体重:-0.1,狗/体重:-10

造成的人员损失:1800

嗯,这听起来不像我们目前的体重做得很好,毕竟人类的损失不可能超过人类!(感谢@mediafinger指出🙂)

由于这是一个受监督的问题,因此我们一开始将已经具有一些功能值和已知标签。 在我们的示例中,天网可能记录了与人和狗的3场战斗以及由此造成的人员伤亡(我希望该示例不太可怕-我从此示例开始,现在我必须坚持下去。光明的一面,没有狗的损失!):

10个终结者,1000个人,10条狗:900人丧生

5个终结者,800个人,2条狗:600人丧生

12个终结者,2500人,3只狗:1800人伤亡

这些行中的每一行都称为实例。

我知道我答应过代码,我们还没有写任何一行! 坚持更长的时间,我想向您介绍矩阵。 您知道吗,红宝石有矩阵!

无论如何,我提到矩阵的原因是,可以用一个矩阵乘法完成上述整个数据集的预测标签的计算。 假设我们使用之前选择的权重:200,-0.1,-10

结果将是[1800,900,2120]。 我们在所有战斗中都花了很多时间。

最后,一些代码!

好吧,让我们逐步完成此步骤:

theta:这是您所有权重的向量。 J(theta)表示:使用这些权重的成本。

m:实例数。 在上面的示例中,该值为3(行)。

错误:预测标签–标签

平方:为什么? 好吧,一方面,如果错误为负,您将摆脱符号。 这简化了成本计算。

错误前面的怪异数学符号:和。 总结所有平方误差。 例如,在红宝石中,这就是减少排放的要求。

我希望一旦您看到cost函数的ruby代码,它就会变得更加容易理解:

正规方程将为我们提供以下权重:[5.0,0.675,17.5]。 是时候进行健全性检查了,继续,使用这些值来预测标签。 我认为您至少会留下深刻的印象! 现在,不要指望总是找到如此完美匹配的权重(顺便说一句,当我选择特征和标签时,我只是选择了一些随机值。是的,想象一下,我没有使用真实的世界末日战斗中的数据)。

总结一下:

您“训练模型”,这意味着,通过使用梯度下降或正态方程找到最佳权重,可以使成本函数最小化。 您可以使用假设函数预测值。 您可以使用成本函数来衡量您的预测。

这是完整的代码,以及一些反映我们之前检查过的事情的测试:

有趣的来了! 有了线性回归超能力,您就可以出去寻找有趣的数据集。 Kaggle有很多功能(一般来说,这是一个很棒的地方,您可以通过研究那里的解决方案来学到很多jsut),只需记住要使用此算法而不是分类来解决回归问题。

一些不错的网站来查找数据集:

机器学习研究的数据集列表–维基百科

这些数据集用于机器学习研究,并在同行评审的学术期刊中被引用。 数据集…

en.m.wikipedia.org

https://www.kaggle.com/datasets

我遗漏了很多东西,以避免被压倒。 梯度下降,线性代数,绘制数据,清理数据,过度拟合,拟合不足,训练和测试集-仅举几例。 机器学习是一个庞大而复杂的领域,但是却非常有趣!

与说Python或R相比,红宝石可能不是追求机器学习的最佳语言。 那当然不是由于语言本身,而是由于可用的库。 我个人建议使用jupyter笔记本,它可以在许多其他有趣的事情中绘制图形,使整个过程变得更加有趣。

也就是说,即使对于红宝石,也有大量的机器学习资源:

arbox /红宝石机器学习

ruby的机器学习–精选列表:Ruby中机器学习的资源。

github.com

Ruby中的基础机器学习

尽管在应用程序中和在流行语中都越来越流行,但机器学习却常常不必要地难以进行……

medium.com

我想推荐的最强大的在线资源之一是Coursera上的机器学习课程。 它将为您提供所有机器学习的良好基础。 如果您想学习机器学习,或者只是想对某些概念进行深入的学习,那么可以参考以下资源:

机器学习| Coursera

关于本课程:机器学习是使计算机在未经过明确编程的情况下运行的科学。 在…

www.coursera.org

还有一些很酷的数据科学/ ml / ai播客:

播客| 数据营

播客

| 数据营
播客www.datacamp.com

OC开发

编辑描述

ocdevel.com

向@mediafinger大喊,以发现文本中的错误!

安德里亚斯·芬格(@mediafinger)| 推特

来自Andreas Finger(@mediafinger)的最新推文。 SeñorDeveloper,仍然热爱Ruby,组织了当地的……

twitter.com