今天主要講述的内容是關于一進制線性回歸的知識,python實作,包括以下内容:
1.機器學習常用資料集介紹
2.什麼是線性回顧
3.linearregression使用方法
4.線性回歸判斷糖尿病
前文推薦:
希望這篇文章對你有所幫助,尤其是剛剛接觸資料挖掘以及大資料的同學,同時準備嘗試以案例為主的方式進行講解。如果文章中存在不足或錯誤的地方,還請海涵~
同時這篇文章是我上課的内容,是以參考了一些知識,強烈推薦大家學習斯坦福的機器學習ng教授課程和scikit-learn中的内容。由于自己數學不是很好,自己也還在學習中,是以文章以代碼和一進制線性回歸為主,數學方面的當自己學到一定的程度,才能進行深入的分享及介紹。抱歉~
1.diabetes dataset資料集
這是一個糖尿病的資料集,主要包括442行資料,10個屬性值,分别是:age(年齡)、性别(sex)、body mass index(體質指數)、average blood pressure(平均血壓)、s1~s6一年後疾病級數名額。target為一年後患疾病的定量名額。

輸出如下所示:
2.sklearn常見資料集
常見的sklearn資料集包括,強烈推薦下面這篇文章:
sklearn包含一些不許要下載下傳的toy資料集,見下表,包括波士頓房屋資料集、鸢尾花資料集、糖尿病資料集、手寫字資料集和健身資料集等。
3.uci資料集
1.機器學習簡述
機器學習(machine learning )包括:
a.監督學習(supervised learning):回歸(regression)、分類(classification)
例:訓練過程中知道結果。小孩給水果分類,給他蘋果告訴他是蘋果,反複訓練學習。在給他說過,問他是什麼?他回答準确,如果是桃子,他不能回答為蘋果。
b.無監督學習(unsupervised learning):聚類(clustering)
例:訓練過程中不知道結果。給小孩一堆水果,如蘋果、橘子、桃子,小孩開始不知道需要分類的水果是什麼,讓小孩對水果進行分類。分類完成後,給他一個蘋果,小孩應該把它放到蘋果堆中。
c.增強學習(reinforcement learning)
例:ml過程中,對行為做出評價,評價有正面的和負面兩種。通過學習評價,程式應做出更好評價的行為。
d.推薦系統(recommender system)
2.斯坦福公開課:第二課 單變量線性回歸
這是ng教授的很著名的課程,這裡主要引用52nlp的文章,真的太完美了。推薦閱讀該作者的更多文章:
<1>模型表示(model representation)
房屋價格預測問題,有監督學習問題。每個樣本的輸入都有正确輸出或答案,它也是一個回歸問題,預測一個真實值的輸出。
訓練集表示如下:
對于房價預測問題,訊息過程如下所示:
其中x代表房屋的大小,y代表預測的價格,h(hypothesis)将輸入變量映射到輸出變量y中,如何表示h呢?可以表示如下公式,簡寫為h(x),即帶一個變量的線性回歸或單變量線性回歸問題。
<2>成本函數(cost function)
對于上面的公式函數h(x),如何求theta0和theta1參數呢?
構想: 對于訓練集(x, y),選取參數0, 1使得hθ(x)盡可能的接近y。如何做呢?一種做法就是求訓練集的平方誤差函數(squared error function)。
cost function可表示為:
并且選取合适的參數使其最小化,數學表示如下:
總的來說,線性回歸主要包括一下四個部分,分别是hypothesis、parameters、cost function、goal。右圖位簡化版,theta0指派為0。
然後令1分别取1、0.5、-0.5等值,同步對比hθ(x)和j(θ0,θ1)在二維坐标系中的變化情況,具體可參考原ppt中的對比圖,很直覺。
<3>梯度下降(gradient descent)
應用的場景之一最小值問題:
對于一些函數,例如j(θ0,θ1)
目标: minθ0,θ1j(θ0,θ1)
方法的架構:
a. 給0, 1一個初始值,例如都等于0;
b. 每次改變0, 1的時候都保持j(θ0,θ1)遞減,直到達到一個我們滿意的最小值;
對于任一j(θ0,θ1) , 初始位置不同,最終達到的極小值點也不同,例如以下例子:
3.一進制回歸模型
<1>什麼是線性回歸?
回歸函數的具體解釋和定義,可檢視任何一本“機率論與數理統計”的書。我看的是“陳希孺”的。
這裡我講幾點:
1)統計回歸分析的任務,就在于根據 x1,x2,...,xp 線性回歸和y的觀察值,去估計函數f,尋求變量之間近似的函數關系。
2)我們常用的是,假定f函數的數學形式已知,其中若幹個參數未知,要通過自變量和因變量的觀察值去估計未知的參數值。這叫“參數回歸”。其中應用最廣泛的是f為線性函數的假設:
這種情況叫做“線性回歸”。
3)自變量隻有一個時,叫做一進制線性回歸。
f(x) = b0+b1x
自變量有多個時,叫做多元線性回歸。
f(x1,x2,...,xp) = b0 + b1x1 + b2x2 + ... + bpxp
4)分類(classification)與回歸(regression)都屬于監督學習,他們的差別在于:
分類:用于預測有限的離散值,如是否得了癌症(0,1),或手寫數字的判斷,是0,1,2,3,4,5,6,7,8還是9等。分類中,預測的可能的結果是有限的,且提前給定的。
回歸:用于預測實數值,如給定了房子的面積,地段,和房間數,預測房子的價格。
<2>一進制線性回歸
假設:我們要預測房價。目前自變量(輸入特征)是房子面積x,因變量是房價y.給定了一批訓練集資料。我們要做的是利用手上的訓練集資料,得出x與y之間的函數f關系,并用f函數來預測任意面積x對應的房價。
假設x與y是線性關系,則我們可以接着假設一進制線性回歸函數如下來代表y的預測值:
我們有訓練集了,那麼問題就成了如何利用現有的訓練集來判定未知參數 (θ0,θ1) 的值,使其讓h的值更接近實際值y? 訓練集指的是已知x,y值的資料集合!
一種方法是計算它的成本函數(cost function),即預測出來的h的值與實際值y之間的方差的大小來決定目前的(θ0,θ1)值是否是最優的!
常用的成本函數是最小二乘法:
<3>模型總結
整個一進制線性回歸通過下面這張圖總結即可:
最後,梯度下降和多元回歸模型将繼續學習,當我學到一定程度,再進行分享。
linearregression模型在sklearn.linear_model下,它主要是通過fit(x,y)的方法來訓練模型,其中x為資料的屬性,y為所屬類型。
sklearn中引用回歸模型的代碼如下:
輸出的函數原型如下所示:
fit(x, y): 訓練。分析模型參數,填充資料集。其中x為特征,y位标記或類屬性。
predict(): 預測。它通過fit()算出的模型參數構成的模型,對解釋變量進行預測其類屬性。預測方法将傳回預測值y_pred。
這裡推薦"搬磚小工053"大神的文章,非常不錯,強烈推薦。
運作結果如下所示,首先輸出資料集,同時調用sklearn包中的linearregression()回歸函數,fit(x, y)載入資料集進行訓練,然後通過predict()預測資料12尺寸的匹薩價格,最後定義x2數組,預測它的價格。
輸出的圖形如下所示:
線性模型的回歸系數w會儲存在他的coef_方法中,截距儲存在intercept_中。score(x,y,sample_weight=none) 評分函數,傳回一個小于1的得分,可能會小于0。
1.diabetes資料集(糖尿病資料集)
糖尿病資料集包含442個患者的10個生理特征(年齡,性别、體重、血壓)和一年以後疾病級數名額。
然後載入資料,同時将diabetes糖尿病資料集分為測試資料和訓練資料,其中測試資料為最後20行,訓練資料從0到-20行(不包含最後20行),即diabetes.data[:-20]。
輸出結果如下所示,可以看到442個資料劃分為422行進行訓練回歸模型,20行資料用于預測。輸出的diabetes_x_test共20行資料,每行僅一個特征。
2.完整代碼
改代碼的任務是從生理特征預測疾病級數,但僅擷取了一維特征,即一進制線性回歸。【線性回歸】的最簡單形式給資料集拟合一個線性模型,主要是通過調整一系列的參以使得模型的殘差平方和盡量小。
線性模型:y = βx+b
x:資料 y:目标變量 β:回歸系數 b:觀測噪聲(bias,偏差)
運作結果如下所示,包括系數、殘差平方和、方差分數。
繪制圖形如下所示,每個點表示真實的值,而直線表示預測的結果,比較接近吧。
同時繪制圖形時,想去掉坐标具體的值,可增加如下代碼:
下面是優化後的代碼,增加了斜率、 截距的計算,同時增加了點圖到線性方程的距離,儲存圖檔設定像素。
運作結果如下所示:
繪制圖形如下所示:
強烈推薦下面線性回歸相關的文章,希望讀者自行閱讀:
希望文章對你有所幫助,上課内容還需要繼續探索,這篇文章更希望你關注的是python代碼如何實作的,因為數學不好,是以詳細的推導過程,建議看文中的連結。
(by:eastmount 2016-10-28 半夜3點半 )