逻辑回归

导入:sklearn.linear_model.LogisticRegression

LogisticRegression(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True,
                   intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs',
                   max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None,
                   l1_ratio=None)

模型主要参数

LogisticRegression模型的主要参数及含义如下表:

模型参数 含义 说明
penalty=’l2’ 正则项 广义线性模型的正则项,可选值包括L1正则项’l1’、L2正则项’l2’、复合正则’elasticnet’(包含L1、L2)和
无正则项None,默认值为’l2’。正则项的选择和求解器有联系(详见solver参数)。
dual=False 对偶问题 默认值False,可设为True将问题转换为对偶问题,
只适用于采用L2正则化且为为线性求解器(liblinear)的情况。
当样本数少于特征数时,推荐为True。
tol=1e-4 迭代阈值 求解器迭代求解时,停止迭代的阈值,默认为1e-4。
C=1.0 正则化系数倒数 正则化强度的逆,必须是大于0的浮点数。与支持向量机一样,值越小表示正则化越强。
fit_intercept=True 是否添加截距项 默认为True,指定是否应该向决策函数中添加常数项(也称为偏差或截距)
intercept_scaling=1 预设偏置值 广义线性模型中预设的截距,仅当求解器为’liblinear’同时fit_intercept为True时生效。
注意:该偏置值会作为新的特征计算其系数,因此也会计入L1和L2正则。
class_weight=None 样本权重 用于处理样本不均衡问题,默认值为None,即各类别样本权重一样,可通过设置字典定义权重系数,
形式为{class label: weight},或设为’balanced’,即根据样本数自动计算权重。
若在fit函数中设置sample_weight参数,两者作用会叠加。
random_state=None 随机种子 模型中的随机性主要体现在求解器迭代时对样本的随机选取,
适用于当求解器为’liblinear’、’sag’、’saga’时。
slover=’lbfgs’ 求解器 sklearn中共提供了5种优化求解器,分别为’liblinear’、’sag’、’saga’、’newton-cg’和’lbfgs’。
各求解器的适用条件不同,具体见后文。默认值为’lbfgs’。
max_iter=100 最大迭代步数 ‘newton-cg’、’sag’和’lbfgs’ 求解器所需要的最大迭代步数
multi_class=’auto’ 多分类策略 取值可为’ovr’、’multinomial’和’auto’。
‘ovr’即采用’one vs rest’策略对二分类模型进行集成;
‘multinomial’即采用’multinomial loss’直接求解多分类问题。
默认为’auto’,其会在两分类问题或求解器为’liblinear’时选择’ovr’,
而其它情况下选择’multinomial’。
verbose=0 对于’liblinear’和’lbfgs’求解器,将verbose设置为任意正数
warm_start=False 当设置为True时,重新使用前一个调用的fit方法作为初始化,
否则,只擦除前一个解决方案。对’liblinear’求解器无效
l1_ratio=None 惩罚权重系数 L1惩罚和L2惩罚的权重系数,取值空间为0-1。
若为0,则相当于为L2惩罚;若为1,则为L1惩罚,否则为Elasticnet惩罚。

求解器选择说明

模型中求解器(slover)的选择会影响到模型的效果,明白各个求解算法的适用性就很重要,如下表列出了求解器算法的相关参数说明。

对应参数 liblinear sag saga newton-cg lbfgs
求解算法 solver 开源的liblinear库,
采用坐标轴下降法
随机平均梯度下降 线性收敛的随机平均梯度下降,
特别适用于稀疏多项逻辑回归
牛顿法 拟牛顿法
惩罚适用性 penalty, C, l1_ratio 适用L1和L2正则 仅适用于L2正则 适用于L1和L2正则 仅适用于L2正则 仅适用于L2正则
截距适用性 fit_intercept,
ntercept_scaling
适用 —- —- —- —-
数据适用性 —- 小数据集 大数据集,小数据集会采样过少 大数据集 中等数据集 中等数据集
多分类适用性 multi_class,
class_weight
仅适用’ovr’策略 ‘ovr’和’multinomial loss’
策略均适用,推荐后者
<< << <<
收敛性 max_iter —- 需设置 —- 需设置 需设置
对偶问题转换 dual 当L2正则,且数据量
小于特征数时适用
—- —- —- —-
随机性 random_state 有作用 有作用 —- —- —-
其他 —- —- 支持增量学习 —- —- —-
正则化 算法 适用场景
L1 liblinear liblinear适用于小数据集;如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑L1正则化;
如果模型的特征非常多,希望一些不重要的特征系数归零,从而让模型系数稀疏化的话,也可以使用L1正则化。
L2 liblinear libniear只支持多元逻辑回归的OvR,不支持MvM,但MVM相对精确。
L2 lbfgs/newton-cg/sag 较大数据集,支持one-vs-rest(OvR)和many-vs-many(MvM)两种多元逻辑回归。
L2 sag 如果样本量非常大,比如大于10万,sag是第一选择;但不能用于L1正则化。

模型主要方法

模型方法 描述
fit(X, y, sample_weight=None) 拟合训练数据集,可通过sample_weight参数设置权重
predict(X) 预测测试数据集,返回对测试数据集的预测结果
predict_proba(X) 返回预测数据的各分类概率预测值
decision_function(X) 预测样本的置信度
get_params(deep=True) 返回此模型的参数,格式为字典
score(X, y, sample_weight=None) 返回给定测试数据集和标签的准确度

模型主要属性

属性 描述
classes_ 分类器已知的类标签列表
coef_ 各特征前的线性系数,如果有截距项也包括该项前的系数。在样本做归一化的前提下,可视作特征的重要性。
intercept_ 如果fit_intercept设为False,则该值为0,当求解器为’liblinear’时,可输出此值
nfeatures_in 拟合的特征个数
niter 所有类的实际迭代次数。如果是二分类或多分类,则只返回1个元素。对于线性求解器,只给出了所有类的最大迭代次数。

决策树

导入:sklearn.tree.DecisionTreeClassifier

DecisionTreeClassifier(*, criterion='gini', splitter='best', max_depth=None, min_samples_split=2,
                       min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None,
                       max_leaf_nodes=None, min_impurity_decrease=0.0, class_weight=None, ccp_alpha=0.0)

模型主要参数

模型参数 含义 说明
criterion=’gini’ 特征选择标准 可选值为’gini’和’entropy’,分别表示基尼指数、信息增益
splitter=’best’ 特征划分点选择标准 可选值为’best’和’random’,用于在每个节点上选择分割的策略。
max_depth=None 树的最大深度 如果为None,则节点将展开,直到所有叶子都是纯的;
或直到所有叶子包含的样本小于最小拆分样本。
min_samples_split=2 最小拆分的样本数 拆分内部节点所需的最小样本数
如果是整数,则直接作为最小拆分样本的数目
如果是浮点数,则ceil(min_samples_split * n_samples)
作为最小拆分样本的数目
min_samples_leaf=1 叶节点最小样本数 在任意深度上的分裂点,只有在每个分支上至少有min_samples_leaf样本时才会被考虑。
这可能有平滑模型的效果,特别是在回归中。
如果是整数,则直接作为最小拆分样本的数目
如果是浮点数,则ceil(min_samples_leaf * n_samples)作为叶节点最小样本数
min_weight_fraction_leaf=0.0 叶节点最小权重 一个叶节点所需要的权重总和中的最小权重。
没有提供样本权重时,样本权重相同。
max_features=None 特征数量 寻找最佳分割时考虑的特征数量。
如果是整数,则作为每次分割时的最大特征数
如果是浮点数,则int(max_features * n_features)作为分割时的特征数
如果是’auto’,则max_features=sqrt(n_features)
如果是’sqrt’,则max_features=sqrt(n_features)
如果是’log2’,则max_features=log2(n_features)
如果是None,则max_features=n_features
random_state=None 随机状态 控制分类器的随机性
max_leaf_nodes=None 最大叶节点数 通过限制最大叶子节点数,可以防止过拟合,默认是”None”,即不限制最大的叶子节点数。
如果加了限制,算法会建立在最大叶子节点数内最优的决策树。
如果特征不多,可以不考虑这个值,但是如果特征分成多的话,
可以加以限制,具体的值可以通过交叉验证得到。
min_impurity_decrease=0.0 节点划分最小不纯度 —-
class_weight=None 类别权重 指定样本各类别的的权重,主要是为了防止训练集某些类别的样本过多,
导致训练的决策树过于偏向这些类别。这里可以自己指定各个样本的权重,
或者用’balanced’,如果使用’balanced’,则算法会自己计算权重,
样本量少的类别所对应的样本权重会高。如果样本类别分布没有明显的偏倚,
则可以不管这个参数,选择默认的None
ccp_alpha=0.0 用于最小成本-复杂度修剪的复杂度参数。
将选择成本复杂度最大且小于ccp_alpha的子树。默认情况下,不进行修剪

模型属性

属性 描述
classes_ 类标签或列表
featureimportances 返回特征的重要性
maxfeatures 最大特征数
nclasses 类别的数量
n_features_in 特征个数
tree_ 底层的Tree对象

模型主要方法

模型方法 说明
apply(X, check_input=True) 返回每个被预测为的叶子的样本索引。
fit(X, y, sample_weight=None, check_input=True) 从训练集(X, y)构建决策树分类器。
get_depth() 返回决策树的深度。
get_n_leaves() 返回决策树的叶节点数。
get_params(deep=Tree) 获取这个分类器的参数
predict(X) 预测X的类别。
predict_proba(X) 预测输入样本X的类别概率。
score(X, y, sample_weight=None) 返回给定测试数据和标签的准确度。

支持向量机SVC

导入:sklearn.svm.SVC

SVC(*, C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True,
    probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False,
    max_iter=- 1, decision_function_shape='ovr', break_ties=False, random_state=None)

基于libsvm实现。拟合的时间尺度至少与样本的数量是二次的,可能是不切实际的超过数万个样本。对于大数据集,考虑使用线性svc或SGDClassifier代替。

模型主要参数

模型参数 含义 说明
C=1.0 惩罚项 float类型,C越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,
但是泛化能力降低,也就是对测试数据的分类准确率降低。相反,减小C的话,
容许训练样本中有一些误分类错误样本,泛化能力强。
对于训练样本带有噪声的情况,一般采用后者,把训练样本集中错误分类的样本作为噪声。
kernel=’rbf’ 核函数 可选参数为:
‘linear’ :线性核函数
‘poly’ :多项式核函数
‘rbf’ :径像核函数/高斯核
‘sigmod’ :sigmod核函数
‘precomputed’:核矩阵,precomputed表示自己提前计算好核函数矩阵,
此时算法内部就不再用核函数计算核矩阵,而是直接用你给的核矩阵,核矩阵需要为n*n。
degree=3 多项式核函数的阶数 此参数只对多项式核函数有用,是指多项式核函数的阶数n,
如果给的核函数参数是其他核函数,则会自动忽略该参数。
gamma=’scale’ 核函数系数 只对’rbf’,’poly’,’sigmod’有效。
如果gamma为’auto’,代表其值为样本特征数的倒数,即1/n_features。
coef0=0.0 核函数的独立项 只对’poly’和’sigmod’核函数有用,是指其中的参数c。
shrinking=True 是否采用启发式收缩方式 —-
probability=False 是否启用概率估计 必须在调用fit()之前启用,并且会让fit()方法速度变慢。
tol=0.001 svm停止训练的误差精度
cache_size=200 内存大小 指定训练所需要的内存,以MB为单位,默认为200MB
class_weight=None 类别权重 给每个类别分别设置不同的惩罚参数C,如果为None,则所有类别都相同,
即前面参数指出的参数C。如果给定参数’balance’,
则使用y的值自动调整与输入数据中的类频率成反比的权重。
verbose=False 是否启用详细输出 此设置利用libsvm中的每个进程运行时设置,如果启用,
可能无法在多线程上下文中正常工作。一般情况都设为False,不用管它。
max_iter=-1 最大迭代次数 默认为-1,表示不限制
decision_function_shape=’ovr’ 决策函数类型 可选参数’ovo’和’ovr’。
‘ovo’表示one vs one,’ovr’表示one vs rest。
random_state=None 随机种子 伪随机数发生器的种子,在混洗数据时用于概率估计

模型属性

属性 描述
classweight 每个类的参数C的乘数。基于class_weight参数计算。
classes_ 类标签
coef_ 当kernel=’linear’时,分配给特征的权重
dualcoef 决策函数中支持向量的对偶系数
fitstatus 0则表示成功拟合,1表示其他(抛出警告)
intercept_ 决策函数中的常数项
nfeatures_in 拟合时的特征数
support_ 支持向量的指数
supportvectors 支持向量
shapefit 训练向量X的数组维数

模型方法

模型方法 说明
decision_function(X) 样本X的决策函数
fit(X, y, sample_weight=None) 以给定的训练数据拟合支持向量机模型
get_params(deep=Tree) 获取分类器的参数
predict(X) 预测X样本的分类
predict_proba(X) 预测输入样本X的类别概率。
score(X, y, sample_weight=None) 返回给定测试数据和标签的准确度。

支持向量机LinearSVC

导入:sklearn.svm.LinearSVC

LinearSVC(penalty='l2', loss='squared_hinge', *, dual=True, tol=0.0001,
          C=1.0, multi_class='ovr', fit_intercept=True, intercept_scaling=1,
          class_weight=None, verbose=0, random_state=None, max_iter=1000)

线性支持向量分类器。类似于参数kernel=linear的SVC,但它是基于线性而不是libsvm实现的,因此在惩罚和损失函数的选择上有更大的灵活性,对大样本的扩展性更好。这个类既支持密集输入,也支持稀疏输入,而且多类支持是根据one-vs-the-rest模式处理的。

模型主要参数

模型参数 含义 说明
penalty=’l2’ 正则项 l2正则是SVC中使用的标准。l1引出稀疏的coef_向量。
loss=’squared_hinge’ 损失函数 可选值为’hinge’、’squared_hinge’。
‘hinge’是标准的SVM损失函数
‘squared_hinge’是hinge损失函数的平方。
penalty='l1'loss='hinge'的参数组合是不支持的。
dual=True 对偶问题 选择算法来解决对偶或原始的优化问题。
当样本数大于特征数时,推荐设为False
tol=1e-4 误差精度 停止训练的条件
C=1.0 正则化参数 正则化的强度与C成反比,必须严格为正
multi_class=’ovr’ 多分类策略 如果y包含两个以上的类,则多类策略为’ovr’或’crammer_singer’
如果选择’crammer_singer’,则忽略losspenaltydual参数。
fit_intercept=True 截距项 是否计算模型的截距。
如果设置为False,将不会在计算中使用截距
intercept_csaling=1 —- —-
class_weight=None 类别权重 将SVC的类别i的参数C设置为class_weight[i]*C
如果没有给出,所有类的权重都应该是1
verbose=0 是否启用详细输出 此设置利用了liblinear中的每个进程运行时设置,
如果启用该设置,可能无法在多线程上下文中正常工作。
random_state=None 随机种子 伪随机数发生器的种子,在混洗数据时用于概率估计
max_iter=1000 最大迭代次数 —-

模型属性

属性 描述
coef_ 分配给特征的权重
intercept_ 决策函数中的常数项
classes_ 类标签
nfeatures_in 拟合时的特征数
niter 最大迭代次数

模型方法

模型方法 说明
decision_function(X) 预测样本的置信度
fit(X, y, sample_weight=None) 以给定的训练数据拟合支持向量机模型
get_params(deep=Tree) 获取分类器的参数
predict(X) 预测X样本的分类
score(X, y, sample_weight=None) 返回给定测试数据和标签的准确度。
sparsify() 将系数矩阵转换为稀疏格式

K-最近邻KNN

导入:sklearn.neighbors.KNeighborsClassifier

KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto',
                     leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None)

模型主要参数

模型参数 含义 说明
n_neighbors=5 K 选取最近的K个样本点
weights=’uniform’ 权重函数 可选值为’uniform’、’distance’或可调用的函数。uniform表示临近点的权重都是一样的;distance表示不相等的权重,距离近的点比距离远的点的权重大。传入可调用的函数,接收距离的数组,返回包含权重的相同形状的数组。
algorithm=’auto’ 算法 快速k近邻搜索算法,可以理解为算法自动决定合适的搜索算法。可取值为ball_tree、kd_tree、brute,brute是指线性扫描,当训练集很大时,计算非常耗时。kd_tree是构造kd树存储数据以便对其进行快速检索的树形数据结构,kd树也是数据结构中的二叉树;以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高。ball_tree是为了克服kd树高维失效而发明的,其构造过程是以质心C和半径r分割样本空间,每个节点是一个超球体。
leaf_size=30 叶子大小 是指构造的kd树和ball树的大小。这个值的设置会影响树构建的速度和搜索速度,同样也影响着存储树所需的内存大小,需要根据问题的性质选择最优的大小。
p=2 距离 距离度量公式。对任意的p,使用闵可夫斯基距离,默认为2,也就是欧式距离;也可以设置为1,使用曼哈顿距离。
metric=’minkowski’ 距离度量 用于树的距离度量,为字符串或可调用的函数。默认度量标准是闵可夫斯基,并且P=2等同于标准欧氏距离。如果度量标准是“预先计算的”,则假定X是距离矩阵,并且必须在适合期间是正方形。X可以是稀疏图形,在这种情况下,只能被视为“非零”元素被视为邻居。
metric_params=None 参数 度量函数的其他关键字参数
n_jobs=None 并行 邻居点搜索的并行作业数。None表示1,-1表示CPU的所有cores都用于并行工作

模型属性

属性 描述
classes_ 分类器的类标签
effectivemetric 使用的距离度量。它和metric参数相同
effectivemetric_params 距离度量函数额外的参数
nfeatures_in 拟合时的特征数
featurenames_in 拟合中的标签名,仅在数据集X具有全字符串的功能名称时才定义
nsamples_fit 拟合数据的样本数
outputs2d 当标签Y的形状是(n_samples,)或(n_samples,1)为False,否则为True

模型方法

模型方法 说明
fit(X, y) 从训练数据集拟合K最近邻分类器
get_params([deep]) 获取分类器的参数
kneighbors([X, n_neighbors, return_distance]) 查找K个临近点
kneighbors_graph([X, n_neighbors, mode]) 计算X中K临近点的加权图
predict(X) 预测X中的类别
predict_proba(X) 返回X中预测的类别概率
score(X, y[, sample_weight]) 对测试数据X返回平均准确率
set_params(**params) 给分类器设置参数

参考文章:

  1. sklearn,LogisticRegression
  2. guofei_fly,sklearn中的LogisticRegression模型
  3. ChZCC,[SKlearn逻辑回归小练习](https://www.jianshu.com/p/e51e92a01a9c)