当前位置:首页 > 编程教程 > Python技术文章 > python实现最小二乘法线性拟合

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

  • 发布时间:
  • 作者:码农之家
  • 点击:181

这篇文章主要知识点是关于python、乘法、线性拟合、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

人人都懂设计模式:从生活中领悟设计模式(Python实现)
  • 类型:程序设计大小:31.6 MB格式:PDF作者:罗伟富
立即下载

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实现最小二乘法线性拟合

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

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

python 相关电子书
学习笔记
网友NO.135784

介绍python中数组和矩阵乘法及使用示例代码

Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。 但在数组乘和矩阵乘时,两者各有不同,如果a和b是两个matrices,那么a*b,就是矩阵积 如果a,b是数组的话,则a*b是数组的运算 1.对数组的操作 import numpy as np a=np.array([[1,2,3],[4,5,6],[7,8,9]]) aarray([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) b=a.copy() barray([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) a+b#多维数组的加减,按对应位置操作array([[ 2, 4, 6], [ 8, 10, 12], [14, 16, 18]]) a*3#多维数组乘常数,则对数组中每一个元素乘该常数array([[ 3, 6, 9], [12, 15, 18], [21, 24, 27]]) np.dot(a,b)#数组的点乘运算通过np.dot(a,b)来实现,相当于矩阵乘array([[ 30, 36, 42], [ 66, 81, 96], [102, 126, 150]]) c=np.array([1,2,3])#构造一行三列的数组 carray([1, 2, 3]) c*a#c为一行三列,放于数组a之前,则对数组a中每行对应位置相乘array([[ 1, 4, 9], [ 4, 10, 18], [ 7, 16, 27]]) a*c#c为一行三列,放于数组……

网友NO.306115

Python中的几种矩阵乘法(小结)

一. np.dot() 1.同线性代数中矩阵乘法的定义。np.dot(A, B)表示: 对二维矩阵,计算真正意义上的矩阵乘积。 对于一维矩阵,计算两者的内积。 2.代码 【code】 import numpy as np# 2-D array: 2 x 3two_dim_matrix_one = np.array([[1, 2, 3], [4, 5, 6]])# 2-D array: 3 x 2two_dim_matrix_two = np.array([[1, 2], [3, 4], [5, 6]])two_multi_res = np.dot(two_dim_matrix_one, two_dim_matrix_two)print('two_multi_res: %s' %(two_multi_res))# 1-D arrayone_dim_vec_one = np.array([1, 2, 3])one_dim_vec_two = np.array([4, 5, 6])one_result_res = np.dot(one_dim_vec_one, one_dim_vec_two)print('one_result_res: %s' %(one_result_res)) 【result】 two_multi_res: [[22 28] [49 64]] one_result_res: 32 二. np.multiply()或 * 1.在Python中,实现对应元素相乘(element-wise product),有2种方式, 一个是np.multiply() 另外一个是 * 2.代码 【code】 import numpy as np# 2-D array: 2 x 3two_dim_matrix_one = np.array([[1, 2, 3], [4, 5, 6]])another_two_dim……

网友NO.960524

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

本文实例讲述了Python基于最小二乘法实现曲线拟合。分享给大家供大家参考,具体如下: 这里不手动实现最小二乘,调用scipy库中实现好的相关优化函数。 考虑如下的含有4个参数的函数式: 构造数据 import numpy as npfrom scipy import optimizeimport matplotlib.pyplot as pltdef logistic4(x, A, B, C, D): return (A-D)/(1+(x/C)**B)+Ddef residuals(p, y, x): A, B, C, D = p return y - logisctic4(x, A, B, C, D)def peval(x, p): A, B, C, D = p return logistic4(x, A, B, C, D)A, B, C, D = .5, 2.5, 8, 7.3x = np.linspace(0, 20, 20)y_true = logistic4(x, A, B, C, D)y_meas = y_true + 0.2 * np.random.randn(len(y_true)) 调用工具箱函数,进行优化 p0 = [1/2]*4plesq = optimize.leastsq(residuals, p0, args=(y_meas, x)) # leastsq函数的功能其实是根据误差(y_meas-y_true) # 估计模型(也即函数)的参数 绘图 plt.figure(figsize=(6, 4.5))plt.plot(x, peval(x, plesq[0]), x, y_meas, 'o', x, y_true)plt.legend(['Fit',……

网友NO.484595

python中matplotlib实现最小二乘法拟合的过程详解

前言 最小二乘法Least Square Method,做为分类回归算法的基础,有着悠久的历史(由马里·勒让德于1806年提出)。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。 下面这篇文章主要跟大家介绍了关于python中matplotlib实现最小二乘法拟合的相关内容,下面话不多说,来一起看看详细的介绍: 一、最小二乘法拟合直线 生成样本点 首先,我们在直线 y = 3 + 5x 附近生成服从正态分布的随机点,作为拟合直线的样本点。 import numpy as np import matplotlib.pyplot as plt# 在直线 y = 3 + 5x 附近生成随机点X = np.arange(0, 5, 0.1) Z = [3 + 5 * x for x in X] Y = [np.random.normal(z,……

网友NO.165826

python九九乘法表的实例

python2.7 for i in range(1,10): for j in range(1,i+1): print j,'x',i,'=',j*i,'\t', print '\n'print '\nDone' python3.7 i = 1while i=9: j = 1 while j=i: print ("%d*%d=%-2d "%(j,i,j*i),end="") j+=1 print("") i+=1 以上这篇python九九乘法表的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。 ……

<
1
>

Copyright 2018-2020 www.xz577.com 码农之家

版权投诉 / 书籍推广 / 赞助:520161757@qq.com