線形回帰のの最小二乗

作者: リン・ハーン発明者 量化 - 微かな夢作成日:2016年12月18日 11:36:26 更新日:2016年12月18日 11:41:31

線形回帰のの最小二乗


  • ### 一,序言

この間,機械を学ぶを学び,第5章ののLogistic回帰を学び,かなり苦しいと感じた.この追溯源は,のLogistic回帰からの線形回帰,そしての最小二乗法まで.最終的にの高度数学 (第6版・下冊) 第9章第10節のの最小二乗法に設定され,最小二乗法の背後の数学原理がどこから来たのかを理解した. 最小二乗は,最適化問題における経験式の構築の一つの実現方法である. その仕組みを理解することは,Logistic回帰がベクトルマシンをサポートする学習を理解するのに有益である.

  • ###2 背景知識

最小二乗の出現の歴史的背景は興味深い.

1801年,イタリアの天文学者ジュセッペ・ピアツィが最初の小惑星,谷神星を発見した.40日間の追跡観察の後,谷神星が太陽の後ろまで走るため,ピアツィは谷神星の位置を失ってしまった.その後,世界中の科学者はピアツィの観測データを使って谷神星を探し始めたが,ほとんどの人たちの計算の結果では結果が出なかった.24歳の谷神星も谷神星の軌道を計算した.オーストリアの天文学者ハイリッヒ・オルブスは谷神星の軌道を計算して再び発見した.

高司が使った最小二乗の方法については,1809年に彼の著書『天体運動論』で公表され,フランスの科学者レジェンドは1806年に独立しての最小二乗を発見したが,当時知られていなかったため沈黙した.両者は,最小二乗の原理を最初に創出した者が誰なのかについて論争した.

1829年,ゴースは最小二乗法による最適化効果が他の方法よりも強いことを証明した.ゴース-マルコフ定理を参照.

  • ###3 知識の活用

最小二乗の核心は,すべてのデータ偏差の平方と最小を保証することである.

横幅と長さのデータを収集するとしたら

线性回归之——最小二乘法

このデータを使って, Python で散点図を描きます.

线性回归之——最小二乘法

画像のコードは以下の通りです.

```
import numpy as np                # -*- coding: utf-8 -*
import os
import matplotlib.pyplot as plt
def drawScatterDiagram(fileName): # 改变工作路径到数据文件存放的地方
    os.chdir("d:/workspace_ml")
    xcord=[];ycord=[]
    fr=open(fileName)
    for line in fr.readlines():
        lineArr=line.strip().split()
        xcord.append(float(lineArr[1]));ycord.append(float(lineArr[2]))
    plt.scatter(xcord,ycord,s=30,c='red',marker='s')
    plt.show()
```

假如我们取前两个点(238,32.4)(152, 15.5)就可以得到两个方程
152*a+b=15.5
328*a+b=32.4
解这两个方程得a=0.197,b=-14.48
那样的话,我们可以得到这样的拟合图:

![线性回归之——最小二乘法](/upload/asset/8c4ec1df86e5867e4ce4da6af7d7c8423b163ef7.png) 

好了,新的问题来了,这样的a,b是不是最优解呢?用专业的说法就是:a,b是不是模型的最优化参数?在回答这个问题之前,我们先解决另外一个问题:a,b满足什么条件才是最好的?

答案是:保证所有数据偏差的平方和最小。至于原理,我们会在后面讲,先来看看怎么利用这个工具来计算最好的a和b。假设所有数据的平方和为M,则

![线性回归之——最小二乘法](/upload/asset/7189e60a47e6a0a78747c40ff511abe8357350c0.png) 

我们现在要做的就是求使得M最小的a和b。请注意这个方程中,我们已知yi和xi

那其实这个方程就是一个以(a,b)为自变量,M为因变量的二元函数。

回想一下高数中怎么对一元函数就极值。我们用的是导数这个工具。那么在二元函数中,  我们依然用导数。只不过这里的导数有了新的名字“偏导数”。偏导数就是把两个变量中的一个视为常数来求导。
通过对M来求偏导数,我们得到一个方程组

![线性回归之——最小二乘法](/upload/asset/4a863a2f6678f5689641aafb11860b12bc820f80.png) 

这两个方程中xi和yi都是知道的。

很容易就求得a和b了。由于采用的是维基百科的数据,我这里就直接用答案来画出拟合图像:

![线性回归之——最小二乘法](/upload/asset/2cfbd2f5af3b691577361855ebe337110be5991d.png) 

```
# -*- coding: utf-8 -*importnumpy as npimportosimportmatplotlib.pyplot as pltdefdrawScatterDiagram(fileName):
# 改变工作路径到数据文件存放的地方os.chdir("d:/workspace_ml")xcord=[];
# ycord=[]fr=open(fileName)forline infr.readlines():lineArr=line.strip().split()xcord.append(float(lineArr[1]));
# ycord.append(float(lineArr[2]))plt.scatter(xcord,ycord,s=30,c='red',marker='s')
# a=0.1965;b=-14.486a=0.1612;b=-8.6394x=np.arange(90.0,250.0,0.1)y=a*x+bplt.plot(x,y)plt.show()
# -*- coding: utf-8 -*
import numpy as np
import os
import matplotlib.pyplot as plt
def drawScatterDiagram(fileName):
    #改变工作路径到数据文件存放的地方
    os.chdir("d:/workspace_ml")
    xcord=[];ycord=[]
    fr=open(fileName)
    for line in fr.readlines():
        lineArr=line.strip().split()
        xcord.append(float(lineArr[1]));ycord.append(float(lineArr[2]))
    plt.scatter(xcord,ycord,s=30,c='red',marker='s')
    #a=0.1965;b=-14.486
    a=0.1612;b=-8.6394
    x=np.arange(90.0,250.0,0.1)
    y=a*x+b
    plt.plot(x,y)
    plt.show()
```
  • ###4 原則調査

モデルパラメータを最適化するために,なぜ絶対値と最小値ではなく,モデル予測データと実際のデータとの差の平方根を使うのか?

この質問に答えられた人は,リンクを参照してください.http://blog.sciencenet.cn/blog-430956-621997.html)

個人的にはこの説明が非常に興味深いと感じています. 特に,その仮定は,f (x) のすべての偏差点にノイズがあるということです.

ある点の偏差が大きいほど,ノイズが大きいほど,この点が現れる可能性が小さい.したがって,偏差の程度xが発生確率f (x) に満たす関係は何ですか? 正規分布です.

线性回归之——最小二乘法

线性回归之——最小二乘法

  • #################

上記は2次元的な状況である.つまり,1つの自己変数しかない.しかし,現実世界では,最終結果に影響を与えるのは複数の要因の重複である.つまり,自己変数には複数の状況がある.

一般的なN元線形関数について,線形代数のの中の逆行列で解くのはOKである.適当な例が一時的に見つからないため,引数としてここに残る.

自然界は,単純線形ではなく,多項式結合であり,より高度な内容である.

原作,複製は許されている.複製の際には,超リンク形式で記事の原発,著者情報および本声明を記載してください.そうでなければ法的責任を追及します.http://sbp810050504.blog.51cto.com/2799422/1269572


もっと見る