Python находит соответствие кривой слегка наклоненной вертикали

#python #scipy #curve-fitting

#python #сципи #подгонка кривой

Вопрос:

У меня есть набор точек данных в двухкоординатной шкале. Я хочу подогнать точки. Количество точек данных исчисляется несколькими тысячами. Здесь я дал воспроизводимые точки данных формы.

Мой код:

 from scipy.optimize import curve_fit

x1 = [327.98999023, 327.98999023, 328.02999878, 367.6499939 ,
       374.72000122, 372.73001099, 372.95001221, 373.02999878,
       379.39001465, 375.58999634, 378.97000122, 378.1499939 ,
       380.70001221, 379.42999268, 379.5       , 379.5       ,
       392.22000122, 379.57998657, 376.67999268, 376.67999268]
ym1 = [2.54999995, 2.73999989, 2.91000009, 2.96999991, 3.17000002,
       3.40000004, 3.60000014, 3.77999991, 3.98999989, 4.21000004,
       4.44000006, 4.62000012, 4.83999997, 5.19999981, 5.32999992,
       5.59000015, 5.88999987, 6.20000005, 6.46000028, 6.66999996] 

def testfit(x, *p):
    ''' function to fit the indentation curve 
    p = [x0,c, poly1d_coeffs ]'''
    x = x.astype(float)
    y = p[1]*(1-sigmoid(x-p[0],k=1))   np.poly1d(p[2:])(x) * sigmoid(x-p[0],k=1)
    return y

def sigmoid(x, k=1):
    return 1/(1 np.exp(-k*x))

p0_guess = (30, 5, 0.3, -10 )
popt, pcov = curve_fit(testfit, x1, ym1, p0=p0_guess)    # find optimal parameters
# calculate prediction
yp1 = testfit(x1,popt[0],popt[1],popt[2])
# calculate r^2
r1 = r2_score(ym1,yp1)
print(r1)
plt.plot(x1,ym1,'.')
plt.plot(x1,yp1,'-')
plt.show()
 

Текущий вывод:

 r1
Out[128]: -2.1490993028157854 # Negative fit score, Really bad fit. 
 

введите описание изображения здесь

Комментарии:

1. вы получаете какое-либо предупреждение?

2. @AminGheibi Никакого предупреждения. Это было выполнено безукоризненно.

3. не могу комментировать на основе графика, потому что плотность точек не ясна. Возможно, у вас слишком много точек, близких к (300,0), которые удерживают линию (друг над другом). Пример в вопросе также выдает предупреждение о ковариационной матрице.

4. Извините, но в чем вопрос?

5. Для вас данные выглядят как сигмовидная функция? Если это так, я должен не согласиться. Но да, в чем здесь вопрос?