本篇文章中,我們用 Python 代碼寫個(gè)小程序,根據(jù)出生時(shí)的body mass index(BMI)數(shù)據(jù),使用線性回歸來(lái)預(yù)測(cè)壽命。在這之前,我們先準(zhǔn)備一下建立這個(gè)模型所需要的必要工具。
在這個(gè)線性回歸模型中,需要用到scikit-learn庫(kù)的 LinearRegression class,這個(gè) class 提供了fit()函數(shù),它根據(jù)所輸入的數(shù)據(jù)來(lái)匹配模型,以下是基本的使用方法:
>>> fromsklearn.linear_modelimportLinearRegression
>>> model = LinearRegression()
>>> model.fit(x_values, y_values)
上面的例子中,model 變量是線性回歸的模型,x_values 和 y_values 作為訓(xùn)練數(shù)據(jù)輸入,model 根據(jù) x_values 和 y_values 進(jìn)行調(diào)整。“調(diào)整”的意思是——找到一條最佳的“線”能夠和訓(xùn)練數(shù)據(jù)進(jìn)行匹配。之后我們就可以使用 predict() 函數(shù)進(jìn)行預(yù)測(cè)。
>>> print(model.predict([ [127], [248] ]))
[[438.94308857,127.14839521]]
predict() 函數(shù)返回一個(gè)預(yù)測(cè)結(jié)果的數(shù)組,里面的元素就是預(yù)測(cè)的結(jié)果,分別對(duì)應(yīng)輸入數(shù)組中的元素。對(duì)于第一個(gè)輸入——[127],返回的預(yù)測(cè)值為438.94308857,第二個(gè)輸入——[248],返回的預(yù)測(cè)值為127.14839521。輸入數(shù)組中的元素使用[127]格式,而不是127,是因?yàn)槲覀兛梢杂枚鄠€(gè)數(shù)據(jù)的組合進(jìn)行預(yù)測(cè)。以后我們會(huì)在線性回歸中使用多個(gè)數(shù)據(jù),現(xiàn)在我們先使用一個(gè)數(shù)據(jù)值。
實(shí)踐
在這個(gè)實(shí)踐中,我們會(huì)用到以下數(shù)據(jù)集:“各國(guó)家人的平均壽命” 和 “各國(guó)家男性的平均BMI”,這些數(shù)據(jù)來(lái)自 Gapminder。
假設(shè)數(shù)據(jù)集存儲(chǔ)在 “bmi_and_life_expectancy.csv” 文件中。這份數(shù)據(jù)包含三個(gè)字段:country(國(guó)家)、Life expectancy(壽命)、BMI(一個(gè)小孩出生時(shí)的BMI)。我們會(huì)根據(jù)BMI來(lái)預(yù)測(cè)壽命。
完整代碼如下:
# 導(dǎo)入 pandas庫(kù) 和 LinearRegression類
import pandas as pd
from sklearn.linear_model import LinearRegression
# 使用 pands 的 read_csv 函數(shù)把數(shù)據(jù)加載到 dataframe 中
#將 dataframe 賦值給 bmi_life_data 變量
bmi_life_data = pd.read_csv("bmi_and_life_expectancy.csv")
#使用 scikit-learn 的 LinearRegression 建立一個(gè)回歸模型,并賦值給 bmi_life_model
bmi_life_model = LinearRegression()
bmi_life_model.fit(bmi_life_data[['BMI']], bmi_life_data[['Life expectancy']])
# 使用 21.07931這個(gè) BMI 進(jìn)行預(yù)測(cè),并將結(jié)果賦值給 laos_life_exp 變量。
laos_life_exp = bmi_life_model.predict(21.07931)
print(laos_life_exp)
print輸出的就是預(yù)測(cè)后的結(jié)果60.31564716。
使用線性回歸中時(shí)要注意
線性回歸是基于一系列的假設(shè),并不適用于所有的場(chǎng)景,有些問題你應(yīng)該要注意。
線性回歸適用于數(shù)據(jù)是線性的情況
線性回歸是從訓(xùn)練數(shù)據(jù)中找到一條匹配的直線。如果訓(xùn)練數(shù)據(jù)中的數(shù)據(jù)之間的關(guān)系并不是線性的,那么你需要做一些調(diào)整(轉(zhuǎn)換你的訓(xùn)練數(shù)據(jù)),或者使用其他類型的模型。
線性回歸對(duì)異常值敏感
線性回歸嘗試找到一條最匹配訓(xùn)練數(shù)據(jù)的直線。如果你的數(shù)據(jù)集中有一些極度偏差的數(shù)據(jù)(與一般的模式不匹配),會(huì)導(dǎo)致相差很大的結(jié)果。
下面的
![Uploading AA5DBE35-C653-4CC9-ACEC-B1B89CB565DF_605091.png . . .]
圖,模型與數(shù)據(jù)匹配得非常好
然而,添加了一些異常值之后(與模型不匹配),對(duì)模型的預(yù)測(cè)有很大的影響,如下圖:
通常,你希望一個(gè)模型能夠匹配大多數(shù)的數(shù)據(jù),但一定要注意這些異常值。