幾種常用迴歸算法——線性迴歸、支持向量機迴歸和KNN迴歸

歡迎關注,敬請點贊!

線性迴歸LR(Linear Regression)

傳統的多變量線性迴歸可以表示成下面的形式:——狹義的線性迴歸
f(X,θ)=Xθ=θ0+x1θ1+x2θ2++xnθn(公式1) f(X, \theta) = X \theta = \theta_0 + x_1 \theta_1 + x_2 \theta_2 + …… + x_n \theta_n \tag{公式1}
這個模型的自變量是一次的,能解決的問題有很大的侷限性,如果數據具有非線性的趨勢,便不能得到很好的表達。將自變量擴展到高次的情況,便得到了多項式迴歸(擬合)。
f(X,θ)=Xθ=θ0+θ1x+θ2x2++θnxn=ϕ(X)θ(公式2) f(X, \theta) = X \theta = \theta_0 + \theta_1 x + \theta_2 x^2 + …… + \theta_n x^n = \phi (X) \theta \tag{公式2}
其中ϕ(X)=[1,x,x2,,xn],θ=[θ0,θ1,θ2,,θn]T\phi(X) = [1, x, x^2, ……, x^n], \theta = [\theta_0, \theta_1, \theta_2, ……, \theta_n]^T,將ϕ(X)\phi (X)稱爲基函數,這裏我們選用了多項式基函數。選用不同的基函數能解決更爲廣泛的問題。——廣義的線性迴歸

代碼展示(加噪聲的正旋函數,狹義線性迴歸)

from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import numpy as np

X = np.linspace(0, 2 * np.pi, 50)
y = np.sin(X) + np.random.random(size=(50,))

lr = LinearRegression()
lr.fit(X.reshape(-1, 1), y)
y_pred_lr = lr.predict(X.reshape(-1, 1))

plt.scatter(X, y)
plt.plot(X, y_pred_lr)
plt.show()

狹義線性迴歸不擬合(bias)

支持向量機迴歸SVR(Support Vector Regression)

返回頂部
支持向量機裏面有核函數的概念,把數據映射到高維空間,隱式地應用了多項式,支持向量機迴歸能很好擬合非線性趨勢。

代碼展示(加噪聲的正旋函數,支持向量機迴歸)

from sklearn.svm import SVR
import matplotlib.pyplot as plt
import numpy as np

X = np.linspace(0, 2 * np.pi, 50)
y = np.sin(X) + np.random.random(size=(50,))

svr = SVR()
svr.fit(X.reshape(-1, 1), y)
y_pred_svr = svr.predict(X.reshape(-1, 1))

plt.scatter(X, y)
plt.plot(X, y_pred_svr)
plt.show()

SVR很好擬合

KNN迴歸(KNeighborsRegressor)

返回頂部
非參數方法。

周圍數據的平均值,默認用minkowski距離來選擇最近的點。鄰居數(n-neighbors)越大,越平滑(bias);越小,越過擬合(vias)

代碼展示(加噪聲的正旋函數,KNN迴歸)

from sklearn.neighbors import KNeighborsRegressor
import matplotlib.pyplot as plt
import numpy as np

X = np.linspace(0, 2 * np.pi, 50)
y = np.sin(X) + np.random.random(size=(50,))

knnr = KNeighborsRegressor()
knnr.fit(X.reshape(-1, 1), y)
y_pred_knnr = knnr.predict(X.reshape(-1, 1))

plt.scatter(X, y)
plt.plot(X, y_pred_knnr)
plt.show()

KNN迴歸

對比總結:

幾種迴歸算法對比

1. 狹義的線性迴歸不擬合非線性;
2. 支持向量機迴歸很好擬合非線性;
3. KNN可以擬合非線性(但不夠平滑)。

寫代碼不忘國事!
歡迎關注,敬請點贊!
返回頂部

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章