上一節(jié)介紹了如何審查分類算法,并介紹了六種不同的分類算法,還
用同一個數(shù)據(jù)集按照相同的方式對它們做了審查,本章將用相同的方式對回歸算法進行審查。
在本節(jié)將學(xué)到:
- 如何審查機器學(xué)習(xí)的回歸算法。
- 如何審查四種線性分類算法。
- 如何審查三種非線性分類算法。
算法概述
本章將審查七種回歸算法。首先介紹四種線性算法:
- 線性回歸算法。
- 嶺回歸算法(脊回歸算法)。
- 套索回歸算法。
- 彈性網(wǎng)絡(luò)(Elastic Net)回歸算法。
然后介紹三種非線性算法:
- K近鄰算法(KNN)。
- 分類與回歸樹算法。
- 支持向量機(SVM)。
本章將使用波士頓房價的數(shù)據(jù)集來審查回歸算法,采用10折交叉驗證來分離數(shù)據(jù),并應(yīng)用到所有的算法上。另外,還會通過均方誤差來評估算法模型。scikit-learn 中的cross_val_score()函數(shù)
能夠幫助評估算法模型,我們就用這個函數(shù)來評估算法模型。
線性算法分析
首先介紹scikit-learn中用來處理機器學(xué)習(xí)中的回歸問題的四種算法。
線性回歸算法
線性回歸算法是利用數(shù)理統(tǒng)計中的回歸分析,來確定兩種或兩種以上變量間相互依賴的定量關(guān)系的一種統(tǒng)計分析方法,運用十分廣泛。其表達(dá)式為y=w’x+e,e表示誤差服從均值為 0 的正態(tài)分布。在回歸分析中,只包括一個自變量和一個因變量,且二者的關(guān)系可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。
如果回歸分析中包括兩個或兩個以上的自變量,且因變量和自變量之間是線性關(guān)系,則稱為多元線性回歸分析。
在scikit-learn中實現(xiàn)線性回歸算法的是LinearRegression類。
代碼如下:
數(shù)據(jù)集下載地址
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import KFold, cross_val_score
#數(shù)據(jù)預(yù)處理
path = 'D:\down\\BostonHousing.csv'
data = pd.read_csv(path)
array = data.values
X = array[:, 0:13]
Y = array[:, 13]
n_splits = 10
seed = 7
kflod = KFold(n_splits=n_splits, random_state=seed, shuffle=True)
#
model = LinearRegression()
scoring = 'neg_mean_squared_error'
results = cross_val_score(model, X, Y, cv=kflod, scoring=scoring)
print("LinearRegression MSE: %.3f (%.3f)" % (results.mean(), results.std()))
運行結(jié)果:
LinearRegression MSE: -23.747 (11.143)
嶺回歸算法
嶺回歸算法是一種專門用于共線性數(shù)據(jù)分析的有偏估計回歸方法,實際上是一種改良的最小二乘估計法,通過放棄最小二乘法的無偏性,以損
失部分信息、降低精度為代價,獲得回歸系數(shù)更符合實際、更可靠的回歸方法,對病態(tài)數(shù)據(jù)的擬合要強于最小二乘法。在scikit-learn中實現(xiàn)嶺回歸算法的是Ridge類。
代碼如下:
import pandas as pd
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.model_selection import KFold, cross_val_score
#數(shù)據(jù)預(yù)處理
path = 'D:\down\\BostonHousing.csv'
data = pd.read_csv(path)
array = data.values
X = array[:, 0:13]
Y = array[:, 13]
n_splits = 10
seed = 7
kflod = KFold(n_splits=n_splits, random_state=seed, shuffle=True)
#
model = Ridge()
scoring = 'neg_mean_squared_error'
results = cross_val_score(model, X, Y, cv=kflod, scoring=scoring)
print("Ridge MSE: %.3f (%.3f)" % (results.mean(), results.std()))
運行結(jié)果:
Ridge MSE: -23.890 (11.407)
套索回歸算法
套索回歸算法和嶺回歸算法類似,套索回歸算法也會懲罰回歸系數(shù),在套索回歸中會懲罰回歸系數(shù)的絕對值大小。此外,它能夠減少變化程度并提高線性回歸模型的精度。套索回歸算法和嶺回歸算法有一點不同,它使用的懲罰函數(shù)是絕對值,而不是平方。這導(dǎo)致懲罰(或等于約束估計的絕對值之和)值使一些參數(shù)估計結(jié)果等于零。使用懲罰值越大,進一步估計會使縮小值越趨近零。這將導(dǎo)致我們要從給定的n個變量中選擇變量。如果預(yù)測的一組變量高度相似,套索回歸算法會選擇其中的一個變量,并將其他的變量收縮為零。
在scikit-learn中的實現(xiàn)類是Lasso。
代碼如下:
import pandas as pd
from sklearn.linear_model import LinearRegression, Ridge, Lasso
from sklearn.model_selection import KFold, cross_val_score
#數(shù)據(jù)預(yù)處理
path = 'D:\down\\BostonHousing.csv'
data = pd.read_csv(path)
array = data.values
X = array[:, 0:13]
Y = array[:, 13]
n_splits = 10
seed = 7
kflod = KFold(n_splits=n_splits, random_state=seed, shuffle=True)
#
model = Lasso()
scoring = 'neg_mean_squared_error'
results = cross_val_score(model, X, Y, cv=kflod, scoring=scoring)
print("Lasso MSE: %.3f (%.3f)" % (results.mean(), results.std()))
運行結(jié)果:
Lasso MSE: -28.746 (12.002)
彈性網(wǎng)絡(luò)回歸算法
彈性網(wǎng)絡(luò)回歸算法是套索回歸算法和嶺回歸算法的混合體,在模型訓(xùn)練時,彈性網(wǎng)絡(luò)回歸算法綜合使用L1和L2兩種正則化方法。當(dāng)有多個相關(guān)的特征時,彈性網(wǎng)絡(luò)回歸算法是很有用的,套索回歸算法會隨機挑選算法中的一個,而彈性網(wǎng)絡(luò)回歸算法則會選擇兩個。與套索回歸算法和嶺回歸算法相比,彈性網(wǎng)絡(luò)回歸算法的優(yōu)點是,它允許彈性網(wǎng)絡(luò)回歸繼承循環(huán)狀態(tài)下嶺回歸的一些穩(wěn)定性。另外,在高度相關(guān)變量的情況下,它會產(chǎn)生群體效應(yīng);選擇變量的數(shù)目沒有限制;可以承受雙重收縮。
在 scikit-learn中的實現(xiàn)類是ElasticNet。
代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-672733.html
import pandas as pd
from sklearn.linear_model import LinearRegression, Ridge, Lasso, ElasticNet
from sklearn.model_selection import KFold, cross_val_score
#數(shù)據(jù)預(yù)處理
path = 'D:\down\\BostonHousing.csv'
data = pd.read_csv(path)
array = data.values
X = array[:, 0:13]
Y = array[:, 13]
n_splits = 10
seed = 7
kflod = KFold(n_splits=n_splits, random_state=seed, shuffle=True)
#
model = ElasticNet()
scoring = 'neg_mean_squared_error'
results = cross_val_score(model, X, Y, cv=kflod, scoring=scoring)
print("ElasticNet MSE: %.3f (%.3f)" % (results.mean(), results.std()))
運行結(jié)果:文章來源地址http://www.zghlxwxcb.cn/news/detail-672733.html
ElasticNet MSE: -27.908 (11.484)
到了這里,關(guān)于機器學(xué)習(xí)基礎(chǔ)10-審查回歸算法(基于波士頓房價的數(shù)據(jù)集)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!