Python數(shù)據(jù)挖掘 | 實戰(zhàn)案例之預(yù)測糖尿病
??今天給大家講解一個實戰(zhàn)案例:如何根據(jù)現(xiàn)有數(shù)據(jù)預(yù)測糖尿病。在這個案例開始之前,希望大家回憶一下大學(xué)里講過的線性回歸的知識,這是數(shù)據(jù)挖掘里非常重要的一部分知識。當然,鑒于大家都學(xué)過,本篇就不再贅述。
一. 數(shù)據(jù)集介紹diabetes dataset數(shù)據(jù)集
???這是一個糖尿病的數(shù)據(jù)集,主要包括442行數(shù)據(jù),10個屬性值,分別是:Age(年齡)、性別(Sex)、Body mass index(體質(zhì)指數(shù))、Average Blood Pressure(平均血壓)、S1~S6一年后疾病級數(shù)指標。Target為一年后患疾病的定量指標。
輸出如下所示:
二、LinearRegression使用方法
? ? ? ? LinearRegression模型在Sklearn.linear_model下,它主要是通過fit(x,y)的方法來訓(xùn)練模型,其中x為數(shù)據(jù)的屬性,y為所屬類型。
sklearn中引用回歸模型的代碼如下:
輸出的函數(shù)原型如下所示:
? ? ? ? fit(x, y): 訓(xùn)練。分析模型參數(shù),填充數(shù)據(jù)集。其中x為特征,y位標記或類屬性。
? ? ? ? predict(): 預(yù)測。它通過fit()算出的模型參數(shù)構(gòu)成的模型,對解釋變量進行預(yù)測其類屬性。預(yù)測方法將返回預(yù)測值y_pred。
引用搬磚小工053"大神的例子:
????? 運行結(jié)果如下所示,首先輸出數(shù)據(jù)集,同時調(diào)用sklearn包中的LinearRegression()回歸函數(shù),fit(X, Y)載入數(shù)據(jù)集進行訓(xùn)練,然后通過predict()預(yù)測數(shù)據(jù)12尺寸的匹薩價格,最后定義X2數(shù)組,預(yù)測它的價格。
輸出的圖形如下所示:
? ? ? ? 線性模型的回歸系數(shù)W會保存在他的coef_方法中,截距保存在intercept_中。score(X,y,sample_weight=None) 評分函數(shù),返回一個小于1的得分,可能會小于0。
三、線性回歸判斷糖尿病
? 1.Diabetes數(shù)據(jù)集(糖尿病數(shù)據(jù)集)
? ? ? ? 糖尿病數(shù)據(jù)集包含442個患者的10個生理特征(年齡,性別、體重、血壓)和一年以后疾病級數(shù)指標。
? ? ? ? 然后載入數(shù)據(jù),同時將diabetes糖尿病數(shù)據(jù)集分為測試數(shù)據(jù)和訓(xùn)練數(shù)據(jù),其中測試數(shù)據(jù)為最后20行,訓(xùn)練數(shù)據(jù)從0到-20行(不包含最后20行),即diabetes.data[:-20]。
? ? ? ? 輸出結(jié)果如下所示,可以看到442個數(shù)據(jù)劃分為422行進行訓(xùn)練回歸模型,20行數(shù)據(jù)用于預(yù)測。輸出的diabetes_x_test共20行數(shù)據(jù),每行僅一個特征。
2.完整代碼
? ? ? ? 改代碼的任務(wù)是從生理特征預(yù)測疾病級數(shù),但僅獲取了一維特征,即一元線性回歸。【線性回歸】的最簡單形式給數(shù)據(jù)集擬合一個線性模型,主要是通過調(diào)整一系列的參以使得模型的殘差平方和盡量小。
線性模型:y = βX+b
? ? ? ? X:數(shù)據(jù) y:目標變量 β:回歸系數(shù) b:觀測噪聲(bias,偏差)
? ? ? ? 運行結(jié)果如下所示,包括系數(shù)、殘差平方和、方差分數(shù)。
? ? ? ? 繪制圖形如下所示,每個點表示真實的值,而直線表示預(yù)測的結(jié)果,比較接近吧。
? ? ? ? 同時繪制圖形時,想去掉坐標具體的值,可增加如下代碼:
四、優(yōu)化代碼
? ? ? ? 下面是優(yōu)化后的代碼,增加了斜率、 截距的計算,同時增加了點圖到線性方程的距離,保存圖片設(shè)置像素。
運行結(jié)果如下所示:
繪制圖形如下所示: