sklearn常用模型使用小结
逻辑回归
导入: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
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
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’,则忽略 loss、penalty和dual参数。 |
| 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) | 给分类器设置参数 |
参考文章:
- sklearn,LogisticRegression
- guofei_fly,sklearn中的LogisticRegression模型
- ChZCC,[SKlearn逻辑回归小练习](https://www.jianshu.com/p/e51e92a01a9c)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Free!
评论



