数据工具的使用

1.线型回归

import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return np.sin(x)+0.5*x

x = np.linspace(-2*np.pi,2*np.pi,50)
'''
# 画图
plt.plot(x,f(x),'b')
plt.show()
'''

# 回归
reg = np.polyfit(x,f(x),deg=1)    # 拟合命令 deg 多项式的次数
ry  = np.polyval(reg,x)           # 根据拟合方程,返回拟合值

# 画图
plt.plot(x,f(x),'b',label="f(x)")
plt.plot(x,ry,'r.',label="regression")
plt.legend(loc=0)
plt.show()

1.1 当deg改为5或者7时候

# 回归结果评价
print(np.allclose(f(x),ry))     # 看两个结果是否相同
print(np.sum((f(x)-ry)**2)/len(x))  # 平均误差

2.基函数

# 基函数求解
matrix = np.zeros((3+1,len(x)))   # 先来一个矩阵,3是多项式的次数,1是常数项。列数是x的次数
matrix[3,:] = x**3
matrix[2,:] = x**2
matrix[1,:] = x
matrix[0,:] = 1

reg2  = np.linalg.lstsq(matrix.T,f(x))[0]
ry = np.dot(reg2,matrix)
'''
# 画图
plt.plot(x,f(x),'b',label="f(x)")
plt.plot(x,ry,'r.',label="regression")
plt.legend(loc=0)
plt.show()
'''

3. 3D绘图

# 3维绘图和拟合
def fm(x,y):                                          # z 值
    return np.sin(x)+0.25*x+np.sqrt(y)+0.5*y**2
x=np.linspace(0,10,20)
y=np.linspace(0,10,20)
X,Y= np.meshgrid(x,y)                                  # 网格化
Z  = fm(X,Y)
x = X.flatten()                                        # 切换值
y = Y.flatten()

# 绘图

fig=plt.figure(figsize=(9,6))
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=mpl.cm.coolwarm,linewidth=0.5,antialiased=True)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
fig.colorbar(surf,shrink=0.5,aspect=5)
plt.show()

posted @ 2017-11-24 20:54  hbb360  阅读(272)  评论(0编辑  收藏  举报