python sklearn常用的模型

問題描述:sklearn是機器學習的一個庫,裏面有好多模型可供使用,現在系統對常用的一些模型進行梳理。


範數預備知識:p-範數的公式如下:
xp=(i=1nxip)1pp1 ||x||_{p} = (\sum_{i=1}^{n}|x_{i}|^{p})^\frac{1}{p},其中p\ge1
當p=1的時候,我們稱其爲曼哈頓距離,其來源是曼哈頓的出租車司機在四四方方的曼哈頓街道中從一點到另一點所需走過的距離,也就是L1範數。L1最優化問題的解是稀疏的。

當p=2時,則是我們最常用的歐幾里得距離,也就是L2範數。

當p=0時,因其不再滿足三角不等性,嚴格的說此時已經不算是範數了,但仍然很多人稱之爲L0範數。表示向量中所有非零元素的個數,L0範數的這個特點,使得其適合機器學習中稀疏編碼,特徵選擇的應用。

當p趨向於無窮時,上面的公式可以稍微化簡下,假設xjx_j是向量中最大的元素,根據無限大的特性,我們可以得到:
xj>>xi,jix_j^\infty>>x_i^\infty,\forall j\neq i進而有i=1nxi=xj\sum_{i=1}^{n}x_i^{\infty}=x_j^{\infty}
x=(i=1nxi)1=(xj)1=xj \begin{aligned} ||x||_{\infty} = (\sum_{i=1}^{n}|x_{i}|^{\infty})^\frac{1}{\infty} & = (x_j^{\infty})^{\frac{1}{\infty}} = |x_j| \end{aligned}
因此我們可以說,無窮範數是x向量中最大元素的長度。


模型類型:

1、線性模型:

  • OLS(Ordinary Least Square linear regression)普通線性迴歸,目標函數是:
    Loss=yXw2 Loss = ||y-Xw|| ^2
    其中w爲多項式係數
# 調用方式爲
from sklearn.linear_model import LinearRegression as LR
import numpy as np

X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
y = np.dot(X, np.array([1, 2])) + 3
reg = LR().fit(X, y)            #訓練
reg.coef_                       #查看學出來的w也就是多項式係數
reg.intercept_                  #查看偏置(bias)即截距
reg.predict(np.array([[3, 5]])) #預測新的X
  • Ridge迴歸即帶有L2範數的線性迴歸,L2可以得到平滑的權值,目標函數爲:
    Loss=yXw2+αw2 Loss = ||y-Xw|| ^2 + \alpha||w||^2
    其中w爲多項式係數,後面一項爲正則化項,控制模型的複雜度,α\alpha默認爲1.0,必須爲正的浮點數
#調用示例
from sklearn.linear_model import Ridge 
import numpy as np

n_samples, n_features = 10, 5
rng = np.random.RandomState(0)
y = rng.randn(n_samples)
X = rng.randn(n_samples, n_features)
clf = Ridge(alpha=1.0)
reg = clf.fit(X, y)           #訓練
reg.coef_                       #查看學出來的w也就是多項式係數
reg.intercept_                  #查看偏置(bias)即截距
  • Lasso(Least absolute shrinkage and selection operator )迴歸,帶有L1範數正則化的線性迴歸,L1可以得到係數的權值,目標函數爲:
    Loss=12n_samplesyXw2+αw Loss = \frac{1}{2*n\_samples} * ||y-Xw|| ^2 + \alpha||w||
    其中w爲多項式係數,後面一項爲正則化項,控制模型的複雜度,α\alpha默認爲1.0,必須爲正的浮點數
# 調用示例
from sklearn.linear_model import Lasso
clf = Lasso(alpha=0.1)
clf.fit([[0,0], [1, 1], [2, 2]], [0, 1, 2])
print(clf.coef_) #查看學出來的w也就是多項
print(clf.intercept_) # 查看偏置(bias)即截距
  • ElasticNet是帶有L1和L2範數的線性迴歸,其目標函數爲:
    Loss=12n_samplesyXw2+αl1_ratew+0.5α(1l1_rate)w2 Loss = \frac{1}{2*n\_samples} * ||y-Xw|| ^2 + \alpha * l1\_rate*||w||+0.5*\alpha*(1-l1\_rate)*||w||^{2}
    其中,α\alpha默認爲1.0,l1_rate默認爲0.5,w代表多項式係數。
# 調用方式
from sklearn.linear_model import ElasticNet
from sklearn.datasets import make_regression
X, y = make_regression(n_features=2, random_state=0)
regr = ElasticNet(random_state=0)
regr.fit(X, y)
print(regr.coef_)
print(regr.predict([[0, 0]]))
  • Lars(Least angle regression)最小角迴歸,主要是用於高維數據,每一步找到和目標最相關的特徵,沿着和各個特徵夾角相同的方向優化,當特徵數的重要性大於樣本數的重要性時(樣本數不多的情況),效果較好,並且可以通過適當調整用於其他算法,如:Lasso等。
  • LarsCV帶交叉驗證的最小角迴歸,LassoCV,ElasticNetCV,RidgeCV等與之類似。
# 調用示例
from sklearn.linear_model import LarsCV
from sklearn.datasets import make_regression
X, y = make_regression(n_samples=200, noise=4.0, random_state=0)
reg = LarsCV(cv=5).fit(X, y)
reg.score(X, y)
reg.predict(X[:1,])
  • Bayesian Regression貝葉斯迴歸,在極大似然估計線性迴歸中我們把參數w看成是一個未知的固定值,而貝葉斯學派則把w看成是一個隨機變量。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章