線性回歸是數(shù)據(jù)挖掘中基礎(chǔ)的算法之一,其核心思想是求解一組因變量和自變量之間的方程,得到回歸函數(shù),同時(shí)誤差項(xiàng)通常使用最小二乘法進(jìn)行計(jì)算。
在本書常用的Sklaern機(jī)器學(xué)習(xí)包中將調(diào)用Linear_model子類的LinearRegression類進(jìn)行線性回歸模型計(jì)算。
1.LinearRegression
LinearRegression回歸模型在Sklearn.linear_model子類下,主要是調(diào)用fit(x,y)函數(shù)來訓(xùn)練模型,其中x為數(shù)據(jù)的屬性,y為所屬類型。sklearn中引用回歸模型的代碼如下:
輸出函數(shù)的構(gòu)造方法如下:
其中參數(shù)說明如下:
copy_X:布爾型,默認(rèn)為True。是否對(duì)X復(fù)制,如果選擇False,則直接對(duì)原始數(shù)據(jù)進(jìn)行覆蓋,即經(jīng)過中心化、標(biāo)準(zhǔn)化后,把新數(shù)據(jù)覆蓋到原數(shù)據(jù)上。
fit_intercept:布爾型,默認(rèn)為True。是否對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行中心化,如果是True表示對(duì)輸入的訓(xùn)練數(shù)據(jù)進(jìn)行中心化處理,如果是False則輸入數(shù)據(jù)已經(jīng)中心化處理,后面的過程不再進(jìn)行中心化處理。
n_jobs:整型,默認(rèn)為1。計(jì)算時(shí)設(shè)置的任務(wù)個(gè)數(shù),如果設(shè)置為-1表示使用所有的CPU。該參數(shù)對(duì)于目標(biāo)個(gè)數(shù)大于1且規(guī)模足夠大的問題有加速作用。
normalize:布爾型,默認(rèn)為False。是否對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理。
LinearRegression類主要包括如下方法:
2.示例
輸出結(jié)果:
3.線性回歸預(yù)測(cè)糖尿病
Sklearn機(jī)器學(xué)習(xí)包提供了糖尿病數(shù)據(jù)集(Diabetes Dataset),該數(shù)據(jù)集主要包括442行數(shù)據(jù),10個(gè)特征值,分別是:年齡(Age)、性別(Sex)、體質(zhì)指數(shù)(Body mass index)、平均血壓(Average Blood Pressure)、S1~S6一年后疾病級(jí)數(shù)指標(biāo)。預(yù)測(cè)指標(biāo)為Target,它表示一年后患疾病的定量指標(biāo)。
整個(gè)數(shù)據(jù)集共10個(gè)特征值,我們只獲取第3個(gè)特征進(jìn)行實(shí)驗(yàn),而真實(shí)分析中通常經(jīng)過降維處理再繪制圖形。
from sklearn import datasets import matplotlib.pyplot as plt from sklearn import linear_model import numpy as np #數(shù)據(jù)集劃分 diabetes = datasets.load_diabetes() #載入數(shù)據(jù) diabetes_x_temp = diabetes.data[:, np.newaxis, 2] #獲取其中一個(gè)特征 diabetes_x_train = diabetes_x_temp[:-20] #訓(xùn)練樣本 diabetes_x_test = diabetes_x_temp[-20:] #測(cè)試樣本 后20行 diabetes_y_train = diabetes.target[:-20] #訓(xùn)練標(biāo)記 diabetes_y_test = diabetes.target[-20:] #預(yù)測(cè)對(duì)比標(biāo)記 #回歸訓(xùn)練及預(yù)測(cè) clf = linear_model.LinearRegression() clf.fit(diabetes_x_train, diabetes_y_train) #訓(xùn)練數(shù)據(jù)集 pre = clf.predict(diabetes_x_test) #繪圖 plt.title(u'LinearRegression Diabetes') #標(biāo)題 plt.xlabel(u'Attributes') #x軸坐標(biāo) plt.ylabel(u'Measure of disease') #y軸坐標(biāo) plt.scatter(diabetes_x_test, diabetes_y_test, color = 'black') #散點(diǎn)圖 plt.plot(diabetes_x_test, pre, color='blue', linewidth = 2) #預(yù)測(cè)直線 plt.show()
輸出結(jié)果如圖所示,每個(gè)點(diǎn)表示真實(shí)的值,而直線表示預(yù)測(cè)的結(jié)果。
聯(lián)系客服