散点图拟合曲线

散点图拟合曲线

  • 1 导入库
  • 2 构造散点
  • 2 利用polyfit拟合图形
  • 3 拟合评估(R方)
  • 4 输出拟合方程

1 导入库

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
pd.set_option('float_format', lambda x: '%.2f' % x)
plt.style.use('seaborn')
%matplotlib inline

plt.rcParams['font.sans-serif'] = ['Simhei']
plt.rcParams['axes.unicode_minus'] = False

2 构造散点

np.random.seed(0)
X = np.linspace(-1,1,50)  # 也可以利用np.arange构建
y = 3 * np.sin(x * 2) + np.random.rand(len(x))
plt.scatter(x, y)
plt.show()

散点图拟合曲线_第1张图片

2 利用polyfit拟合图形

numpy.polyfit(x, y, deg)
  • x:拟合点的横坐标
  • y:拟合点的纵坐标
  • deg:自由度
# 利用X,y拟合一个三元函数
parameter = np.polyfit(x, y, 3)
parameter
此时输出的是拟合函数的自由度参数。

array([-3.30760789, -0.09234456, 5.80750986, 0.57000303])

# 方法一:手动拼接拟合函数
y2 = parameter[0] * x ** 3 + parameter[1] * x ** 2 + parameter[2] * x + parameter[3]
plt.scatter(x, y)
plt.plot(x, y2, color='r')
plt.show()
# 方法二:利用poly1d函数自动拟合函数
p = np.poly1d(parameter)
plt.scatter(x, y)
plt.plot(x, p(x), color='r')
plt.show()
两种方法都能得到下图结果

散点图拟合曲线_第2张图片

3 拟合评估(R方)

判断拟合曲线拟合的程度,引入评估指标R方。
感兴趣的可以了解一下关于最小二乘中相关系数与R方的关系推导
# 利用np.corrcoef()函数得到相关矩阵
np.corrcoef(y, y2)
输出得到一个相关矩阵

array([[1. , 0.99333342], [0.99333342, 1. ]])

correlation = np.corrcoef(y, y2)[0,1]  #相关系数
correlation**2
输出R方

0.966508101562565

4 输出拟合方程

# 方法一:利用函数手动输入
a=''
i=1
while i<=len(parameter):
    b=round(parameter[i-1],2)
    c=b
    if b>0:
        b='+'+str(b)
    else:
        b=str(b)
    if i==len(parameter):
        a=a+b
    else:
        a=a+b+'x^'+str(len(parameter)-i)
    i=i+1
if a.find('+',1):
    a.lstrip('+')
print(a)
# 方法二:利用poly1d()函数封装
p = np.poly1d(parameter,variable='x')
print(p)
- END -

你可能感兴趣的:(python,CDA,python)