Scikit-learn section7 for cvpytorch

英文官方教程链接如下:

https://scikit-learn.org/stable/modules/linear_model.htmlhttps://scikit-learn.org/stable/modules/linear_model.html如有侵权,务必联系删除。

从这一部分开始,官网就放大招了,讲解得非常系统全面,不愧是机器学习领域的天堂,让我们一起在知识的海洋里遨游吧。我尽量讲的详细一些,实在不会的那就没办法了,只能请其他人不吝赐教了。


 我们常看到的线性模型是长这样的:

y=ax+b

不过当我们进入深度从学习的时候,我们见到的线性模型是这样的:

y=w_{}^{T}x+b

其中 w 和 x 都是行或者列为1的矩阵 ,b是常数(通常叫做偏置项)。以此类推,线性模型可以延伸到更高的维度空间。


Ordinary Least Squares

在官网上,我们第一个看到的就是 LinearRegression 。官网或者这个函数的API是这样介绍的:它拟合一个带有系数的线性模型,用以最小化数据集中可见对象和线性近似预测对象。公式如下:

参数描述
fit_interceptdefault=True,是否计算模型的截距
normalizedefault=False,当上一个参数设为True时起作用。如果为True,回归前通过减去均值并除以 L2 范数对自变量 X (有的翻译是 回归因子) 归一化 (1.2. 版本将移除)
copy_Xdefault=True,拷贝 X ,否则将被覆盖
n_jobsint ,default=None ,用来计算的 job 的数量。这只会在有充足的大问题的情况下提供加速
positivedefault=False,当设置为 True 的时候,强制回归系数为正值。仅密集数组支持此选项
类属性
.coef_权重向量 (其实就是ω),形为 (n_features,) 或者 (n_targets,n_features) 的数组。线性回归模型的评估系数。如果在 fit (y 2D) (我的理解是拟合2维的y) 时传入多个对象,那它的形状就是(n_targets,n_features) 。如果只传入一个对象,那就是一个一维的 n_feature 的长度
.rank_int ,矩阵 X 的秩,只有当矩阵是密集的时候才有
.singular_形为 (min(X,y),) 的数组。矩阵 X 的奇值,只有当矩阵是密集的时候才有
.intercept_浮点数或者形为 (n_targets,) 的数组。线性模型中的独立项。如果 fit_intercept 设为 False ,它被设为为 0.0
.n_features_in_int ,在拟合过程中特征的数量
.feature_names_in_形为(n_features_in_,) 的数组,只有当 X 有全为字符串的特征名称时才有定义
import numpy as np
from sklearn.linear_model import LinearRegression
X = np.array([[1,1],[1,2],[2,2],[2,3]])
y = np.dot(X,np.array([1,2]))+3
#y = [1 1
#     1 2 *[1 +3 #+3用到了广播
#     2 2   2]
#     2 3] 这里用了线性代数的方法解释的
print(y)
#[ 6  8  9 11]
reg = LinearRegression().fit(X,y)
score = reg.score(X,y)
print(score)
#1.0 这我不太明白怎么算出来的
print(reg.coef_)
#[1. 2.]对 X 拷贝了一份
print(reg.intercept_)
#3.000000000000001 截距,尾数是不确定度
predice = reg.predict(np.array([[3,5]]))
print(predice)
#[16.] 1*3+2*5+3

Ridge regression and classification

下一个是 Ridge 。它就是再上一个数学表达式上增加了一个惩罚项,公式如下:

 其中 α 控制收缩量,α 越大,权重越收缩,因此从而对共线性展现出更好的鲁棒性。

参数描述
alpha浮点型或者形为 (n_targets,) 的数组,default=1.0。正则化增强,必须是正的浮点数。正则化改善了为题的条件化,减少了估计值的方差。值越大,正则化越强。如果传入数组,必须在数量上与对象保持一致
fit_intercept
normalize
copy_X
max_iterint,default=None,共轭梯度解算器的求大迭代次数。
tolfloat,default=1e-3,解的精度
solverdefault='auto',解算器,有 auto、svd、aholesky、lsqr、sparse_cg、sag、saga、lbfgs。(各原理复杂,我就不在这里列了,大家自己搜一下吧)
positive
random_stateint,default=None,当 solver 为 saga 或 sag 的时候,用来打乱数据
类属性
.coef_权重向量
.intercept_
.n_iter_None 或者形为 (n_targets,) 的数组,对每个对象的迭代次数。只有 solver 为 sag 或 lsqr 的时候才有,否则为None
.n_features_in_
.feature_names_in_
import numpy as np
from sklearn.linear_model import Ridge
n_samples,n_features = 6,3
rng = np.random.RandomState(0)
y = rng.randn(n_samples)
print(y)
#[ 1.76405235  0.40015721  0.97873798  2.2408932   1.86755799 -0.97727788]
X = rng.randn(n_samples,n_features)
print(X)
#[[ 0.95008842 -0.15135721 -0.10321885]
# [ 0.4105985   0.14404357  1.45427351]
# [ 0.76103773  0.12167502  0.44386323]
# [ 0.33367433  1.49407907 -0.20515826]
# [ 0.3130677  -0.85409574 -2.55298982]
# [ 0.6536186   0.8644362  -0.74216502]]
reg = Ridge(alpha=1.0)
fit = reg.fit(X,y)
predict = reg.predict(np.array([[1,2,3]]))
print(predict)
#[0.22429211]
#这个和上面那个一模一样,就是加了个惩罚项,
#y = -0.18401152*1-0.13702453*2-0.15384216*3+1.1438791597408315

Lasso

下一个是 Lasso 。官网或者这个函数的API是这样介绍的:它是一个评估稀疏系数的线性模型。他在某些情况下很有用,因为它倾向于选择非零系数较少的解决方案,有效地减少了给定方案依赖的特征数量。在一定情况下,它可以恢复非零系数的精确集合。公式如下:

 最后一项是系数向量的 L1范数,作为惩罚项。

参数描述
alphafloat,default=1.0,乘 L1 项的常数。如果为0,那么就相当于LinearRegression,不建议这样做。
fit_intercept
normalize略,区别是除以 L1 范数
precomputedefault=False,布尔值或形为 (n_fetures,n_features) d的数组。是否使用预计算 Gram 矩阵加速计算。Gram 矩阵也可以作为参数传递。对于稀疏输入,通常设为 False 保证稀疏性。
copy_X
max_iterint,default=1000,略
tolfloat,default=1e-4,如果更新量小于tol,优化代码检查双方的间距 (dual gap) 和连续性,知道它小于 tol
warm_startdefault=False,当设为 True,重新调用上一次方案作为拟合初始化,否则,直接抹去先前的解决方案 (solution)
positive
random_stateint,default=None,选择要更新的随即特征的伪随机数生成器的种子。当 selection='random' 的时候使用。
selectiondefault='cyclic',random可选。如果设为 random,每次迭代中,一个随机系数被更新,而不是默认地按顺序在特征上循环。
类属性
.coef_
.dual_gap_浮点数或形为 (n_targets,) 的数组。给定参数 alpha,在优化结束时的 dual gap,和y的形状一样。
.sparse_coef_形为 (n_features,1) 或者 (n_targets,n_features) 的稀疏矩阵。从 .coef_ 派生的制度属性
.intercept_
.n_iter_int 或 int型列表,为达到特定容差 (精度) 的坐标下降解算器的迭代次数。
.n_features_in_
.feature_names_in_
from sklearn.linear_model import Lasso
reg = Lasso(alpha=0.1)
fit = reg.fit([[1,1],[2,2],[3,3]],[1,2,3])
print(reg.coef_)
#[0.85 0.  ]
#其他用法和前面类似,我就不列举了

这一部分还有许多数学方法细节,我也不太会,大家自己看看吧。


下面还有 Multi-task Lasso、Elastic-Net、Multi-task Elastic-Net、Least Angle Regression、LARS Lasso、Orthogonal Matching Pursuit (OMP)、Bayesian Regression、Logistic regression、Generalized Linear Regression、Stochastic Gradient Descent - SGD、Perceptron、Passive Aggressive Algorithms、Robustness regression: outliers and modeling errors、Quantile Regression、Polynomial regression: extending linear models with basis functions。(这里有的是具体的,有的是大标题) 内容太多,复杂度也随之上升,但是分析方法和上面的例子类似,大家自己学习吧。


如果有会的前辈、同辈、后辈,还望不吝赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值