zoukankan      html  css  js  c++  java
  • 数据工具的使用

    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()

  • 相关阅读:
    linux 压缩当前文件夹下所有文件
    redis从入门到精通
    焦点小组测试和可用性测试
    面包屑的故事
    VSCode导入两个工程示例
    数据库规格化
    mergeCI一点小波澜
    Java中List与Set相互转化
    MyBatis中in的使用
    长寿时代的养老风险管理
  • 原文地址:https://www.cnblogs.com/hanbb/p/7892310.html
Copyright © 2011-2022 走看看