首页 > 解决方案 > 我应该如何找到最适合可能的对数散点图的线?

问题描述

这是我第一次尝试使用 scikit learn。但是,我正在努力使用以下数据获得最接近的最佳拟合线

x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]

y = [0, 187, 262, 296, 319, 340, 359, 376, 388, 401, 411, 414, 423, 430, 433, 439, 446, 452, 457, 461, 465, 469, 470, 470, 472, 474, 479, 484, 486, 487, 489, 489, 491, 491, 491, 494, 494, 498, 500, 500, 500, 500, 505, 506, 506, 506, 506, 507, 508, 509, 509, 509, 511, 511, 512, 514, 515, 515, 515, 517, 517, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519]

我能够从 matplotlib 中绘制以下图形...

在此处输入图像描述

...由于下面的代码...

fig, ax = plt.subplots(figsize = (10,8))
ax1 = plt.scatter(x, y, c = 'brown')

def func(x, a, b,c):
    return a*np.log2(b+x)+c

popt, pcov = curve_fit(func, frequency['pct'], frequency['Facility Count Military'])

print(popt)
#popt was the following: [4.28209689e+01 1.46600585e-02 2.59467635e+02]

ax2 = sns.lineplot(frequency['pct'], popt[0]*np.log2(popt[1]+frequency['pct'])+popt[2], c = 'black')

plt.xlabel('x')
plt.ylabel('y')
plt.ylim([0, 530])
plt.xlim([0, 100])
plt.title('y over x', y = 1, fontsize=15, fontweight='semibold')
plt.show()

(a) 我的方法正确吗?(b) 使一条最适合基于日志的 2 行是否有意义,或者这是不同的东西?

编辑:

没关系c部分。我只是相应地编辑了代码并自己弄清楚了。

(c) 有没有办法将“popt”翻译成最终将使用的折线图?

对此的任何帮助都非常感谢。

标签: pythonpandasnumpymatplotlibscikit-learn

解决方案


推荐阅读