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

yipeiwu_com5年前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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

django foreignkey外键使用的例子 相当于left join

django外键使用 一对一 因为django中处于安全和方便将数据库中的表封装成模型,所以很多sql原生的功能无法使用, 比如 left join,但是我们可以使用外键(foreign...

在Django中实现添加user到group并查看

一、添加user到group 第一种: user.groups.add(1) # add by id 第二种: from django.contrib.auth.models...

python飞机大战pygame碰撞检测实现方法分析

本文实例讲述了python飞机大战pygame碰撞检测实现方法。分享给大家供大家参考,具体如下: 目标 了解碰撞检测方法 碰撞实现 01. 了解碰撞检测方法 pygam...

Python基础中所出现的异常报错总结

Python基础中所出现的异常报错总结

今天我们来探索python中大部分的异常报错 首先异常是什么,异常白话解释就是不正常,程序里面一般是指程序员输入的格式不规范,或者需求的参数类型不对应,不全等等。 打个比方很多公司年终...

Python使用Flask框架同时上传多个文件的方法

本文实例讲述了Python使用Flask框架同时上传多个文件的方法,分享给大家供大家参考。具体如下: 下面的演示代码带有详细的html页面和python代码 import os #...