添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

可以认为它们存在一个线性的关系y=kx+b,当时,如何找到这个关系是什么呢,k和b是多少呢?

http://www.jianshu.com/p/732323ce3961 在这边文章,直接调用了sklearn的库函数去拟合它们,直接返回一个一次函数,作为拟合结果。

试着打破这个黑箱函数,看一下是如何找到这个函数的?

  • 首先假设这个函数是 h=θ0+θ1x

  • 希望 h=θ0+θ1x ,与真实的y的差距是最小的

  • 也就是说,假设有一个代价函数J

    5.那我们可以在一定范围内穷举θ0,θ1,找到对应的J(θ0,θ1),顺便以图形的方式显示出来。

    假设输入数据是x=[1,2,3,4,5,6,7],y=[4,7,10,13,16,19,21] 。这个是y=3x+1函数的几个点。拟合的最好的结果是θ0=1,θ1=3

    1.需要的库和输入数据

    import matplotlib.pyplot as plt 
    import numpy as np 
    import pandas as pd 
    from mpl_toolkits.mplot3d import Axes3D
    fig=plt.figure()
    ax=Axes3D(fig)
    #输入的数据
    x=[1,2,3,4,5,6,7]
    y=[4,7,10,13,16,19,21]
    #θ0,θ1的取值范围和精度
    parameter0=np.arange(-10,10,0.2)
    parameter1=np.arange(-10,10,0.2)
    

    2.根据θ0,θ1的取值范围,来计算J

    def func_j(p0,p1):
        sum=0
        for i in range(0,7):
            h=p0+p1*x[i]
            sum+=(h-y[i])**2
        sum=sum/14
        return sum
    parameter0,parameter1=np.meshgrid(parameter0,parameter1)
    z=func_j(parameter0,parameter1)
    

    3.输出图片和显示最小值

    surf=ax.plot_surface(parameter0,parameter1,z)
    min_value=np.min(z)
    min_index=np.argmin(z)
    print (np.unravel_index(min_index,z.shape))
    min_point=np.unravel_index(min_index,z.shape)
    min_x=min_point[0]
    min_y=min_point[1]
    print (parameter0[min_x][min_y])
    print (parameter1[min_x][min_y])
    plt.show()
    

    运行结果:

    感谢@偶有所思的提醒。

    https://github.com/zhaozhengcoder/Machine-Learning/blob/master/MinCostFunction.py

    这里是使用类似于穷举θ0,θ1的取值范围来找到函数J的最小值。因为θ0,θ1和J的值正好可以映射再一个三维的空间里面,这样就很方便的通过画出图来找到最小值点。
    当时如果问题的维度变得更加复杂的时候,这样的方法就不管用了。比如
    与房价相关的除了面积,还有地理位置等。

    y=θ0+θ1*x+θ2*x