sklearn常见算法简介
Logistic Regression
Background
Maximum Likelihood Logistic Function Normal Distribution Regularization Overfitting
算法
将原本输出结果范围可以非常大的θTX 通过sigmoid函数映射到(0,1),从而完成概率的估测。而直观地在二维空间理解逻辑回归,是sigmoid函数的特性,使得判定的阈值能够映射为平面的一条判定边界,随着特征的复杂化,判定边界可能是多种多样的,但是它能够较好地把两类样本点分隔开,解决分类问题。
代价函数是所有模型误差的平方和,也就是损失函数的总和的平均。
正则化是为了解决过拟合的情况,
参数详解
class sklearn.linear_model.LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='liblinear', max_iter=100, multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)
参数名 |
取值 |
作用 |
penalty |
str, ‘l1’ or ‘l2’ |
penalty参数可选择的值为"l1"和"l2",分别对应L1的正则化和L2的正则化,默认是L2的正则化。如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑L1正则化,如果模型的特征非常多,我们希望一些不重要的特征系数归零,从而让模型系数稀疏化的话,也可以使用L1正则化。会影响sover函数的选择,当L1时,solver只能为liblinear。 |
dual |
bool |
Dual只适用于正则化相为l2 liblinear的情况,通常样本数大于特征数的情况下,默认为False |
tol |
float, optional |
迭代终止判据的误差范围。
|
C |
float,default 1.0 |
正则化系数的倒数,越小对应越强的正则化。 |
class_weight |
dict or ‘balanced’, default: None |
class_weight参数用于标示分类模型中各种类型的权重,不输入,即所有类型的权重一样。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者我们自己输入各个类型的权重。 第一种是误分类的代价很高。比如对合法用户和非法用户进行分类,将非法用户分类为合法用户的代价很高,我们宁愿将合法用户分类为非法用户,这时可以人工再甄别,但是却不愿将非法用户分类为合法用户。这时,我们可以适当提高非法用户的权重。 第二种是样本是高度失衡的,比如我们有合法用户和非法用户的二元样本数据10000条,里面合法用户有9995条,非法用户只有5条,如果我们不考虑权重,则我们可以将所有的测试集都预测为合法用户,这样预测准确率理论上有99.95%,但是却没有任何意义。 可以选择balanced,让类库自动提高非法用户样本的权重。
|
random_state |
int, RandomState instance or None, optional, default: None |
对正则化算法为sag, liblinear时有用 |
solver |
{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’} |
a) liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。 b) lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。 c) newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。 d) sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候,SAG是一种线性收敛算法,这个速度远比SGD快。 newton-cg, lbfgs和sag这三种优化算法时都需要损失函数的一阶或者二阶连续导数,因此不能用于没有连续导数的L1正则化,只能用于L2正则化。而liblinear则既可以用L1正则化也可以用L2正则化。同时,sag每次仅仅使用了部分样本进行梯度迭代,所以当样本量少的时候不要选择它,而如果样本量非常大,比如大于10万,sag是第一选择。但是sag不能用于L1正则化。 |
multi_class (把二分问题扩展为多分问题) |
str, {‘ovr’, ‘multinomial’}, default: ‘ovr’ |
OvR相对简单,但分类效果相对略差(这里指大多数样本分布情况,某些样本分布下OvR可能更好)。而MvM分类相对精确,但是分类速度没有OvR快。选择ovr,则4种损失函数的优化方法liblinear,newton-cg,lbfgs和sag都可以选择。选择multinomial,则只能选择newton-cg, lbfgs和sag。 |
n_job |
int, default: 1 |
如果multi_class ='ovr'“,并行数等于CPU内核数量。当“solver”设置为“liblinear”时,无论是否指定“multi_class”,该参数将被忽略。如果给定值-1,则使用所有内核。 |
max_iter |
int,optional |
仅在正则化优化算法为newton-cg, sag和lbfgs 才有用,算法收敛的最大迭代次数。 |
Suport Vector Machine
BackGround
Convex quadratic programming Duality kernel method
算法原理
https://blog.youkuaiyun.com/u012990623/article/details/40272619
核函数
解决原始空间的线性不可分,把数据映射到高维空间,使得数据在高维空间内线性可分,低维计算,高维分类。
数据处理时需要进行归一化(加快收敛速度,使支持向量变多,分类更加准确)
核函数:计算两个向量在隐式映射过后的空间中的内积的函数
主要有线性核,主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,其参数少速度快,对于线性可分数据,其分类效果很理想,因此我们通常首先尝试用线性核函数来做分类。
多项式核,多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。
高斯核,高斯核函数是一种局部性强的核函数,其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,无论大样本还是小样本都有比较好的性能,而且其相对于多项式核函数参数要少,因此大多数情况下在不知道用什么核函数的时候,优先使用高斯核函数。
sigmoid核,采用sigmoid核函数,支持向量机实现的就是一种多层神经网络。
如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM。
如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数。
SVM分类库
参数 |
LinearSVC |
SVC |
NuSVC |
惩罚系数C |