当含有多个feature的时候,每个feature的取值范围可能不同,但对于gradient descent算法来说,递减的幅度是由α来控制的。
如果有的feature取值范围是1~100,有的是1000~100000000000,在梯度递减时可能有的feature一步会迈的很大,而有的feature会迈的很小。
所以要对feature进行scaling,使所有feature的取值范围都大致处在-1<=x<=1中。
从生活中的例子我们可以发现,房价和房屋面积是近似成正比的,城市面积和人口是近似成正比的,在很多情况下,我们都可以用linear function来拟合现实中的情况,而有的时候,比如我们知道房屋的长和宽以及价格,如果长、宽做feature来预测价格的话,显然很难预测,这时我们就可以把长宽相乘得到新的feature即房屋面积,用面积做feature来预测,这样又可以用linear fucntion来拟合数据。
而很多时候我们又会发现数据的分布不是线性相关的,可能更接近 y = x^3,或者 y = x^-1等等函数图像,这时仍然是一个计算新feature的问题,我们把x^3,x^-1等等作为新的feature,就又将问题转换为寻找最合适的linear function的问题了。
我们已经讨论过了hypothesis是linear function的情况,gradient descent就是一个用来寻找最符合输入数据分布的linear function 的方法,也就是一个linear regression方法。
目的:求出局部最优的hypothesis:H(x)(使cost function J(θ1,θ2,…) 局部最优)
定义:
cost function:J(θ1,θ2,…)
J(θ1,θ2,…)的梯度(即导数):d(J)/d(θ), 如d(J)(θ1,θ2,…)/d(θ1)即J在(θ1,θ2,…)处关于θ1的导数
步骤
(1):选取一个起点:Point:(a1,b1,…),J(a1,b1,…)
(2) θ1 := θ1 - α * d(J)/d(θ1)(a1,b1,…),不断替换θ1,θ2,… ,直到最终收敛(convergence)。
machine learning是指通过对一系列含有n个feature,已知具有某种attribute的变量(训练集)进行分析,找到一个hypothesis(或者叫function,model,pattern,就是找到一个模型或者假设),这个hypothesis接受到一个变量的n个feature后能够分析出这个变量该attribute的值。
比如输入一系列面积为x,价格为y的房屋信息,找出一个hypothesis,向这个hypothesis输入一个X,这个hypothesis就会预测x=X时,y应该是多少。
attribute:y1,y2,y3 = 10000,20000,15000,…
这里输入数据只含有一个feature:x,我们要预测的就是y。
我们最终的目的是让h(x)预测的结果和实际的y值相差最小,也就是 minimize(h(x)-y)
微信公众号在非开发者模式下只能设置静态的消息回复机制和静态的消息推送,即不能根据关注者发送的内容做出回应,要想做到动态地回复关注者发送的内容,就需要使用开发者模式搭建一个服务器。
微信公众号服务器在通过验证后将关注者发送的消息转发到自己搭建的服务器上,在服务器上对微信服务器发出的内容做出响应后微信服务器会再将这部分内容转发给关注者,安利一个微信java开发的博客。
因此搭建的服务器实现的基本功能就是对微信服务器转发的用户信息进行处理和相应,这里记录了一些我在使用sae的过程里遇到的问题:
JVM虚拟机日志中的错误,这部分错误主要是由于编写的java服务器不能正常工作引起的。