今天給大家講解一個實戰案例:如何根據現有數據預測糖尿病。在這個案例開始之前,希望大家回憶一下大學里講過的線性回歸的知識,這是數據挖掘里非常重要的一部分知識。當然,鑒於大家都學過,本篇就不再贅述。
一. 數據集介紹
diabetes dataset數據集
這是一個糖尿病的數據集,主要包括442行數據,10個屬性值,分別是:Age(年齡)、性別(Sex)、Body mass index(體質指數)、Average Blood Pressure(平均血壓)、S1~S6一年后疾病級數指標。Target為一年后患疾病的定量指標。
輸出如下所示:
二、LinearRegression使用方法
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爬蟲數據分析挖掘,回復【開源源碼】免費獲取更多開源項目源碼
公眾號每日更新python知識和【免費】工具