• 用python实现线性回归


    1.今天小关要讲的是用python实现线性回归

    2.来吧,展示:

    #python实现线性回归
    import numpy as np
    import pandas as pd
    from numpy.linalg import inv
    from numpy import dot
    from sklearn.model_selection import train_test_split
    import matplotlib.pyplot as plt
    from sklearn import linear_model
    # 最小二乘法
    def lms(x_train,y_train,x_test):
      theta_n = dot(dot(inv(dot(x_train.T, x_train)), x_train.T), y_train) # theta = (X'X)^(-1)X'Y
      #print(theta_n)
      y_pre = dot(x_test,theta_n)
      mse = np.average((y_test-y_pre)**2)
      #print(len(y_pre))
      #print(mse)
      return theta_n,y_pre,mse
    #梯度下降算法
    def train(x_train, y_train, num, alpha,m, n):
      beta = np.ones(n)
      for i in range(num):
        h = np.dot(x_train, beta)       # 计算预测值
        error = h - y_train.T         # 计算预测值与训练集的差值
        delt = 2*alpha * np.dot(error, x_train)/m # 计算参数的梯度变化值
        beta = beta - delt
        #print('error', error)
      return beta
    if __name__ == "__main__":
        #iris.csv保存为自己的本地路径
      iris = pd.read_csv('E:新加卷(E)python学习iris.csv')
      iris['Bias'] = float(1)
      x = iris[['Sepal.Width', 'Petal.Length', 'Petal.Width', 'Bias']]
      y = iris['Sepal.Length']
      x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=5)
      t = np.arange(len(x_test))
      m, n = np.shape(x_train)
      # Leastsquare
      theta_n, y_pre, mse = lms(x_train, y_train, x_test)
      # plt.plot(t, y_test, label='Test')
      # plt.plot(t, y_pre, label='Predict')
      # plt.show()
      # GradientDescent
      beta = train(x_train, y_train, 1000, 0.001, m, n)
      y_predict = np.dot(x_test, beta.T)
      # plt.plot(t, y_predict)
      # plt.plot(t, y_test)
      # plt.show()
      # sklearn
      regr = linear_model.LinearRegression()
      regr.fit(x_train, y_train)
      y_p = regr.predict(x_test)
      print(regr.coef_,theta_n,beta)
      l1,=plt.plot(t, y_predict)
      l2,=plt.plot(t, y_p)
      l3,=plt.plot(t, y_pre)
      l4,=plt.plot(t, y_test)
      plt.legend(handles=[l1, l2,l3,l4 ], labels=['GradientDescent', 'sklearn','Leastsquare','True'], loc='best')
      plt.show()
    

      分享iris.csv下载地址:    http://yy.jb51.net:81/201812/yuanma/iris.csv(jb51.net).rar

    3.打印结果:

     4.代码有点长,希望耐心分析,不懂的地方可以私信我,下面有联系方式

    希望能帮到大家,问你们要一个赞,你们会给吗,谢谢大家
    版权声明:本文版权归作者(@攻城狮小关)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    大家写文都不容易,请尊重劳动成果~
    交流加Q:1909561302
    CSDN地址https://blog.csdn.net/Mumaren6/

  • 相关阅读:
    115. 不同的子序列
    114. 二叉树展开为链表
    基于Docker结合Canal实现MySQL实时增量数据传输
    Docker-Compose
    Docker容器的创建、启动、和停止
    ES集群
    ES
    Docker配置JDK1.8镜像
    Docker及Docker-Compose的使用
    docker安装jdk
  • 原文地址:https://www.cnblogs.com/guanguan-com/p/13698864.html
Copyright © 2020-2023  润新知