回歸問題是機器學習要解決的四大問題之一,在我們的生活中也存在著很多回歸問題。比如某一地區的房價預測,某一個學生高考成績的預測,某一地區感染病毒人數的預測,某一公司2020年營業收入的預測等等。從以上的例子中,我們可知回歸問題的目標是預測一個數值或者一個區間數值。
回歸算法:對歷史數據進行擬合,形成擬合方程。接下來使用該方程對新數據進行預測。下圖中紅線表示的是一元數據的擬合方程,如果數據是二元數據,那么它的擬合方程就是一個擬合平面,對于更高維的數據,它的擬合方程將更加復雜。
回歸算法的評估指標:
對于回歸算法,我們評價它的好壞,就是看它的預測結果與我們的真實結果的差異大小。在回歸算法中,我們最常用的四種評估指標分別是:平均絕對值誤差,均方誤差,均方根誤差,可決系數。接下來,我們以boston房價數據集為例,來詳細說明每一個評估指標。并分別采用python的numpy庫和Sklearn.metrics模塊下專有的計算方法來計算這些指標的具體數值。
1.平均絕對值誤差(
)
計算每一個樣本的預測值和真實值的差的絕對值,然后求和再取平均值。其公式如下,為真實值,
與算法的預測值。
導入boston數據集,建立基本的線性回歸模型,并使用模型對測試樣本進行預測。
#導入數據分析的常用工具包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
%matplotlib inline
#導入boston房價數據集
boston = datasets.load_boston()
#導入特征
X = boston.data
#導入標簽
y = boston.target
#對原始數據進行切分
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.3,random_state = 1)
#建立線性回歸模型
from sklearn.linear_model import LinearRegression
LR = LinearRegression()
#對訓練集進行訓練
LR.fit(X_train,y_train)
#對測試集進行預測
prediction = LR.predict(X_test)
使用指標對LR模型的預測結果進行評估。
Python方法:
MAE_1 = np.mean(abs(y_test - prediction))
print(MAE_1)
[out]:3.3446655035987476
使用sklearn.metrics模塊:
from sklearn.metrics import mean_absolute_error
MAE_2 = mean_absolute_error(y_test,prediction)
print(MAE_2)
[out]:3.3446655035987476
可以看出的值為3.3447。
2.均方誤差(
)
計算每一個樣本的預測值與真實值差的平方,然后求和再取平均值。
下面使用指標來評估該模型的效果。
python方法:
MSE_1 = np.mean((y_test - prediction)**2)
print(MSE_1)
[out]:19.831323672063235
使用sklearn.metrics模塊:
from sklearn.metrics import mean_squared_error
MSE_2 = mean_squared_error(y_test,prediction)
print(MSE_2)
[out]:19.831323672063235
可以看出的值為19.8313。
3.均方根誤差(
)
均方根誤差就是在均方誤差的基礎上再開方。
下面使用來評估該模型的效果。
python方法:
RMSE_1 = np.sqrt(np.mean((y_test - prediction)**2))
print(RMSE_1)
[out]:4.45323743719816
使用sklearn.metrics模塊:
sklearn.metrics模塊中沒有直接計算均方根誤差的函數,所以需要先計算均方誤差,然后再開根號。
from sklearn.metrics import mean_squared_error
RMSE_2 = np.sqrt(mean_squared_error(y_test,prediction))
print(RMSE_2)
[out]:4.45323743719816
可以看出的值為4.4532。
4.可決系數(
)
可決系數的值為0~1之間的值。
越接近于1,說明模型的效果越好,越接近于0,說明的模型效果越差,當然
也存在負值,此時說明模型的效果非常的差。公式中
為
的平均值。
python方法:
R_1 = 1 - np.mean((y_test - prediction)**2)/np.mean((y_test - np.mean(y_test)**2))
print(R_1)
[out]:0.7836295385076281
使用sklearn.metrics模塊
from sklearn.metrics import r2_score
R_2 = r2_score(y_test,prediction)
print(R_2)
[out]:0.7836295385076281
可以看出的值為0.7836。
小結:
1.,
,
可以準確的計算出預測結果和真實的結果的誤差大小,但卻無法衡量模型的好壞程度。但是這些指標可以指導我們的模型改進工作,如調參,特征選擇等。
2.的結果可以很清楚的說明模型的好壞,該值越接近于1,表明模型的效果越好。該值越接近于0,表明模型的效果越差。