本文分享網址: http://www.cnblogs.com/DesertHero2013/p/7662721.html
1)目標:通過一個屬性的線性組合;來進行預測模型。即:

其中
是
;w和b學成后,模型就確定了。 其實
可以理解成各個屬性值的權值。
2)性能度量: 求出均方誤差並使它最小化,就是我們要求的w和b:

均方誤差是各數據偏離真實值的距離平方和的平均數,也即誤差平方和的平均數,可這里沒看到他除以m。當然,平方和最小,除以m也是最小。
用最小二乘法來使上面式子最小,就是使樣本到直線上的歐式距離最小。
A.最小二乘:找到一個(組)估計值,使得實際值與估計值的距離最小。本來用兩者差的絕對值匯總並使之最小是最理想的,但絕對值在數學上求最小值比較麻煩,因而替代做法是,找一個(組)估計值,使得實際值與估計值之差的平方加總之后的值最小,稱為最小二乘。“二乘”的英文為least square,其實英文的字面意思是“平方最小”。這時,將這個差的平方的和式對參數求導數,並取一階導數為零,就是OLSE。
3)一般的,我們遇到的不止一個屬性,所以我用矩陣的形式來解決。X 表示m*(d+1)大小的矩陣,表示屬性值,y是標記,w*是我們要求得權值。
這個是使得誤差的平方和最小,例如下面表示:

這里的
= (w,b) ,是故意組合的向量。w是向量,b是一個值,相當於彌補的誤差。目標就是求得誤差平方和最小的時候的參數w和b!
即為均方差的矩陣形式,要是它最小,只要對
求導即可。 得到:

令上式=0,可知我們要求的參數。

這就是我們可以編程用的公式,這種方法的稱為正規方程法。上面式子怎么求出來的?
2X^T(Xw-y) = 0 ,
2X^TXw-2X^Ty = 0
X^TXw = X^Ty
若X^TX滿秩,則可逆,故兩邊同時左乘(X^TX)^-1 即可。
故得:
w =((X^TX)^-1)X^Ty ,即為上面結果。
下面是我們的Python代碼:
# -*- coding: utf-8 -*- """ Created on Tue Oct 10 23:10:00 2017 Version:python3.5.1 @author: Stone """ import pandas as pd from numpy.linalg import inv from numpy import dot # 正規方程法 # 擬合線性模型: Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width # 該模型以萼片寬度+花瓣寬度+花瓣長度 來推測萼片長度。 # 即模型:Sepal.Length = Sepal.Width * x1 + Petal.Length * x2 + Petal.Width * x3 + b iris = pd.read_csv('iris.csv') #讀取iris.csv 文件 temp = iris.iloc[:,2:5] #表示在你定義的矩陣iris中,分別是行[0,end),列[2:5) # iloc直接確定行列數,左閉右開 temp['x0'] = 1 #為了把誤差b加入w*=(w,b)向量(周志華的《機器學習》P55頁的 w*上面有個‘^’符號,這里不好輸入),temp表格后面加以1列X0,並每行賦值1,就是為了把b吸收進入w*。 X = temp.iloc[:,[0,1,2,3 ]] #賦值矩陣X為0,1,2,3列,150行。 列名為 Sepal.Width,Petal.Length,Petal.Width,x0 Y = iris.iloc[:,1] #選取標記列:Sepal.Length ,就是我們的擬合目標Sepal.Length。 Y = Y.values.reshape(len(iris), 1) #values是返回值 reshape()重塑數組,如這里變成新的1列iris表格長度的列表,形如[[a],[b],...] #書上Y是標記,就是我們要擬合的目標。 theta_n = dot(dot(inv(dot(X.T, X)), X.T), Y) # theta = (X'X)^(-1)X'Y dot是按照矩陣乘法的規則來運算,inv()是求逆矩陣的 X.T是X矩陣的轉制 print(theta_n) #打印權重系數 print('請依次輸入需要預測的Sepal.Width,Petal.Length,Petal.Width:') x1,x2,x3 = map(float,input().split()) t = (0.65083716*x1 + 0.70913196*x2 - 0.55648266*x3 + 1.85599749 ) print('預測的花萼長度為:',t) #測試了下,三種數據的誤差還可以,至少能擬合了。 #上面x1,x2,x3,b的系數值就是我們求出來的權值。
本代碼使用的iris 訓練集下載地址: http://files.cnblogs.com/files/sumai/iris.rar
輸出如下圖:

原始花萼的長度數據為5.4,所以擬合是成功的,至於精度就不好說了。
線性回歸:就是找到若干樣本屬性值(自變量)與標記值(我的擬合目標,因變量)的線性關系。剛學這個,有錯誤,望指出。
由於第一次發這種文章,排版和公式都不好,大家見諒。
參考: 1. https://www.cnblogs.com/sumai/p/5211558.html
2. 周志華的《機器學習》
