python实现最小二乘法线性拟合

本文python代码实现的是最小二乘法线性拟合,并且包含自己造的轮子与别人造的轮子的结果比较。

问题:对直线附近的带有噪声的数据进行线性拟合,最终求出w,b的估计值。

最小二乘法基本思想是使得样本方差最小。

代码中self_func()函数为自定义拟合函数,skl_func()为调用scikit-learn中线性模块的函数。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

n = 101

x = np.linspace(0,10,n)
noise = np.random.randn(n)
y = 2.5 * x + 0.8 + 2.0 * noise

def self_func(steps=100, alpha=0.01):
  w = 0.5
  b = 0
  alpha = 0.01
  for i in range(steps):
    y_hat = w*x + b
    dy = 2.0*(y_hat - y)
    dw = dy*x
    db = dy
    w = w - alpha*np.sum(dw)/n
    b = b - alpha*np.sum(db)/n
    e = np.sum((y_hat-y)**2)/n
    #print (i,'W=',w,'\tb=',b,'\te=',e)
  print ('self_func:\tW =',w,'\n\tb =',b)
  plt.scatter(x,y)
  plt.plot(np.arange(0,10,1), w*np.arange(0,10,1) + b, color = 'r', marker = 'o', label = 'self_func(steps='+str(steps)+', alpha='+str(alpha)+')')

def skl_func():
  lr = LinearRegression()
  lr.fit(x.reshape(-1,1),y)
  y_hat = lr.predict(np.arange(0,10,0.75).reshape(-1,1))
  print('skl_fun:\tW = %f\n\tb = %f'%(lr.coef_,lr.intercept_))
  plt.plot(np.arange(0,10,0.75), y_hat, color = 'g', marker = 'x', label = 'skl_func')

self_func(10000)
skl_func()
plt.legend(loc='upper left')
plt.show()

结果:

self_func:  W = 2.5648753825503197     b = 0.24527830841237772
skl_fun:     W = 2.564875                             b = 0.245278

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python如何实现数据的线性拟合

    实验室老师让给数据画一张线性拟合图.不会matlab,就琢磨着用python.参照了网上的一些文章,查看了帮助文档,成功的写了出来 这里用到了三个库 import numpy as np import matplotlib.pyplot as plt from scipy import optimize def f_1(x, A, B): return A * x + B plt.figure() # 拟合点 x0 = [75, 70, 65, 60, 55,50,45,40,35,30] y0

  • Python线性拟合实现函数与用法示例

    本文实例讲述了Python线性拟合实现函数与用法.分享给大家供大家参考,具体如下: 1. 参考别人写的: #-*- coding:utf-8 -*- import math import matplotlib.pyplot as plt def linefit(x , y): N = float(len(x)) sx,sy,sxx,syy,sxy=0,0,0,0,0 for i in range(0,int(N)): sx += x[i] sy += y[i] sxx += x[i]*x[i]

  • python实现最小二乘法线性拟合

    本文python代码实现的是最小二乘法线性拟合,并且包含自己造的轮子与别人造的轮子的结果比较. 问题:对直线附近的带有噪声的数据进行线性拟合,最终求出w,b的估计值. 最小二乘法基本思想是使得样本方差最小. 代码中self_func()函数为自定义拟合函数,skl_func()为调用scikit-learn中线性模块的函数. import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import Li

  • Python 普通最小二乘法(OLS)进行多项式拟合的方法

    多元函数拟合.如 电视机和收音机价格多销售额的影响,此时自变量有两个. python 解法: import numpy as np import pandas as pd #import statsmodels.api as sm #方法一 import statsmodels.formula.api as smf #方法二 import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D df = pd.read_c

  • python进阶TensorFlow神经网络拟合线性及非线性函数

    目录 一.拟合线性函数 生成随机坐标 神经网络拟合 代码 二.拟合非线性函数 生成二次随机点 神经网络拟合 代码 一.拟合线性函数 学习率0.03,训练1000次: 学习率0.05,训练1000次: 学习率0.1,训练1000次: 可以发现,学习率为0.05时的训练效果是最好的. 生成随机坐标 1.生成x坐标 2.生成随机干扰 3.计算得到y坐标 4.画点 # 生成随机点 def Produce_Random_Data(): global x_data, y_data # 生成x坐标 x_dat

  • python数据分析之单因素分析线性拟合及地理编码

    目录 一.单因素分析线性拟合 二.实现地理编码 一.单因素分析线性拟合 功能:线性拟合,单因素分析,对散点图进行线性拟合,并放大散点图的局部位置 输入:某个xlsx文件,包含'患者密度(人/10万人)'和'人口密度(人/平方千米)'两列 输出:对这两列数据进行线性拟合,绘制散点 实现代码: import pandas as pd from pylab import mpl from scipy import optimize import numpy as np import matplotli

  • python中最小二乘法详细讲解

    python中在实现一元线性回归时会使用最小二乘法,那你知道最小二乘法是什么吗.其实最小二乘法为分类回归算法的基础,从求解线性透视图中的消失点,m元n次函数的拟合,包括后来学到的神经网络,其思想归根结底全都是最小二乘法.本文向大家介绍python中的最小二乘法. 一.最小二乘法是什么 最小二乘法Least Square Method,做为分类回归算法的基础,有着悠久的历史(由马里·勒让德于1806年提出). 二.最小二乘法实现原理 通过最小化误差的平方和寻找数据的最佳函数匹配. 三.最小二乘法功

  • Python实现的多项式拟合功能示例【基于matplotlib】

    本文实例讲述了Python实现的多项式拟合功能.分享给大家供大家参考,具体如下: # -*- coding: utf-8 -*- #! python2 import numpy as np import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体 plt.rcParams['axes.unicode_minus']=False #解决负数坐

  • Python基于最小二乘法实现曲线拟合示例

    本文实例讲述了Python基于最小二乘法实现曲线拟合.分享给大家供大家参考,具体如下: 这里不手动实现最小二乘,调用scipy库中实现好的相关优化函数. 考虑如下的含有4个参数的函数式: 构造数据 import numpy as np from scipy import optimize import matplotlib.pyplot as plt def logistic4(x, A, B, C, D): return (A-D)/(1+(x/C)**B)+D def residuals(p

  • Python实现基本线性数据结构

    数组 数组的设计 数组设计之初是在形式上依赖内存分配而成的,所以必须在使用前预先请求空间.这使得数组有以下特性: 1.请求空间以后大小固定,不能再改变(数据溢出问题): 2.在内存中有空间连续性的表现,中间不会存在其他程序需要调用的数据,为此数组的专用内存空间: 3.在旧式编程语言中(如有中阶语言之称的C),程序不会对数组的操作做下界判断,也就有潜在的越界操作的风险(比如会把数据写在运行中程序需要调用的核心部分的内存上). 因为简单数组强烈倚赖电脑硬件之内存,所以不适用于现代的程序设计.欲使用可

随机推荐