python数据线性拟合(I)
线性拟合是数据处理中一种比较常用的方式。但是拟合的方法也又好几种。 1、第一版代码(网上学习别人的,感觉用的是平均数方法,最小二乘法自己处理的感觉) #! /usr/bin/env python # -*- coding: utf-8 -*- import numpy as np ###使用的数学模块 from matplotlib import pylab as pl # 定义要分析的数据,自己处理时候,可以开放接口去读取相应文件中的内容 x = np.array([6,7.8,3.7,4.8,3.5]) y = np.array([14.2,24.3,18.6,17.8,27.9]) # 回归方程求取函数 def fit(x,y): if len(x) != len(y): return ###先判断一下这个数据逆否可以拟合,主要是读取其他文件数据的时候可能出错 numerator = 0.0 denominator = 0.0 x_mean = np.mean(x) y_mean = np.mean(y) for i in range(len(x)): numerator += (x[i]-x_mean)*(y[i]-y_mean) denominator += np.square((x[i]-x_mean)) print('numerator:',numerator,'denominator:',denominator) b0 = numerator/denominator b1 = y_mean - b0*x_mean return b0,b1 # 定义预测函数 def predit(x,b0,b1): return b0*x + b1 # 求取回归方程 b0,b1 = fit(x,y) print('Line is:y = %2.0fx + %2.0f'%(b0,b1)) # 预测 x_test = np.array([0.5,1.5,2.5,3,4]) y_test = np.zeros((1,len(x_test))) for i in range(len(x_test)): y_test[0][i] = predit(x_test[i],b0,b1) # 绘制图像 xx = np.linspace(0, 5) yy = b0*xx + b1 pl.plot(xx,yy,'k-') pl.scatter(x,y,cmap=pl.cm.Paired) pl.scatter(x_test,y_test[0],cmap=pl.cm.Paired) pl.show() 2、感觉使用了最下二乘法但是代码不太看得懂 #! /usr/bin/env python # -*- coding: utf-8 -*- ###最小二乘法试验### import numpy as np from scipy.optimize import leastsq from matplotlib import pylab as pl import matplotlib.pyplot as plt # 定义训练数据 x = np.array([6,7.8,3.7,4.8,3.5]) y = np.array([14.2,24.3,18.6,17.8,27.9]) ###需要拟合的函数func及误差error### def func(p,x): k,b=p return k*x+b def error(p,x,y,s): print s return func(p,x)-y #x、y都是列表,故返回值也是个列表 #TEST p0=[100,2] ###主函数从此开始### s="Test the number of iteration" #试验最小二乘法函数leastsq得调用几次error函数才能找到使得均方误差之和最小的k、b Para=leastsq(error,p0,args=(x,y,s)) #把error函数中除了p以外的参数打包到args中 k,b=Para[0] print"k=",k,'\n',"b=",b plt.figure(figsize=(8,6)) plt.scatter(x,y,color="red",label="Sample Point",linewidth=3) #画样本点 x=np.linspace(0,10,1000) y=k*x+b plt.plot(x,y,color="orange",label="Fitting Line",linewidth=2) #画拟合直线 plt.legend() plt.show() https://www.bilibili.com/read/cv4971766/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构