Wie wende ich in Python eine stückweise lineare Anpassung an?

Ich versuche, eine stückweise lineare Anpassung vorzunehmen, wie in Abb. 1 für einen Datensatz gezeigt.

Diese Zahl wurde durch Setzen auf die Linien erhalten. Ich habe versucht, eine stückweise lineare Anpassung mit dem folgenden Code vorzunehmen:

from scipy import optimize
import matplotlib.pyplot as plt
import numpy as np


x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,11, 12, 13, 14, 15])
y = np.array([5, 7, 9, 11, 13, 15, 28.92, 42.81, 56.7, 70.59, 84.47, 98.36, 112.25, 126.14, 140.03])


def linear_fit(x, a, b):
    return a * x + b
fit_a, fit_b = optimize.curve_fit(linear_fit, x[0:5], y[0:5])[0]
y_fit = fit_a * x[0:7] + fit_b
fit_a, fit_b = optimize.curve_fit(linear_fit, x[6:14], y[6:14])[0]
y_fit = np.append(y_fit, fit_a * x[6:14] + fit_b)


figure = plt.figure(figsize=(5.15, 5.15))
figure.clf()
plot = plt.subplot(111)
ax1 = plt.gca()
plot.plot(x, y, linestyle = '', linewidth = 0.25, markeredgecolor='none', marker = 'o', label = r'\textit{y_a}')
plot.plot(x, y_fit, linestyle = ':', linewidth = 0.25, markeredgecolor='none', marker = '', label = r'\textit{y_b}')
plot.set_ylabel('Y', labelpad = 6)
plot.set_xlabel('X', labelpad = 6)
figure.savefig('test.pdf', box_inches='tight')
plt.close()    

Aber dies gab mir die Anpassung der Form in Abb. 2, ich habe versucht, mit den Werten zu spielen, aber keine Änderung. Ich kann die richtige Anpassung der oberen Linie nicht erreichen. Die wichtigste Voraussetzung für mich ist, wie ich Python dazu bringen kann, den Gradientenänderungspunkt zu erhalten. Im Wesentlichen Ich möchte, dass Python zwei lineare Anpassungen im entsprechenden Bereich erkennt und anpasst. Wie geht das in Python?

Antworten auf die Frage(14)

Ihre Antwort auf die Frage