臺灣何時歸——幾種常用迴歸算法
線性迴歸LR(Linear Regression)
傳統的多變量線性迴歸可以表示成下面的形式:——狹義的線性迴歸
這個模型的自變量是一次的,能解決的問題有很大的侷限性,如果數據具有非線性的趨勢,便不能得到很好的表達。將自變量擴展到高次的情況,便得到了多項式迴歸(擬合)。
其中,將稱爲基函數,這裏我們選用了多項式基函數。選用不同的基函數能解決更爲廣泛的問題。——廣義的線性迴歸
代碼展示(加噪聲的正旋函數,狹義線性迴歸)
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()
支持向量機迴歸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()
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()
對比總結:
1. 狹義的線性迴歸不擬合非線性;
2. 支持向量機迴歸很好擬合非線性;
3. KNN可以擬合非線性(但不夠平滑)。
寫代碼不忘國事!
歡迎關注,敬請點贊!
返回頂部