本篇文章中,我們用 Python 代碼寫(xiě)個(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)景裆赵,有些問(wèn)題你應(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ù)巴元,但一定要注意這些異常值。