では、統計、線形回帰(英語:線形回帰が)の線形回帰式を用いて呼び出された最小二乗は、一つ以上の機能を独立変数と従属変数のためのモデリングとの関係の回帰分析を。この機能は、一つ以上の線形モデルのパラメータの回帰係数の組み合わせと呼ばれます。独立変数の一つだけの場合は、複数の独立変数ケースが呼び出され、単回帰と呼ばれる重回帰(多変量線形回帰)。------ウィキペディア
長い間、MLのこの部分は、教授呉のためにここしばらく、このリファレンスでも魅力的なコンテンツ、これも最初の例である彼のコースでの飛び石、教授アンドリュー・ウです。
ではここで、私は単純に、独立変数xと呼ばれる従属変数yと呼ばれます。単変量線形回帰では、Xは一次元の連続値です。
単変量線形回帰すなわち、データが最高のオリジナルデータを満たして線を引くために、最適なフィット方程式、すなわちを与えられている(データは連続しており、通常は必要です)。
マニュアルでは、慎重に、私たちはベストフィット線形方程式を見つけるために、他の言葉で、元のデータに線形近似を当てはめ、勾配降下法を使用します。
次のように線形方程式が提供されると仮定します。
(すなわち、角度θ0は定数項であり、またはそれは一定のオフセット値です)
勾配降下法を学習する前に、私たちも含めて、いくつかの接頭辞の知識を知っておく必要がありますがこれらに限定されません:
-
正規化(プリデータ)
正規の式:
正規化されたデータは、本実施例では、この処理は、主に勾配降下の収束速度を向上させるために、前処理ゾーンにおける[0 1]にマッピングされます。
-
コスト関数
コスト関数(機能)は、回帰モデルであるだけでなくフィット評価関数である、コスト関数低く、より良いモデルがデータセットをフィット説明。
本実施形態では、一般的に使用される分散を使用して、すなわち、
-
勾配 (勾配)及び派生用語反復
方向の最速の変化に対する勾配方向微分関数が、それもまた推論直接使用することが理解ものの、偏微分(微積分や高度な数学の内容の知識のこの部分を参照のアプリケーションですが、中に綿密な研究をしたい場合それは徹底的に把握同様)です。定義によって理解勾配:
この部分は、θ1の偏微分であり、θ0偏導関数自体は、上記の少しの差を導出することができます。疑問(コスト関数のなぜ偏微分?)した場合、上のお読みください。
あなたは上記を理解すれば、私たちは与えられたθ1とθ0のために、私たちのコスト関数のおかげで彼らは良いか悪い(小さいコスト、より良いフィット感)を評価することができるようになる、ということを知っています。同時に、我々は、/ 0であるθ1する最も正確な、最高のフィッティング値の効果の一部がなければならないかどうかを知って、この値からの偏差と、遠くの偏差が悪く、コスト関数の値に影響をフィットします大きいです。
Θ0が0で一定と仮定される以下に示すように、その後、画像のコスト関数の形状は、類似したθ1の谷であるべきです。
でも、最低点は最高のは、θ1(コスト最小)をフィット。
同様に、θ0が一定でないと仮定すると、その画像は、以下に示すように、実質的に、ボウルのような形を2つの独立変数を有することになります。
(図源教授呉コース)
取得するには、最低点θ0とθ1のベストフィットである(θ0」、θ1' )の「ボウル」で、その後、どのようにそれの最下点を見つけやすいですか?
勾配降下は、最初の最低点に収束するまで、ポイントに近づいてみましょう、行くためにランダム点や反復勾配方向を取る、そう思います。
原理は非常に単純ですが、この反復式がどのようにそれを見つけるために?
その答えは、それがコンセプトの勾配に従ったものである、難しいことではありません。
(接頭辞に記載の知識の偏向部の一部)
幾何学的な意味は、おそらく、レートα、ステップ勾配で(θ0、θ1)を指す勾配方向(変化最速関数の方向)の最下点に移動されます。
擬似コード:
①ランダム初期化のポイント
②一定の割合/ペース(学習率)に応じて、下方に向かって反復勾配
③十分な精度や収束を停止
一部の人々は、おおよそ次のように、微積分の知識の一部を伴う収束、理由を理解できないことがあります。
当点越趋近最低点时,偏导会越来越小,直至为0,此时收敛。可以认为在接近最低点的过程中,切向量的值逐渐减小(碗状曲面逐渐平缓),抵达最低点时,切平面平行于xoy面,切向量为0,此时不论如何迭代,θ的值都不再变化。
我们知道,前面的原理部分并没有涉及到α学习率(learning rate)这个概念,那么这个东西是要干什么呢?
看过吴教授课程的同学可能知道,在下降的过程中,如果步伐太大的话,是无法收敛到最低点的,如果不加上α来控制步伐大小,在很多情况下,都可能导致无法找到最低点。
为了解决这个问题,梯度下降引入了α来控制下降的步伐大小,确保能够收敛。但同时,α太小的话,也会导致收敛过慢。
需要着重说明的是θ1和θ2应该严格同步更新,按我的理解来,这是因为梯度是基于当前点的最大变化值,如果异步更新的话,比方说我们先更新θ1,然后再遍历更新θ0,此时更新θ0是基于新的θ1,所以不满足梯度的要求。
顺带一提,梯度下降总会收敛于局部最小值。不过在单变量线性回归中,局部最小值即是全局最小值。
以上就是单变量线性回归的内容,接下来我们将尝试应用于数据集:
给出一个数据集(工作经验与年薪)如下:
YearsExperience |
Salary |
1.1 |
39343.00 |
1.3 |
46205.00 |
1.5 |
37731.00 |
.... | .... |
文末将给出下载地址。
首先对数据进行归一化,提高收敛速度。然后我们简单地设置θ初始值为(0,0),α为0.01,精度为1e-4,最大迭代次数为1e4。
拟合效果如下:
可以看到效果还是比较理想的,接下来是cost的变化图像:
可以看到大致迭代3000次的时候基本收敛了,由于收敛值大于精度,所以迭代次数为设置的最大次数。
总结:
这部分内容应该说相当好上手,主要把握好梯度这个概念,理解好迭代(逐渐趋于cost局部最小),之后就都不难了。并且梯度下降在机器学习中有比较广泛的应用,所以对它的学习必不可少。
数据集和代码我都推到github上了,有需要请点击:https://github.com/foolishkylin/workspace/tree/master/machine_learning/getting_started/gradient_descent/liner_regression_single