美文网首页
2019-12-28

2019-12-28

作者: 数据小黑升值记 | 来源:发表于2019-12-28 20:21 被阅读0次

    线性回归是机器学习的构建基础。它几乎用于每个单独的主流机器学习算法之中,所以对它的理解有助于你掌握多数主流机器学习算法。出于我们的热情,理解线性回归和线性代数,是编写你自己的机器学习算法,以及跨入机器学习前沿,使用当前最佳的处理过程的第一步。由于处理过程的优化和硬件架构的改变。用于机器学习的方法论也会改变。最近出现的神经网络,使用大量 GPU 来完成工作。你想知道什么是神经网络的核心吗?你猜对了,线性代数。

    如果你能记得,最佳拟合直线的斜率m

    是的,我们会将其拆成片段。首先,进行一些导入:

    from statistics import mean
    import numpy as np
    

    我们从statistics导入mean,所以我们可以轻易获取列表的均值。下面,我们使numpy as np,所以我们可以其创建 NumPy 数组。我们可以对列表做很多事情,但是我们需要能够做一些简单的矩阵运算,它并不对简单列表提供,所以我们使用 NumPy。我们在这个阶段不会使用太复杂的 NumPy,但是之后 NumPy 就会成为你的最佳伙伴。下面,让我们定义一些起始点吧。

    xs = [1,2,3,4,5]
    ys = [5,4,6,5,6]
    

    所以这里有一些我们要使用的数据点,xsys。你可以认为xs就是特征,ys就是标签,或者他们都是特征,我们想要建立他们的联系。之前提到过,我们实际上把它们变成 NumPy 数组,以便执行矩阵运算。所以让我们修改这两行:

    xs = np.array([1,2,3,4,5], dtype=np.float64)
    ys = np.array([5,4,6,5,6], dtype=np.float64)
    

    现在他们都是 NumPy 数组了。我们也显式声明了数据类型。简单讲一下,数据类型有特性是属性,这些属性决定了数据本身如何储存和操作。现在它不是什么问题,但是如果我们执行大量运算,并希望他们跑在 GPU 而不是 CPU 上就是了。

    将其画出来,他们是:

    [图片上传失败...(image-3ee2ef-1577535495213)]

    现在我们准备好构建函数来计算m,也就是我们的直线斜率:

    def best_fit_slope(xs,ys):
        return m
    
    m = best_fit_slope(xs,ys)
    

    好了。开个玩笑,所以这是我们的框架,现在我们要填充了。

    我们的第一个逻辑就是计算xs的均值,再乘上ys的均值。继续填充我们的框架:

    def best_fit_slope(xs,ys):
        m = (mean(xs) * mean(ys))
        return m
    

    目前为止还很简单。你可以对列表、元组或者数组使用mean函数。要注意我这里使用了括号。Python 的遵循运算符的数学优先级。所以如果你打算保证顺序,要显式使用括号。要记住你的运算规则

    下面我们需要将其减去x*y的均值。这既是我们的矩阵运算mean(xs*ys)。现在的代码是:

    def best_fit_slope(xs,ys):
        m = ( (mean(xs)*mean(ys)) - mean(xs*ys) )
        return m
    

    我们完成了公式的分子部分,现在我们继续处理的分母,以x的均值平方开始:(mean(xs)*mean(xs))。Python 支持** 2,能够处理我们的 NumPy 数组的float64类型。添加这些东西:

    def best_fit_slope(xs,ys):
        m = ( ((mean(xs)*mean(ys)) - mean(xs*ys)) /
               (mean(xs)**2))
        return m
    

    虽然根据运算符优先级,向整个表达式添加括号是不必要的。我这里这样做,所以我可以在除法后面添加一行,使整个式子更加易读和易理解。不这样的话,我们会在新的一行得到语法错误。我们几乎完成了,现在我们只需要将x的均值平方和x的平方均值(mean(xs*xs))相减。全部代码为:

    def best_fit_slope(xs,ys):
        m = (((mean(xs)*mean(ys)) - mean(xs*ys)) /
             ((mean(xs)**2) - mean(xs*xs)))
        return m
    

    好的,现在我们的完整脚本为:

    from statistics import mean
    import numpy as np
    
    xs = np.array([1,2,3,4,5], dtype=np.float64)
    ys = np.array([5,4,6,5,6], dtype=np.float64)
    
    def best_fit_slope(xs,ys):
        m = (((mean(xs)*mean(ys)) - mean(xs*ys)) /
             ((mean(xs)**2) - mean(xs**2)))
        return m
    
    m = best_fit_slope(xs,ys)
    print(m)
    # 0.3
    

    相关文章

      网友评论

          本文标题:2019-12-28

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