python实现最小二乘法线性拟合
作者:王勇21633012 发布时间:2022-04-01 03:46:49
标签: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
来源:https://blog.csdn.net/weixin_38275649/article/details/80330288
0
投稿
猜你喜欢
- 有时候要用Javascript输常用的字符,比如每个页面都要有的脚注。这里提供一个转换脚本:将HTML自动转为JS代码<script&
- SQL Server2005数据项的分拆与合并:参考示例如下:-- ====================================
- JupyterLab 是 Jupyter 主打的最新数据科学生产工具,某种意义上,它的出现是为了取代Jupyter Notebook。它作为
- 前言Python用于处理文本数据绝对是个利器,极为简单的读取、分割、过滤、转换支持,使得开发者不需要考虑繁杂的流文件处理过程(相对于JAVA
- 给出列表切片的格式:[开头元素::步长] # 输出直到最后一个元素,(最后一个冒号和步长可以省略,下同)[开头元素:结尾元素(不含):步长]
- 无水印视频下载方法一:无水印视频下载很简单,有一个通用的方法,就是使用去水印平台即可。我使用的去水印平台是:http://douyin.ii
- 就javascript来说,iframe创建的框架和frameset创建的框架一样。这里有个关系图,做个笔记。图片源自《javascript
- 本文实例讲述了php+mysqli实现批量替换数据库表前缀的方法。分享给大家供大家参考。具体分析如下:在php中有时我们要替换数据库中表前缀
- caller 属性返回一个对函数的引用,该函数调用了当前函数。functionName.caller functionName 对象是所执行
- 批量创建文件其实很简单,只需要按照需要创建写文件、写完关闭当前写文件、创建新的写文件、写完关闭当前文件、、、不断循环即可,以下是一个简单例子
- 说到排序,我想起一个故事,大意是说唐僧师徒西游美利坚,孙悟空买了本词典,开始逐条背诵单词。他们第一次下美国馆子的时候,不管服务员推荐什么,孙
- 快排是python经典算法之一。1、下面讲解的是什么是快排和快排的图示。2、快排是一种解决排序问题的运算方法。3、快排的原理:在数组中任意选
- 首先要兼容IE\FF滴然后有一个环境与条件:必须是使用em单位布局。因为这个是利用字号做缩放效果,并且兼容fontSize各项单位,例如px
- 从一个字符串开始在CODE上查看代码片派生到我的代码片 >>>time_str='2008-08-08
- 使用图层可以像素为单位精确定位页面元素,并且可以将层放置在页面的任意位置。当把页面元素放入图层之中时,还可以控制哪个显示在前面、哪个显示在后
- python解决指定代码段超时程序卡死最近我写的一个程序中遇到了解析网页的代码,对于网页信息比较多的可能会超时,最后解析失败,程序卡死,于是
- Blog Posts的提交让我们从简单的开始。首页上必须有一张用户提交新的post的表单。首先我们定义一个单域表单对象(fileapp/fo
- 1、什么是超链接图标规范超链接图标规范是我根据《Iconize Textlinks with CSS》修改调整完成的。主要是整理出常用到的一
- 07年,我是极力推崇网站规范制作,好处很多,对商业,对用户,对设计师。我们走了两年,现在有了一定的成效,我们也看到了规范所带来的好处和便利。
- 代码如下:<% Randomize Do While Len(pass)<12