【Python】利用pwlf识别转折点,完成自动分段线性拟合

参考链接:

  1. https://blog.youkuaiyun.com/qq_39052287/article/details/105535961
  2. https://www.researchgate.net/publication/331231072_pwlf_A_Python_Library_for_Fitting_1D_Continuous_Piecewise_Linear_Functions

pwlf: 一个用于拟合一维数据的分段线性拟合的 Python 库。连续的分段线性拟合有断点,断点代表线段的终止点。

  • 如果断点位置已知,则使用最小二乘法拟合来求解最佳的连续分片线性函数。
  • 如果断点未知,但已知所需的线段数,则使用全局优化来找到最佳断点位置。该优化过程针对不同的断点位置多次求解最小二乘法拟合。
import pwlf
# 分段拟合
data_ = data.sort_values(by='AI')
x = data_['AI']
y = data_['CV']

my_pwlf = pwlf.PiecewiseLinFit(x, y) # 使用 pwlf 进行分段线性回归
breaks = my_pwlf.fit(4)  # 设置分段数量为4,即三个转折点
turning_points = list(breaks[1:-1]) # 获取转折点
turning_points.append(x.max()) # 添加最后一个索引位置以便处理最后一段

start_index = 0
for i, turning_point in enumerate(turning_points):
    end_index = np.searchsorted(x, turning_point)# 找到接近转折点值的索引位置
    x_segment = x[start_index:end_index]
    y_segment = y[start_index:end_index]
    
    popt, _ = curve_fit(func_liner, x_segment, y_segment)
    plt.plot(np.sort(x_segment), func_liner(np.sort(x_segment), *popt),color='blue')
    start_index = end_index
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值