https://blog.csdn.net/u013019431/article/details/79982258
?在逻辑回归中,由于做了一次压缩所以没办法做正态分布的似然估计,这里采用的是做二项分布的假设。
sklearn.linear_model.LogisticRegression
参数
- penalty. ‘l1’ or ‘l2’, default:‘l2’
- solver. {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’(0.19加入)}
优化方式:牛顿法、lbfgs(拟牛顿法)、liblinear(默认值,一个用于线性分类的库)、sag(随机平均梯度下降)
1.对于小数据集,liblinear效果较好,对于较大的数据集,sag和saga则表现的更好(随机梯度下降,收敛会更快)
2.sag,saga快速收敛的条件是特征范围近似,也就是需要实现对数据进行预处理才能更快地进行收敛(基于距离进行分类的分类器都最好实现进行数值范围的缩放)
3.‘newton-cg’, ‘lbfgs’ and ‘sag’ only handle L2 penalty, whereas‘liblinear’ and ‘saga’ handle L1 penalty.也就是说牛顿法,拟牛顿法,随机平均梯度下降只能使用L2正则,因为L2正则可导,但是L1正则不可导(绝对值),liblinear是使用坐标下降的方法来做的,所以可以用来求导l1正则(l1正则优化还可以使用近端梯度下降算法PGD),saga不是很了解 - dual : bool, default: False 是否选择对偶方程求解,默认为false,
对偶方程专门用于l2正则以及solver为liblinear时 当样本数大于特征数时,优先选择设置dual为false - float, default: 1.0
正则项系数的倒数,也就是说C越大,那么正则项系数越小,惩罚也就越小,相反,C越小,那么惩罚强度也就越大,必须为正数 - fit_intercept : bool, default: True
决定在进行决策函数计算时是否使用截距 - intercept_scaling : float, default 1.
该参数只有在fit_interept为True且solver为liblinear时有用,x样本将变为[x,intercept_scaling] - max_iter : int, default: 100
- multi_class : str, {‘ovr’, ‘multinomial’}, default: ‘ovr’
- n_jobs : int, default: 1
任务并行数(在ovr策略时使用) - **?**verbose : int, default: 0
- **?**warm_start : bool, default: False
热启动,也就是每次的初始化参数阶段,如果设置为True可以使用上一轮fit拟合后的结果作为初始化. - random_state 系统伪随机数字
属性
- coef_: array, shape (1, n_features) or (n_classes, n_features)
系数,如果有多分类就会是n_classes行的系数 - intercept_ : array, shape (1,) or (n_classes,)
截距,二分类就只有一个,多分类就会有n个 - n_iter_ : array, shape (n_classes,) or (1, )
梯度下降中迭代的次数(不是很确定,但是看字面意思是这样,也是没用过)
方法
sklearn.linear_model.LogisticRegressionCV
参数
属性
https://www.cnblogs.com/pinard/p/6018889.html
坐标下降法求极值过程:
- 坐标轴下降法在每次迭代中在当前点处沿一个坐标方向进行一维搜索,固定其他的坐标方向,找到一个函数的局部极小值。而梯度下降总是沿着梯度的负方向求函数的局部最小值。
- 坐标轴下降优化方法是一种非梯度优化算法。在整个过程中依次循环使用不同的坐标方向进行迭代,一个周期的一维搜索迭代过程相当于一个梯度下降的迭代。
- 梯度下降是利用目标函数的导数来确定搜索方向的,该梯度方向可能不与任何坐标轴平行。而坐标轴下降法法是利用当前坐标方向进行搜索,不需要求目标函数的导数,只按照某一坐标方向进行搜索最小值。
- 两者都是迭代方法,且每一轮迭代,都需要O(mn)的计算量(m为样本数,n为系数向量的维度)