为了账号安全,请及时绑定邮箱和手机立即绑定

Python实现线性回归

难度初级
时长 1小时 5分
学习人数
综合评分8.77
32人评价 查看评价
9.0 内容实用
8.8 简洁易懂
8.5 逻辑清晰
  • 12345

    查看全部
  • 那么总的来说梯度下降是为了优化线性回归运行代码的运算性能和简洁化来实现的,那线性回归的最终效果对于算法,机器学习,甚至是人工智能会起到怎样的作用?

    线性回归在算法和机器学习里所占比重是多少?还是说线性回归是机器学习不可或缺的一个算法?为了提高严谨性么?


    查看全部
    0 采集 收起 来源:梯度下降

    2019-06-16

  • dfjdifjdifjidjif


    查看全部
    0 采集 收起 来源:梯度下降

    2019-06-16

  • 线性回归的数学表示:

    https://img1.sycdn.imooc.com//5d020b4f00018ac506100234.jpg

    查看全部
  • y=kx 线性回归,通过训练得到k的过程,就称为线性分析
    查看全部
  • 最小二乘法模型

    A=(seta*x-y) (A为一维列向量)

    L=1/2*A^2 = (seta*x-y)^T (seta*x-y)=x^T*seta^T*seta*x-x^T*setaT*y-y^T*seta*x+y^T*y

    L对seta求偏导:1/2*{x^T*x*[seta+(seta^T)^T] - x^T*y - (y^T*x)^T}=1/2[2*x^T*x*seta - 2*x^T*y] = x^T*x*seta - x^T*y

    令L'=0有seta = (x^T*x)^-1*(x^T*y)

    所以当seta = (x^T*x)^-1*(x^T*y)时L最小

    查看全部
    0 采集 收起 来源:最小二乘法

    2019-01-13

  • import numpy as np

    from numpy.linalg import inv——(矩阵的逆)

    from numpy import dot——(矩阵的点成)

    from numpy import mat——(矩阵)


    A=np.mat([1,1])——(1x2 的矩阵)

    print('A:\n',A)

    #A=np.array([1,1])——(数组)

    B=mat([1:2],[3:4])——(2x2的)

    print('B:\n',B)

    print(''A.B:',dot(A,B))——结果是错的,因为1*2和2*2矩阵是不能想乘的

    那么就需要给A矩阵转置:print('A.T:\n',A.T)

    还有对矩阵B求逆:print('B的逆:\n',inv(B))

    print(B[0,:1])——表示取出0行一列

    print(B[:,0])——表示取出的是所有行第一列,就是第一列

    print(A.reshape(2,1))——就是重新改变A矩阵的大小的,变成2*1的了;它不仅可以像转置一样还可以将3*2的变成1*6的,这是转置办不到的!

    以上矩阵的基本操作:

    接下来是线性回归的计算:

    imort numpy as np

    from numpy.linalg import inv

    from numpy import dot

    from numpy import mat

    #计算y=2x

    x=mat([1,2,3]).reshape([3,1])

    y=2*x


    #再计算theta=(x'x)^-1x'y

    theta=dot(dot(inv(dot(x.T,x)),x.T),y)

    print(theta)

    接下来是梯度下降的算法:

    (就是根据Y与X的关系不断的进行迭代计算)

    #theta=theta-alpha*(theta*X-Y)*X——alpha在(0,1)之间取值,保证下降的梯度不会太快,是函数迅速收敛,是很重的学习内容

    theta=1.

    alpha=0.1

    for i in range(100):

        theta=theta+np.sum(alpha*(Y-dot(X,theta))*X.reshape(1,3))/3.——bp.sum()可以进行加权平均,因为X是3组数,而结果theta就是一个数,所以加权平均一下,结尾出“/3.”是除以其组数

    (梯度下降是逐步逼近那个值的)

    接下来完成一个复杂的线性回归l:

    import random

    def Y(X1, X2, X3):

     return 0.65 * X1 + 0.70 * X2 - 0.55 * X3 + 1.95

    def Produce():

     filename = 'data.csv'

     with open(filename, 'w') as file:

      file.write('Unnamed: 0,Y,X1,X2,X3\n')

      for i in range(150):

       random.seed()

       x1 = random.random() * 10

       x2 = random.random() * 10

       x3 = random.random() * 10

       y = Y(x1, x2, x3)

       try:

        file.write(str(i)+','+ str(y)+ ',' +str(x1) + ',' + str(x2) + ',' + str(x3)  + '\n')

       except Exception as e:

        print ('Write Error')

        print (str(e))


    Produce()


    查看全部
    1 采集 收起 来源:回归分析实战

    2018-12-10

  • 梯度下降方法(第二种代码)可以很好地解决向量方法(第一种)面对大量计算无法计算的弊端

    而梯度下降更重要的是进行同步更新

    所以需要一个temp来进行缓存

    注意矩阵的形式可能需要变形——

                            reshape( )(如果出错,改成values.reshape( ))


    查看全部
    0 采集 收起 来源:课程总结

    2018-12-08

  • >>> import numpy as np

    >>> from numpy.linalg import inv

    >>> from numpy import dot

    >>> from numpy import mat

    >>> import pandas as pd

    >>> dataset=pd.read_csv('data.csv')

    >>> print(dataset)


    查看全部
    0 采集 收起 来源:回归分析实战

    2018-12-08

举报

0/150
提交
取消
课程须知
1、有机器学习基础 2、有一定的python基础
老师告诉你能学到什么?
1、线性回归的概念 2、最小二乘法的python实现 3、梯度下降的python实际 4、编程处理线性回归分析的一般方法

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!