shi9494 2024-03-22 13:30 采纳率: 0%
浏览 157

使用origin线性拟合散点图为什么出来的直线数据不对

纵轴是对数轴横轴是概率轴,需要拟合出一条线性直线,但是截距等数据不太对。

img

  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-03-22 13:31
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题:在对数纵轴和概率横轴下,如何拟合一条线性直线,使得拟合结果最优? 解答:
    1. 数据预处理: 在本问题中,概率轴是已知的,因此需要对概率值进行处理。概率值为p,可转化为-log(p)。这样可以将概率值映射到与对数纵轴同一尺度上,方便直接进行线性拟合。
    2. 模型选择: 在确定了变量的尺度后,可以使用线性回归模型进行拟合。使用线性模型的原因在于该问题中只有一个自变量(概率),因此直线的形式是y=kx+b,可用线性模型进行描述。同时,使用最小二乘法进行拟合可以保证拟合结果最优。
    3. 拟合方法: 最小二乘法是找到一条直线,使得所有数据点到直线的距离之和最小。具体实现过程为:
      先对数据进行预处理,将概率转化为-log(p)
      然后采用numpy库中的polyfit函数,拟合一条一次直线。代码如下:
    import numpy as np
    # 数据预处理
    y = -np.log(p) 
    x = np.linspace(1, len(y), len(y))
    # 用polyfit函数进行拟合
    k, b = np.polyfit(x, y, 1)
    
    1. 结果可视化: 最后需要将结果可视化,确认拟合直线是否合理,并检验是否符合我们对数据的理解。代码如下:
    import matplotlib.pyplot as plt
    # 数据可视化
    fig, ax = plt.subplots()
    ax.plot(x, y, 'o', label='Original Data')
    ax.plot(x, k*x+b, 'r', label='Fitted Line')
    ax.legend()
    plt.show()
    

    案例: 设有一组数据,概率如图所示: img 根据上述方法进行计算得到k=-0.1437,b=3.3787,拟合曲线如下图所示: img 可以看到,拟合结果符合我们的预期,即数据趋势为往下走的线性趋势,同时可能存在一些离群点。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月22日