整理临时用到的一元拟合算法
1.指数拟合
指数函数定义:
def exponential_func(x, a, b):
return a**x + b
def func_fit(func, xdata, ydata):
from scipy.optimize import curve_fit
popt, pcov = curve_fit(func, xdata, ydata)
return popt
if __name__=='__main__':
import numpy as np
xdata = np.linspace(0, 4, 50)
y = exponential_func(xdata, 2.5, 1.3)
popt= func_fit(exponential_func, xdata, y)
print(popt)
# [2.5 1.3] 参数a,b的值
2.幂型拟合
def power_func(x, a, b):
return x**a + b
if __name__=='__main__':
import numpy as np
xdata = np.linspace(0, 4, 50)
y = power_func(xdata, 2.5, 1.3)
popt= func_fit(power_func, xdata, y)
print(popt)
# [2.5 1.3] 参数a,b的值
3.线性拟合
# 线性拟合
def linear_func(x, a, b):
return a*x + b
xdata = np.linspace(0, 4, 50)
y = linear_func(xdata, 2.5, 1.3)
popt= func_fit(linear_func, xdata, y)
4.对数拟合
(后续补充)
5.多项式拟合
引用自https://www.cnblogs.com/volcao/p/9273612.html
# 多项式拟合,需确认是否由用户输入degree的值,还是自动寻优
def ploy_func(xdata, ydata, degree):
"""
degree:用于控制多项式的次方
"""
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
ploy = PolynomialFeatures(degree=degree)
xdata = xdata.reshape(-1,1)
x_feature = ploy.fit_transform(xdata) # 生成对应的多项式特征
result = LinearRegression().fit(x_feature,ydata)
return result.coef_,result.intercept_