
Python數(shù)據(jù)挖掘之線性回歸知識及預(yù)測糖尿病實例
今天主要講述的內(nèi)容是關(guān)于一元線性回歸的知識,Python實現(xiàn),包括以下內(nèi)容:
1.機器學(xué)習(xí)常用數(shù)據(jù)集介紹
2.什么是線性回顧
3.LinearRegression使用方法
4.線性回歸判斷糖尿病
希望這篇文章對你有所幫助,尤其是剛剛接觸數(shù)據(jù)挖掘以及大數(shù)據(jù)的同學(xué),同時準(zhǔn)備嘗試以案例為主的方式進行講解。如果文章中存在不足或錯誤的地方,還請海涵~
同時這篇文章是我上課的內(nèi)容,所以參考了一些知識,強烈推薦大家學(xué)習(xí)斯坦福的機器學(xué)習(xí)Ng教授課程和Scikit-Learn中的內(nèi)容。由于自己數(shù)學(xué)不是很好,自己也還在學(xué)習(xí)中,所以文章以代碼和一元線性回歸為主,數(shù)學(xué)方面的當(dāng)自己學(xué)到一定的程度,才能進行深入的分享及介紹。抱歉~
一. 數(shù)據(jù)集介紹
1.diabetes dataset數(shù)據(jù)集
數(shù)據(jù)集參考:http://scikit-learn.org/stable/datasets/
這是一個糖尿病的數(shù)據(jù)集,主要包括442行數(shù)據(jù),10個屬性值,分別是:Age(年齡)、性別(Sex)、Body mass index(體質(zhì)指數(shù))、Average Blood Pressure(平均血壓)、S1~S6一年后疾病級數(shù)指標(biāo)。Target為一年后患疾病的定量指標(biāo)。
輸出如下所示:
# -*- coding: utf-8 -*-
"""
Created on Thu Oct 27 02:37:05 2016
@author: yxz15
"""
from sklearn import datasets
diabetes = datasets.load_diabetes() #載入數(shù)據(jù)
print diabetes.data #數(shù)據(jù)
print diabetes.target #類標(biāo)
print u'總行數(shù): ', len(diabetes.data), len(diabetes.target) #數(shù)據(jù)總行數(shù)
print u'特征數(shù): ', len(diabetes.data[0]) #每行數(shù)據(jù)集維數(shù)
print u'數(shù)據(jù)類型: ', diabetes.data.shape #類型
print type(diabetes.data), type(diabetes.target) #數(shù)據(jù)集類型
"""
[[ 0.03807591 0.05068012 0.06169621 ..., -0.00259226 0.01990842
-0.01764613]
[-0.00188202 -0.04464164 -0.05147406 ..., -0.03949338 -0.06832974
-0.09220405]
...
[-0.04547248 -0.04464164 -0.0730303 ..., -0.03949338 -0.00421986
0.00306441]]
[ 151. 75. 141. 206. 135. 97. 138. 63. 110. 310. 101.
...
64. 48. 178. 104. 132. 220. 57.]
總行數(shù): 442 442
特征數(shù): 10
數(shù)據(jù)類型: (442L, 10L)
<type 'numpy.ndarray'> <type 'numpy.ndarray'>
"""
2.sklearn常見數(shù)據(jù)集
常見的sklearn數(shù)據(jù)集包括,強烈推薦下面這篇文章:
sklearn包含一些不許要下載的toy數(shù)據(jù)集,見下表,包括波士頓房屋數(shù)據(jù)集、鳶尾花數(shù)據(jù)集、糖尿病數(shù)據(jù)集、手寫字?jǐn)?shù)據(jù)集和健身數(shù)據(jù)集等。
3.UCI數(shù)據(jù)集
二. 什么是線性回歸
1.機器學(xué)習(xí)簡述
機器學(xué)習(xí)(Machine Learning )包括:
a.監(jiān)督學(xué)習(xí)(Supervised Learning):回歸(Regression)、分類(Classification)
例:訓(xùn)練過程中知道結(jié)果。小孩給水果分類,給他蘋果告訴他是蘋果,反復(fù)訓(xùn)練學(xué)習(xí)。在給他說過,問他是什么?他回答準(zhǔn)確,如果是桃子,他不能回答為蘋果。
b.無監(jiān)督學(xué)習(xí)(Unsupervised Learning):聚類(Clustering)
例:訓(xùn)練過程中不知道結(jié)果。給小孩一堆水果,如蘋果、橘子、桃子,小孩開始不知道需要分類的水果是什么,讓小孩對水果進行分類。分類完成后,給他一個蘋果,小孩應(yīng)該把它放到蘋果堆中。
c.增強學(xué)習(xí)(Reinforcement Learning)
例:ML過程中,對行為做出評價,評價有正面的和負(fù)面兩種。通過學(xué)習(xí)評價,程序應(yīng)做出更好評價的行為。
d.推薦系統(tǒng)(Recommender System)
2.斯坦福公開課:第二課 單變量線性回歸
這是NG教授的很著名的課程,這里主要引用52nlp的文章,真的太完美了。推薦閱讀該作者的更多文章:
Coursera公開課筆記: 斯坦福大學(xué)機器學(xué)習(xí)第二課"單變量線性回歸(Linear regression with one variable)"
<1>模型表示(Model Representation)
房屋價格預(yù)測問題,有監(jiān)督學(xué)習(xí)問題。每個樣本的輸入都有正確輸出或答案,它也是一個回歸問題,預(yù)測一個真實值的出書。
訓(xùn)練集表示如下:
對于房價預(yù)測問題,訊息過程如下所示:
其中x代表房屋的大小,y代表預(yù)測的價格,h(hypothesis)將輸入變量映射到輸出變量y中,如何表示h呢?可以表示如下公式,簡寫為h(x),即帶一個變量的線性回歸或單變量線性回歸問題。
<2>成本函數(shù)(Cost Function)
對于上面的公式函數(shù)h(x),如何求theta0和theta1參數(shù)呢?
構(gòu)想: 對于訓(xùn)練集(x, y),選取參數(shù)θ0, θ1使得hθ(x)盡可能的接近y。如何做呢?一種做法就是求訓(xùn)練集的平方誤差函數(shù)(squared error function)。
Cost Function可表示為:
并且選取合適的參數(shù)使其最小化,數(shù)學(xué)表示如下:
總的來說,線性回歸主要包括一下四個部分,分別是Hypothesis、Parameters、Cost Function、Goal。右圖位簡化版,theta0賦值為0。
然后令θ1分別取1、0.5、-0.5等值,同步對比hθ(x)和J(θ0,θ1)在二維坐標(biāo)系中的變化情況,具體可參考原PPT中的對比圖,很直觀。
<3>梯度下降(Gradient descent)
應(yīng)用的場景之一最小值問題:
對于一些函數(shù),例如J(θ0,θ1)
目標(biāo): minθ0,θ1J(θ0,θ1)
方法的框架:
a. 給θ0, θ1一個初始值,例如都等于0;
b. 每次改變θ0, θ1的時候都保持J(θ0,θ1)遞減,直到達到一個我們滿意的最小值;
對于任一J(θ0,θ1) , 初始位置不同,最終達到的極小值點也不同,例如以下例子:
3.一元回歸模型
<1>什么是線性回歸?
回歸函數(shù)的具體解釋和定義,可查看任何一本“概率論與數(shù)理統(tǒng)計”的書。我看的是“陳希孺”的。
這里我講幾點:
1)統(tǒng)計回歸分析的任務(wù),就在于根據(jù) x1,x2,...,xp 線性回歸和Y的觀察值,去估計函數(shù)f,尋求變量之間近似的函數(shù)關(guān)系。
2)我們常用的是,假定f函數(shù)的數(shù)學(xué)形式已知,其中若干個參數(shù)未知,要通過自變量和因變量的觀察值去估計未知的參數(shù)值。這叫“參數(shù)回歸”。其中應(yīng)用最廣泛的是f為線性函數(shù)的假設(shè):
這種情況叫做“線性回歸”。
3)自變量只有一個時,叫做一元線性回歸。
f(x) = b0+b1x
自變量有多個時,叫做多元線性回歸。
f(x1,x2,...,xp) = b0 + b1x1 + b2x2 + ... + bpxp
4)分類(Classification)與回歸(Regression)都屬于監(jiān)督學(xué)習(xí),他們的區(qū)別在于:
分類:用于預(yù)測有限的離散值,如是否得了癌癥(0,1),或手寫數(shù)字的判斷,是0,1,2,3,4,5,6,7,8還是9等。分類中,預(yù)測的可能的結(jié)果是有限的,且提前給定的。
回歸:用于預(yù)測實數(shù)值,如給定了房子的面積,地段,和房間數(shù),預(yù)測房子的價格。
<2>一元線性回歸
假設(shè):我們要預(yù)測房價。當(dāng)前自變量(輸入特征)是房子面積x,因變量是房價y.給定了一批訓(xùn)練集數(shù)據(jù)。我們要做的是利用手上的訓(xùn)練集數(shù)據(jù),得出x與y之間的函數(shù)f關(guān)系,并用f函數(shù)來預(yù)測任意面積x對應(yīng)的房價。
假設(shè)x與y是線性關(guān)系,則我們可以接著假設(shè)一元線性回歸函數(shù)如下來代表y的預(yù)測值:
我們有訓(xùn)練集了,那么問題就成了如何利用現(xiàn)有的訓(xùn)練集來判定未知參數(shù) (θ0,θ1) 的值,使其讓h的值更接近實際值y? 訓(xùn)練集指的是已知x,y值的數(shù)據(jù)集合!
一種方法是計算它的成本函數(shù)(Cost function),即預(yù)測出來的h的值與實際值y之間的方差的大小來決定當(dāng)前的(θ0,θ1)值是否是最優(yōu)的!
常用的成本函數(shù)是最小二乘法:
<3>模型總結(jié)
整個一元線性回歸通過下面這張圖總結(jié)即可:
最后,梯度下降和多元回歸模型將繼續(xù)學(xué)習(xí),當(dāng)我學(xué)到一定程度,再進行分享。
三. LinearRegression使用方法
LinearRegression模型在Sklearn.linear_model下,它主要是通過fit(x,y)的方法來訓(xùn)練模型,其中x為數(shù)據(jù)的屬性,y為所屬類型。
sklearn中引用回歸模型的代碼如下:
from sklearn import linear_model #導(dǎo)入線性模型
regr = linear_model.LinearRegression() #使用線性回歸
print regr
輸出的函數(shù)原型如下所示:
LinearRegression(copy_X=True,
fit_intercept=True,
n_jobs=1,
normalize=False)
fit(x, y): 訓(xùn)練。分析模型參數(shù),填充數(shù)據(jù)集。其中x為特征,y位標(biāo)記或類屬性。
predict(): 預(yù)測。它通過fit()算出的模型參數(shù)構(gòu)成的模型,對解釋變量進行預(yù)測其類屬性。預(yù)測方法將返回預(yù)測值y_pred。
這里推薦"搬磚小工053"大神的文章,非常不錯,強烈推薦。
引用他文章的例子,參考:scikit-learn : 線性回歸,多元回歸,多項式回歸
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 28 00:44:55 2016
@author: yxz15
"""
from sklearn import linear_model #導(dǎo)入線性模型
import matplotlib.pyplot as plt #繪圖
import numpy as np
#X表示匹薩尺寸 Y表示匹薩價格
X = [[6], [8], [10], [14], [18]]
Y = [[7], [9], [13], [17.5], [18]]
print u'數(shù)據(jù)集X: ', X
print u'數(shù)據(jù)集Y: ', Y
#回歸訓(xùn)練
clf = linear_model.LinearRegression() #使用線性回歸
clf.fit(X, Y) #導(dǎo)入數(shù)據(jù)集
res = clf.predict(np.array([12]).reshape(-1, 1))[0] #預(yù)測結(jié)果
print(u'預(yù)測一張12英寸匹薩價格:$%.2f' % res)
#預(yù)測結(jié)果
X2 = [[0], [10], [14], [25]]
Y2 = clf.predict(X2)
#繪制線性回歸圖形
plt.figure()
plt.title(u'diameter-cost curver') #標(biāo)題
plt.xlabel(u'diameter') #x軸坐標(biāo)
plt.ylabel(u'cost') #y軸坐標(biāo)
plt.axis([0, 25, 0, 25]) #區(qū)間
plt.grid(True) #顯示網(wǎng)格
plt.plot(X, Y, 'k.') #繪制訓(xùn)練數(shù)據(jù)集散點圖
plt.plot(X2, Y2, 'g-') #繪制預(yù)測數(shù)據(jù)集直線
plt.show()
運行結(jié)果如下所示,首先輸出數(shù)據(jù)集,同時調(diào)用sklearn包中的LinearRegression()回歸函數(shù),fit(X, Y)載入數(shù)據(jù)集進行訓(xùn)練,然后通過predict()預(yù)測數(shù)據(jù)12尺寸的匹薩價格,最后定義X2數(shù)組,預(yù)測它的價格。
數(shù)據(jù)集X: [[6], [8], [10], [14], [18]]
數(shù)據(jù)集Y: [[7], [9], [13], [17.5], [18]]
預(yù)測一張12英寸匹薩價格:$13.68
輸出的圖形如下所示:
線性模型的回歸系數(shù)W會保存在他的coef_方法中,截距保存在intercept_中。score(X,y,sample_weight=None) 評分函數(shù),返回一個小于1的得分,可能會小于0。
print u'系數(shù)', clf.coef_
print u'截距', clf.intercept_
print u'評分函數(shù)', clf.score(X, Y)
'''
系數(shù) [[ 0.9762931]]
截距 [ 1.96551743]
評分函數(shù) 0.910001596424
'''
其中具體的系數(shù)介紹推薦如下資料:sklearn學(xué)習(xí)筆記之簡單線性回歸 - Magle
四. 線性回歸判斷糖尿病
1.Diabetes數(shù)據(jù)集(糖尿病數(shù)據(jù)集)
糖尿病數(shù)據(jù)集包含442個患者的10個生理特征(年齡,性別、體重、血壓)和一年以后疾病級數(shù)指標(biāo)。
然后載入數(shù)據(jù),同時將diabetes糖尿病數(shù)據(jù)集分為測試數(shù)據(jù)和訓(xùn)練數(shù)據(jù),其中測試數(shù)據(jù)為最后20行,訓(xùn)練數(shù)據(jù)從0到-20行(不包含最后20行),即diabetes.data[:-20]。
from sklearn import datasets
#數(shù)據(jù)集
diabetes = datasets.load_diabetes() #載入數(shù)據(jù)
diabetes_x = diabetes.data[:, np.newaxis] #獲取一個特征
diabetes_x_temp = diabetes_x[:, :, 2]
diabetes_x_train = diabetes_x_temp[:-20] #訓(xùn)練樣本
diabetes_x_test = diabetes_x_temp[-20:] #測試樣本 后20行
diabetes_y_train = diabetes.target[:-20] #訓(xùn)練標(biāo)記
diabetes_y_test = diabetes.target[-20:] #預(yù)測對比標(biāo)記
print u'劃分行數(shù):', len(diabetes_x_temp), len(diabetes_x_train), len(diabetes_x_test)
print diabetes_x_test
輸出結(jié)果如下所示,可以看到442個數(shù)據(jù)劃分為422行進行訓(xùn)練回歸模型,20行數(shù)據(jù)用于預(yù)測。輸出的diabetes_x_test共20行數(shù)據(jù),每行僅一個特征。
劃分行數(shù): 442 422 20
[[ 0.07786339]
[-0.03961813]
[ 0.01103904]
[-0.04069594]
[-0.03422907]
[ 0.00564998]
[ 0.08864151]
[-0.03315126]
[-0.05686312]
[-0.03099563]
[ 0.05522933]
[-0.06009656]
[ 0.00133873]
[-0.02345095]
[-0.07410811]
[ 0.01966154]
[-0.01590626]
[-0.01590626]
[ 0.03906215]
[-0.0730303 ]]
2.完整代碼
改代碼的任務(wù)是從生理特征預(yù)測疾病級數(shù),但僅獲取了一維特征,即一元線性回歸?!?a href="http://www.3lll3.cn/view/19879.html" target="_blank">線性回歸】的最簡單形式給數(shù)據(jù)集擬合一個線性模型,主要是通過調(diào)整一系列的參以使得模型的殘差平方和盡量小。
線性模型:y = βX+b
X:數(shù)據(jù) y:目標(biāo)變量 β:回歸系數(shù) b:觀測噪聲(bias,偏差)
參考文章:Linear Regression Example - Scikit-Learn
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 28 01:21:30 2016
@author: yxz15
"""
from sklearn import datasets
import matplotlib.pyplot as plt
import numpy as np
#數(shù)據(jù)集
diabetes = datasets.load_diabetes() #載入數(shù)據(jù)
#獲取一個特征
diabetes_x_temp = diabetes.data[:, np.newaxis, 2]
diabetes_x_train = diabetes_x_temp[:-20] #訓(xùn)練樣本
diabetes_x_test = diabetes_x_temp[-20:] #測試樣本 后20行
diabetes_y_train = diabetes.target[:-20] #訓(xùn)練標(biāo)記
diabetes_y_test = diabetes.target[-20:] #預(yù)測對比標(biāo)記
#回歸訓(xùn)練及預(yù)測
clf = linear_model.LinearRegression()
clf.fit(diabetes_x_train, diabetes_y_train) #注: 訓(xùn)練數(shù)據(jù)集
#系數(shù) 殘差平法和 方差得分
print 'Coefficients :\n', clf.coef_
print ("Residual sum of square: %.2f" %np.mean((clf.predict(diabetes_x_test) - diabetes_y_test) ** 2))
print ("variance score: %.2f" % clf.score(diabetes_x_test, diabetes_y_test))
#繪圖
plt.title(u'LinearRegression Diabetes') #標(biāo)題
plt.xlabel(u'Attributes') #x軸坐標(biāo)
plt.ylabel(u'Measure of disease') #y軸坐標(biāo)
#點的準(zhǔn)確位置
plt.scatter(diabetes_x_test, diabetes_y_test, color = 'black')
#預(yù)測結(jié)果 直線表示
plt.plot(diabetes_x_test, clf.predict(diabetes_x_test), color='blue', linewidth = 3)
plt.show()
運行結(jié)果如下所示,包括系數(shù)、殘差平方和、方差分?jǐn)?shù)。
Coefficients :[ 938.23786125]
Residual sum of square: 2548.07
variance score: 0.47
繪制圖形如下所示,每個點表示真實的值,而直線表示預(yù)測的結(jié)果,比較接近吧。
同時繪制圖形時,想去掉坐標(biāo)具體的值,可增加如下代碼:
plt.xticks(())
plt.yticks(())
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03