zoukankan      html  css  js  c++  java
  • 第一章 一个极小的机器学习应用 构建第一个模型

    误差计算

    使用预测值到真实值距离的平方来计算误差

    def error(f,x,y):
        return sp.sum((f(x)-y)**2)

    从一条简单的直线开始

    scipy中的polyfit(多项式拟合)函数用户解决这个问题。

    给定数据x和y,以及期望的多项式的阶(直线的阶是1)可以找到一个模型,能够最小化之前定义的误差函数

    fp1,residuals,rank,sv,rcond = sp.polyfit(x,y,1,full=True)

    该函数会把拟合函数所使用的参数返回,即fp1=

    [ 2.59619213 989.02487106];把full设置为true可以获得更多逼近过程的背景信息。

    在这里我们对残差感兴趣,即近似误差

    # 散点坐标图
    plt.scatter(x, y)
    # x坐标
    plt.xlabel('Time')
    plt.ylabel('Hits/hour')
    # tick 标记号于
    plt.xticks([w*7*24 for w in range(10)],
               ['week %i'%w for w in range(10)])
    # 自动测量/规模 tight=紧
    plt.autoscale(tight=True)
    
    fp1, residuals, rank, sv, rcond = sp.polyfit(x, y, 1, full=True)
    print fp1
    # 根据参数创建模型
    f1 = sp.poly1d(fp1)
    
    
    def error(f, x, y):
        return sp.sum((f(x)-y)**2)
    
    print error(f1, x, y)
    
    # 生成x值用于作图
    fx = sp.linspace(0, x[-1], 1000)
    plt .plot(fx, f1(fx), linewidth=4)
    plt.legend(["d=%i" % f1.order], loc="upper left")
    
    
    # 2阶多项式
    f2p = sp.polyfit(x, y, 2)
    f2 = sp.poly1d(f2p)
    print error(f2, x, y)
    
    plt .plot(fx, f2(fx), linewidth=4)
    plt.legend(["d=%i" % f1.order,"d=%i" % f2.order], loc="upper left")
    # 开启网格
    plt.grid()
    # 显示图表
    plt.show()

  • 相关阅读:
    Python基础---------数据类型
    Linux----------Rabbitmq消息队列
    常用消息中间件对比
    Linux-------------kafaka基础
    Linux------------zookeeper基础
    CentOS使用chkconfig增加开机服务提示service xxx does not support chkconfig的问题解决
    Linux-------------MongoDB基础
    Web Service
    AutoResetEvent和ManualResetEvent(多线程操作)
    方法的可变参数 params
  • 原文地址:https://www.cnblogs.com/evoler/p/5405883.html
Copyright © 2011-2022 走看看