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看成是一个随机变量。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章