英文官方教程链接如下:
从这一部分开始,官网就放大招了,讲解得非常系统全面,不愧是机器学习领域的天堂,让我们一起在知识的海洋里遨游吧。我尽量讲的详细一些,实在不会的那就没办法了,只能请其他人不吝赐教了。
我们常看到的线性模型是长这样的:
不过当我们进入深度从学习的时候,我们见到的线性模型是这样的:
其中 w 和 x 都是行或者列为1的矩阵 ,b是常数(通常叫做偏置项)。以此类推,线性模型可以延伸到更高的维度空间。
Ordinary Least Squares
在官网上,我们第一个看到的就是 LinearRegression 。官网或者这个函数的API是这样介绍的:它拟合一个带有系数的线性模型,用以最小化数据集中可见对象和线性近似预测对象。公式如下:
参数 | 描述 |
fit_intercept | default=True,是否计算模型的截距 |
normalize | default=False,当上一个参数设为True时起作用。如果为True,回归前通过减去均值并除以 L2 范数对自变量 X (有的翻译是 回归因子) 归一化 (1.2. 版本将移除) |
copy_X | default=True,拷贝 X ,否则将被覆盖 |
n_jobs | int ,default=None ,用来计算的 job 的数量。这只会在有充足的大问题的情况下提供加速 |
positive | default=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_iter | int,default=None,共轭梯度解算器的求大迭代次数。 |
tol | float,default=1e-3,解的精度 |
solver | default='auto',解算器,有 auto、svd、aholesky、lsqr、sparse_cg、sag、saga、lbfgs。(各原理复杂,我就不在这里列了,大家自己搜一下吧) |
positive | 略 |
random_state | int,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范数,作为惩罚项。
参数 | 描述 |
alpha | float,default=1.0,乘 L1 项的常数。如果为0,那么就相当于LinearRegression,不建议这样做。 |
fit_intercept | 略 |
normalize | 略,区别是除以 L1 范数 |
precompute | default=False,布尔值或形为 (n_fetures,n_features) d的数组。是否使用预计算 Gram 矩阵加速计算。Gram 矩阵也可以作为参数传递。对于稀疏输入,通常设为 False 保证稀疏性。 |
copy_X | 略 |
max_iter | int,default=1000,略 |
tol | float,default=1e-4,如果更新量小于tol,优化代码检查双方的间距 (dual gap) 和连续性,知道它小于 tol |
warm_start | default=False,当设为 True,重新调用上一次方案作为拟合初始化,否则,直接抹去先前的解决方案 (solution) |
positive | 略 |
random_state | int,default=None,选择要更新的随即特征的伪随机数生成器的种子。当 selection='random' 的时候使用。 |
selection | default='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。(这里有的是具体的,有的是大标题) 内容太多,复杂度也随之上升,但是分析方法和上面的例子类似,大家自己学习吧。
如果有会的前辈、同辈、后辈,还望不吝赐教。