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