python sklearn常用的模型

本文介绍了sklearn库中常见的机器学习模型,包括线性回归、Ridge回归、Lasso回归、ElasticNet回归、最小角回归及其变种。详细解释了范数的概念,包括L1、L2和无穷范数,以及它们在模型优化中的作用。
问题描述:sklearn是机器学习的一个库,里面有好多模型可供使用,现在系统对常用的一些模型进行梳理。

   范数预备知识:p-范数的公式如下:
∣∣x∣∣p=(∑i=1n∣xi∣p)1p,其中p≥1 ||x||_{p} = (\sum_{i=1}^{n}|x_{i}|^{p})^\frac{1}{p},其中p\ge1 xp=(i=1nxip)p1p1
   当p=1的时候,我们称其为曼哈顿距离,其来源是曼哈顿的出租车司机在四四方方的曼哈顿街道中从一点到另一点所需走过的距离,也就是L1范数。L1最优化问题的解是稀疏的。

   当p=2时,则是我们最常用的欧几里得距离,也就是L2范数。

   当p=0时,因其不再满足三角不等性,严格的说此时已经不算是范数了,但仍然很多人称之为L0范数。表示向量中所有非零元素的个数,L0范数的这个特点,使得其适合机器学习中稀疏编码,特征选择的应用。

   当p趋向于无穷时,上面的公式可以稍微化简下,假设xjx_jxj是向量中最大的元素,根据无限大的特性,我们可以得到:
xj∞>>xi∞,∀j≠ix_j^\infty>>x_i^\infty,\forall j\neq ixj>>xi,j=i进而有∑i=1nxi∞=xj∞\sum_{i=1}^{n}x_i^{\infty}=x_j^{\infty}i=1nxi=xj
∣∣x∣∣∞=(∑i=1n∣xi∣∞)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=(i=1nxi)1=(xj)1=xj
   因此我们可以说,无穷范数是x向量中最大元素的长度。


模型类型:

1、线性模型:

  • OLS(Ordinary Least Square linear regression)普通线性回归,目标函数是:
    Loss=∣∣y−Xw∣∣2 Loss = ||y-Xw|| ^2 Loss=yXw2
    其中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=∣∣y−Xw∣∣2+α∣∣w∣∣2 Loss = ||y-Xw|| ^2 + \alpha||w||^2 Loss=yXw2+αw2
    其中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=12∗n_samples∗∣∣y−Xw∣∣2+α∣∣w∣∣ Loss = \frac{1}{2*n\_samples} * ||y-Xw|| ^2 + \alpha||w|| Loss=2n_samples1yXw2+α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=12∗n_samples∗∣∣y−Xw∣∣2+α∗l1_rate∗∣∣w∣∣+0.5∗α∗(1−l1_rate)∗∣∣w∣∣2 Loss = \frac{1}{2*n\_samples} * ||y-Xw|| ^2 + \alpha * l1\_rate*||w||+0.5*\alpha*(1-l1\_rate)*||w||^{2} Loss=2n_samples1yXw2+αl1_ratew+0.5α(1l1_rate)w2
    其中,α\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看成是一个随机变量。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值