监督学习的模型,参数,方法

(一)朴素贝叶斯:

from sklearn.naive_bayes import MultinomialNB

model = MultinomialNB(alpha = 1.0, fit_prior = True, class_prior = None )

参数:

alpha:float , 可选(默认值 = 1.0),平滑参数,0表示不平滑

fit_prior:布尔值,可选(默认 = True),是否学习类先验概率。如果=False,则会使用同一的优先级

参数  \ theta_y 由最大似然的平滑版本估算,即相对频率计数:

\ hat {\ theta} _ {yi} = \ frac {N_ {yi} + \ alpha} {N_y + \ alpha n}

N_ {yi} = \ sum_ {x \ in T} x_i 特征一世 出现在和 训练集的一个样本类  中的  次数  在哪里  Ť,并且  N_ {y} = \ sum_ {i = 1} ^ {| T |} N_ {yi} 是类的所有特征的总数  和

平滑先验  \ alpha \ ge 0 考虑了学习样本中不存在的特征并且在进一步的计算中防止了零概率。设置  \ alpha = 1 称为拉普拉斯平滑,而  \ alpha <1 称为Lidstone平滑。


(二)k近邻:

from sklearn.naive_neighbors import KNeighborsClasssifier

model = KNeighborsClassifier(n_neighbors = 5weights ='uniform'algorithm ='auto'leaf_size = 30p = 2metric ='minkowski'metric_params = Nonen_jobs = 1** kwargs )

参数:

n_neighbors:近邻的数量

weights:权重,可选:1,'uniform':统一的权重。每个元素的权重都是平等的

                                           2,‘distance’:权重点的距离的倒数。在这种情况下,查询点的较近的邻居比远离的邻居具有更大的影响。

                                           3,[可调用]:一个用户定义的函数,它接受一组距离,并返回一个包含权重的相同形状的数组。

algorithm {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’},用于计算最近邻居的算法:'ball_tree'将使用 BallTree

                                                                                                                          'kd_tree'将使用KDTree

                                                                                                                          'brute'将使用蛮力搜索

                                                                                                                          'auto'将尝试根据传递给fit方法的值决定最适合的算法

                                                                                                                         注意:你和洗漱输入将使用蛮力覆盖此参数的设置

leaf_size:int,可选(默认值 = 30)。叶子大小传递给BallTree或KDTree。这会影响构建和查询的速度,以及存储树所需的内存。最佳值取决                                                                于问题的性质。

p:整数,可选(默认值= 2)

Minkowski度量的功率参数。当p = 1时,这相当于使用manhattan_distance(l1)和euclidean_distance(l2)(对于p = 2)。对于任意p,使用minkowski_distance(l_p)。

公制:字符串或可调用,默认'minkowski'

用于树的距离度量。默认度量是minkowski,并且p = 2相当于标准欧几里德度量。请参阅DistanceMetric类的文档以获取可用指标的列表。

metric_params:dict,可选(默认=无)

度量函数的其他关键字参数。

n_jobs:int,可选(默认值= 1)

运行邻居搜索的并行作业数量。如果-1,则作业数量设置为CPU内核数量。不影响fit方法。


(三)逻辑回归:

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()

有14个参数:

  • penalty:惩罚项,str类型,可选参数为l1和l2,默认为l2。用于指定惩罚项中使用的规范。newton-cg、sag和lbfgs求解算法只支持L2规范。L1G规范假设的是模型的参数满足拉普拉斯分布,L2假设的模型参数满足高斯分布,所谓的范式就是加上对参数的约束,使得模型更不会过拟合(overfit),但是如果要说是不是加了约束就会好,这个没有人能回答,只能说,加约束的情况下,理论上应该可以获得泛化能力更强的结果。
  • dual:对偶或原始方法,bool类型,默认为False。对偶方法只用在求解线性多核(liblinear)的L2惩罚项上。当样本数量>样本特征的时候,dual通常设置为False。
  • tol:停止求解的标准,float类型,默认为1e-4。就是求解到多少的时候,停止,认为已经求出最优解。
  • c:正则化系数λ的倒数,float类型,默认为1.0。必须是正浮点型数。像SVM一样,越小的数值表示越强的正则化。
  • fit_intercept:是否存在截距或偏差,bool类型,默认为True。
  • intercept_scaling:仅在正则化项为”liblinear”,且fit_intercept设置为True时有用。float类型,默认为1。
  • class_weight:用于标示分类模型中各种类型的权重,可以是一个字典或者’balanced’字符串,默认为不输入,也就是不考虑权重,即为None。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者自己输入各个类型的权重。举个例子,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9,1:0.1},这样类型0的权重为90%,而类型1的权重为10%。如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。当class_weight为balanced时,类权重计算方法如下:n_samples / (n_classes * np.bincount(y))。n_samples为样本数,n_classes为类别数量,np.bincount(y)会输出每个类的样本数,例如y=[1,0,0,1,1],则np.bincount(y)=[2,3]。 
    • 那么class_weight有什么作用呢? 
      • 在分类模型中,我们经常会遇到两类问题:
      • 第一种是误分类的代价很高。比如对合法用户和非法用户进行分类,将非法用户分类为合法用户的代价很高,我们宁愿将合法用户分类为非法用户,这时可以人工再甄别,但是却不愿将非法用户分类为合法用户。这时,我们可以适当提高非法用户的权重。
      • 第二种是样本是高度失衡的,比如我们有合法用户和非法用户的二元样本数据10000条,里面合法用户有9995条,非法用户只有5条,如果我们不考虑权重,则我们可以将所有的测试集都预测为合法用户,这样预测准确率理论上有99.95%,但是却没有任何意义。这时,我们可以选择balanced,让类库自动提高非法用户样本的权重。提高了某种分类的权重,相比不考虑权重,会有更多的样本分类划分到高权重的类别,从而可以解决上面两类问题。
  • random_state:随机数种子,int类型,可选参数,默认为无,仅在正则化优化算法为sag,liblinear时有用。
  • solver:优化算法选择参数,只有五个可选参数,即newton-cg,lbfgs,liblinear,sag,saga。默认为liblinear。solver参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择,分别是: 
    • liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
    • lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
    • newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
    • sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。
    • saga:线性收敛的随机优化算法的的变重。
    • 总结: 
      • liblinear适用于小数据集,而sag和saga适用于大数据集因为速度更快。
      • 对于多分类问题,只有newton-cg,sag,saga和lbfgs能够处理多项损失,而liblinear受限于一对剩余(OvR)。啥意思,就是用liblinear的时候,如果是多分类问题,得先把一种类别作为一个类别,剩余的所有类别作为另外一个类别。一次类推,遍历所有类别,进行分类。
      • newton-cg,sag和lbfgs这三种优化算法时都需要损失函数的一阶或者二阶连续导数,因此不能用于没有连续导数的L1正则化,只能用于L2正则化。而liblinear和saga通吃L1正则化和L2正则化。
      • 同时,sag每次仅仅使用了部分样本进行梯度迭代,所以当样本量少的时候不要选择它,而如果样本量非常大,比如大于10万,sag是第一选择。但是sag不能用于L1正则化,所以当你有大量的样本,又需要L1正则化的话就要自己做取舍了。要么通过对样本采样来降低样本量,要么回到L2正则化。
      • 从上面的描述,大家可能觉得,既然newton-cg, lbfgs和sag这么多限制,如果不是大样本,我们选择liblinear不就行了嘛!错,因为liblinear也有自己的弱点!我们知道,逻辑回归有二元逻辑回归和多元逻辑回归。对于多元逻辑回归常见的有one-vs-rest(OvR)和many-vs-many(MvM)两种。而MvM一般比OvR分类相对准确一些。郁闷的是liblinear只支持OvR,不支持MvM,这样如果我们需要相对精确的多元逻辑回归时,就不能选择liblinear了。也意味着如果我们需要相对精确的多元逻辑回归不能使用L1正则化了。
  • max_iter:算法收敛最大迭代次数,int类型,默认为10。仅在正则化优化算法为newton-cg, sag和lbfgs才有用,算法收敛的最大迭代次数。
  • multi_class:分类方式选择参数,str类型,可选参数为ovr和multinomial,默认为ovr。ovr即前面提到的one-vs-rest(OvR),而multinomial即前面提到的many-vs-many(MvM)。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上。 
    • OvR和MvM有什么不同*?* 
      • OvR的思想很简单,无论你是多少元逻辑回归,我们都可以看做二元逻辑回归。具体做法是,对于第K类的分类决策,我们把所有第K类的样本作为正例,除了第K类样本以外的所有样本都作为负例,然后在上面做二元逻辑回归,得到第K类的分类模型。其他类的分类模型获得以此类推。
      • MvM则相对复杂,这里举MvM的特例one-vs-one(OvO)作讲解。如果模型有T类,我们每次在所有的T类样本里面选择两类样本出来,不妨记为T1类和T2类,把所有的输出为T1和T2的样本放在一起,把T1作为正例,T2作为负例,进行二元逻辑回归,得到模型参数。我们一共需要T(T-1)/2次分类。
      • 可以看出OvR相对简单,但分类效果相对略差(这里指大多数样本分布情况,某些样本分布下OvR可能更好)。而MvM分类相对精确,但是分类速度没有OvR快。如果选择了ovr,则4种损失函数的优化方法liblinear,newton-cg,lbfgs和sag都可以选择。但是如果选择了multinomial,则只能选择newton-cg, lbfgs和sag了。
  • verbose:日志冗长度,int类型。默认为0。就是不输出训练过程,1的时候偶尔输出结果,大于1,对于每个子模型都输出。
  • warm_start:热启动参数,bool类型。默认为False。如果为True,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化)。
  • n_jobs:并行数。int类型,默认为1。1的时候,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序。为-1的时候,用所有CPU的内核运行程序。

(四)随机森林:

from sklearn.ensemble import RandomForestClassifier

modelRandomForestClassifier()

参数:

n_estimators=10:决策树的个数,越多越好,但是性能就会越差,至少100左右(具体数字忘记从哪里来的了)可以达到可接受的性能和误差率。

bootstrap=True是否有放回的采样

oob_score=Falseoob(out of band,带外)数据,即:在某次决策树训练中没有被bootstrap选中的数据。多单个模型的参数训练,我们知道可以用cross validation(cv)来进行,但是特别消耗时间,而且对于随机森林这种情况也没有大的必要,所以就用这个数据对决策树模型进行验证,算是一个简单的交叉验证。性能消耗小,但是效果不错。  

n_jobs=1并行job个数。这个在ensemble算法中非常重要,尤其是bagging(而非boosting,因为boosting的每次迭代之间有影响,所以很难进行并行化),因为可以并行从而提高性能。1=不并行;n:n个并行;-1:CPU有多少core,就启动多少job

warm_start=False热启动,决定是否使用上次调用该类的结果然后增加新的。  

class_weight=None各个label的权重。  

(五)决策树:

from sklearn import tree

model = tree.DecisionTreeClassifier()

参数:

criterion: ”gini” or “entropy”(default=”gini”)是计算属性的gini(基尼不纯度)还是entropy(信息增益),来选择最合适的节点。

splitter: ”best” or “random”(default=”best”)随机选择属性还是选择不纯度最大的属性,建议用默认。

max_features: 选择最适属性时划分的特征不能超过此值。

当为整数时,即最大特征数;当为小数时,训练集特征数*小数;

if “auto”, then max_features=sqrt(n_features).

If “sqrt”, thenmax_features=sqrt(n_features).

If “log2”, thenmax_features=log2(n_features).

If None, then max_features=n_features.

max_depth: (default=None)设置树的最大深度,默认为None,这样建树时,会使每一个叶节点只有一个类别,或是达到min_samples_split。

min_samples_split:根据属性划分节点时,每个划分最少的样本数。

min_samples_leaf:叶子节点最少的样本数。

max_leaf_nodes: (default=None)叶子树的最大样本数。

min_weight_fraction_leaf: (default=0) 叶子节点所需要的最小权值

verbose:(default=0) 是否显示任务进程

(六)GBDT(Gradient Boosting Decision Tree)

from sklearn.ensemble import GradientBoostingClassifier

model = GradientBoostingClassifier()

参数:

           1) n_estimators: 也就是弱学习器的最大迭代次数,或者说最大的弱学习器的个数。一般来说n_estimators太小,容易欠拟合,n_estimators太大,又容易过拟合,一般选择一个适中的数值。默认是100。在实际调参的过程中,我们常常将n_estimators和下面介绍的参数learning_rate一起考虑。

    2) learning_rate: 即每个弱学习器的权重缩减系数νν,也称作步长,在原理篇的正则化章节我们也讲到了,加上了正则化项,我们的强学习器的迭代公式为fk(x)=fk1(x)+νhk(x)fk(x)=fk−1(x)+νhk(x)。νν的取值范围为0<ν10<ν≤1。对于同样的训练集拟合效果,较小的νν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。所以这两个参数n_estimators和learning_rate要一起调参。一般来说,可以从一个小一点的νν开始调参,默认是1。

    3) subsample: 即我们在原理篇的正则化章节讲到的子采样,取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间,默认是1.0,即不使用子采样。

    4) init: 即我们的初始化的时候的弱学习器,拟合对应原理篇里面的f0(x)f0(x),如果不输入,则用训练集样本来做样本集的初始化分类回归预测。否则用init参数提供的学习器做初始化分类回归预测。一般用在我们对数据有先验知识,或者之前做过一些拟合的时候,如果没有的话就不用管这个参数了。

    5) loss: 即我们GBDT算法中的损失函数。分类模型和回归模型的损失函数是不一样的。

      对于分类模型,有对数似然损失函数"deviance"和指数损失函数"exponential"两者输入选择。默认是对数似然损失函数"deviance"。在原理篇中对这些分类损失函数有详细的介绍。一般来说,推荐使用默认的"deviance"。它对二元分离和多元分类各自都有比较好的优化。而指数损失函数等于把我们带到了Adaboost算法。

      对于回归模型,有均方差"ls", 绝对损失"lad", Huber损失"huber"和分位数损失“quantile”。默认是均方差"ls"。一般来说,如果数据的噪音点不多,用默认的均方差"ls"比较好。如果是噪音点较多,则推荐用抗噪音的损失函数"huber"。而如果我们需要对训练集进行分段预测的时候,则采用“quantile”。

    6) alpha:这个参数只有GradientBoostingRegressor有,当我们使用Huber损失"huber"和分位数损失“quantile”时,需要指定分位数的值。默认是0.9,如果噪音点较多,可以适当降低这个分位数的值

(七)SVM(支持向量机)

from sklearn.svm import SVC

model = SVC()

参数:

1, float参数 默认值为1.0

错误项的惩罚系数。C越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,但是泛化能力降低,也就是对测试数据的分类准确率降低。相反,减小C的话,容许训练样本中有一些误分类错误样本,泛化能力强。对于训练样本带有噪声的情况,一般采用后者,把训练样本集中错误分类的样本作为噪声。

2,kernel: str参数 默认为‘rbf’

算法中采用的核函数类型,可选参数有:

‘linear’:线性核函数

‘poly’:多项式核函数

‘rbf’:径像核函数/高斯核

‘sigmod’:sigmod核函数

‘precomputed’:核矩阵

3,degree:int型参数 默认为3

这个参数只对多项式核函数有用,是指多项式核函数的阶数n

如果给的核函数参数是其他核函数,则会自动忽略该参数。

4,gamma:float参数 默认为auto,

核函数系数,只对‘rbf’,‘poly’,‘sigmod’有效。

如果gamma为auto,代表其值为样本特征数的倒数,即1/n_features.

5,coef0:float参数 默认为0.0

核函数中的独立项,只有对‘poly’和‘sigmod’核函数有用,是指其中的参数c,

6,probability:bool参数 默认为False

是否启用概率估计。 这必须在调用fit()之前启用,并且会fit()方法速度变慢。

7,shrinking:bool参数 默认为True

是否采用启发式收缩方式,

8,tol: float参数  默认为1e^-3

svm停止训练的误差精度

9,cache_size:float参数 默认为200

指定训练所需要的内存,以MB为单位,默认为200MB。,

10,class_weight:字典类型或者‘balance’字符串。默认为None

给每个类别分别设置不同的惩罚参数C,如果没有给,则会给所有类别都给C=1,即前面参数指出的参数C.

如果给定参数‘balance’,则使用y的值自动调整与输入数据中的类频率成反比的权重。

11,verbose :bool参数 默认为False

是否启用详细输出。 此设置利用libsvm中的每个进程运行时设置,如果启用,可能无法在多线程上下文中正常工作。一般情况都设为False,不用管它。

12,max_iter :int参数 默认为-1

最大迭代次数,如果为-1,表示不限制

13,random_state:int型参数 默认为None


(八)stacking

参数:

1,classifiers : 基分类器,数组形式,[cl1, cl2, cl3]. 每个基分类器的属性被存储在类属性 self.clfs_.,

2,meta_classifier : 目标分类器,即将前面分类器合起来的分类器

3,use_probas : bool (default: False) ,如果设置为True, 那么目标分类器的输入就是前面分类输出的类别概率值而不是类别标签

4,average_probas : bool (default: False),用来设置上一个参数当使用概率值输出的时候是否使用平均值。

5,verbose : int, optional (default=0)。用来控制使用过程中的日志输出,当 verbose = 0时,什么也不输出, verbose = 1,输出回归器的序号和名字。verbose = 2,输出详细的参数信息。verbose > 2, 自动将verbose设置为小于2的,verbose -2.

6,use_features_in_secondary : bool (default: False). 如果设置为True,那么最终的目标分类器就被基分类器产生的数据和最初的数据集同时训练。如果设置为False,最终的分类器只会使用基分类器产生的数据训练。


属性:
clfs_ : 每个基分类器的属性,list, shape 为 [n_classifiers]。

meta_clf_ : 最终目标分类器的属性

方法:

fit(X, y)

fit_transform(X, y=None, fit_params)

get_params(deep=True),如果是使用sklearn的GridSearch方法,那么返回分类器的各项参数。

predict(X)

predict_proba(X)

score(X, y, sample_weight=None), 对于给定数据集和给定label,返回评价accuracy

set_params(params),设置分类器的参数,params的设置方法和sklearn的格式一样


声明:本文为自己从网上收集的资料集合起来,方便自己查阅,也方便大家参考







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值