线性回归算法梳理

线性回归算法梳理

  • 1. 机器学习的一些概念
    • 监督式学习
    • 无监督的学习
    • 泛化能力
    • 过拟合
    • 欠拟合
    • 交叉验证
  • 2. 线性回归的原理
    • 理论模型
    • 数据和估计
  • 3. 线性回归损失函数、代价函数、目标函数
    • 损失函数
    • 代价函数
    • 目标函数
  • 4. 优化方法
    • 梯度下降法
    • 牛顿法
    • 拟牛顿法
  • 5.线性回归的评估指标
    • 均方误差(MSE)
    • 均方根误差(RMSE)
    • 平均绝对误差(MAE)
    • R方(R Squared)
  • 6. sklearn参数详解
    • 聚类算法
    • Adaboost
    • GBDT
    • 随机森林
    • LR模型
    • 贝叶斯
    • 决策树
    • SVM

1. 机器学习的一些概念

监督式学习

监督式学习(Supervised learning),是机器学习的一种方法,可以由训练数据集中学到或建立一个模式(learning model),并依此模式推测新的实例。训练数据集是由输入物件(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。从训练数据集学习算法的过程可以被认为是监督学习的过程的教师。我们知道正确答案,算法迭代地对训练数据进行预测,并由教师纠正。当算法达到可接受的性能水平时,学习停止。

无监督的学习

无监督的学习(Unsupervised learning)也是机器学习的一种方法,没有给定事先标记过的训练示例,自动对输入的数据进行分类或分群。与监督式学习不同,无监督的学习没有正确的答案,也没有教师,算法由自己设计,来发现和呈现数据中的有趣结构。

泛化能力

泛化能力(generalization ability)是指机器学习算法对新鲜样本的适应能力。学习的目的是学到隐含在数据背后的规律,对具有同一规律的学习集以外的数据,经过训练的网络也能给出合适的输出,该能力称为泛化能力。我们也叫作举一反三的能力,或者叫做学以致用的能力。

过拟合

我们训练一个机器学习算法,通过感性的告诉机器一个加上一个等于两个,之后算法通过自己的学习,推广计算多位数的加减法,多位数的加减法是无穷多个的,如果机器在不断的测试中都能够算对,那么我们认为机器已经总结出了加法的内部规律并且能够学以致用,如果说机器只会计算你给机器看过的比如2+2=4,而不会计算没有教过的5+7=12,那么我们认为机器只是死记硬背,并没有学以致用的能力,也就是说泛化能力非常的低,同时我们也把这种现象叫做这个算法过拟合(over-fitting)。过拟合通常可以理解为,模型的复杂度要高于实际的问题,所以就会导致模型死记硬背的记住,而没有理解背后的规律。就比如说人脑要比唐诗复杂得多,即使不理解内容,我们也能背下来,但是理解了内容和写法对于我们理解记忆其他唐诗有好处,如果死记硬背那么就仅仅记住了而已。过拟合图示如下线性回归算法梳理_第1张图片

欠拟合

欠拟合(under-fitting)是和过拟合相对的现象,可以说是模型的复杂度较低,没法很好的学习到数据背后的规律。就好像开普勒在总结天体运行规律之前,他的老师第谷记录了很多的运行数据,但是都没法用数据去解释天体运行的规律并预测,这就是在天体运行数据上,人们一直处于欠拟合的状态,只知道记录过的过去是这样运行的,但是不知道道理是什么。欠拟合图示如下
线性回归算法梳理_第2张图片

交叉验证

交叉验证(Cross-validation),有的时候也称作循环估计(Rotation Estimation),是一种统计学上将数据样本切割成较小子集的实用方法,该理论是由Seymour Geisser提出的。
交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set),首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(model),以此来做为评价分类器的性能指标。

2. 线性回归的原理

理论模型

在统计学中,线性回归(linear regression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。
给一个随机样本 ( Y i , X i 1 , . . . , X i p ) , i = 1 , . . . , n (Y_i,X_{i1},...,X_{ip}),i=1,...,n (Yi,Xi1,...,Xip),i=1,...,n ,一个线性回归模型假设回归子 Y i Y_i Yi和回归量 X i 1 , . . . , X i p X_{i1},...,X_{ip} Xi1,...,Xip之间的关系是除了 X X X的影响以外,还有其他的变量存在。我们加入一个误差项 ε i \varepsilon_i εi(也是一个随机变量)来捕获除了 X i 1 , . . . , X i p X_{i1},...,X_{ip} Xi1,...,Xip之外任何对 Y i Y_i Yi的影响。所以一个多变量线性回归模型表示为以下的形式:
Y i = β 0 + β 1 X i 1 + β 2 X i 2 + . . . + β p X i p + ε i ,      i = 1 , . . . , n Y_i=\beta_0+\beta_1X_{i1}+\beta_2X_{i2}+...+\beta_pX_{ip}+\varepsilon_i, \space\space\space\space i=1,...,n Yi=β0+β1Xi1+β2Xi2+...+βpXip+εi,    i=1,...,n
其他的模型可能被认定成非线性模型。一个线性回归模型不需要是自变量的线性函数。线性在这里表示 Y i Y_i Yi的条件均值在参数 β \beta β 里是线性的。例如:模型 Y i = β 1 X i + β 2 X i 2 + ε i Y_i=\beta_1X_{i}+\beta_2X_{i}^2+\varepsilon_i Yi=β1Xi+β2Xi2+εi β 1 \beta_1 β1 β 2 \beta_2 β2里是线性的,但在 X i 2 X_i^2 Xi2里是非线性的,它是 X i X_i Xi的非线性函数。

数据和估计

区分随机变量和这些变量的观测值是很重要的。通常来说,观测值或数据(以小写字母表记)包括了n个值 ( y i , x i , . . . , x i p ) ,   i = 1 , . . . , n (y_i,x_i,...,x_{ip}), \space i=1,...,n (yi,xi,...,xip), i=1,...,n
我们有 p+1个参数 β 0 , . . . , β p \beta_0,...,\beta_p β0,...,βp需要决定,为了估计这些参数,使用矩阵表记是很有用的。
Y = X β + ε Y=X\beta+\varepsilon Y=Xβ+ε
其中Y是一个包括了观测值 Y 1 , . . . , Y n Y_1,...,Y_n Y1,...,Yn的列向量, ε \varepsilon ε包括了未观测的随机成分 ε 1 , . . . , ε n \varepsilon_1,...,\varepsilon_n ε1,...,εn以及回归量的观测值矩阵 X X X
X = ( 1 x 11 . . . x 1 p 1 x 21 . . . x 2 p . . . . . . . . . . . . 1 x n 1 . . . x n p ) X=\begin{pmatrix}1&x_{11}&.&.&.&x_{1p}\\1&x_{21}&.&.&.&x_{2p}\\.&.&.&&&.\\.&.&&.&&.\\.&.&&&.&.\\1&x_{n1}&.&.&.&x_{np}\end{pmatrix} X=11...1x11x21...xn1............x1px2p...xnp
X X X通常包括一个常数项。
如果 X X X列之间存在线性相关,那么参数向量 β \beta β就不能以最小二乘法估计除非 β \beta β被限制,比如要求它的一些元素之和为0。

3. 线性回归损失函数、代价函数、目标函数

损失函数

线性回归的损失函数是平方损失函数。在线性回归中,对于训练数据样本 ( x i , y i ) (x_i,y_i) (xi,yi),我们有如下的拟合直线: y i ^ = θ ⋅ x i \hat{y_i}=\theta\cdot x_i yi^=θxi构建的损失函数是 C = ∑ i = 1 n ( y i − y i ^ ) 2 C=\displaystyle\sum_{i=1}^n(y_i-\hat{y_i})^2 C=i=1n(yiyi^)2表示每一个训练点 ( x i , y i ) (x_i,y_i) (xi,yi)到拟合直线 y i ^ = θ ⋅ x i \hat{y_i} =\theta\cdot x_i yi^=θxi的竖直距离的平方和,通过最小化上面的损失函数可以求得拟合直线的最佳参数 θ \theta θ
这里的损失函数之所以使用平方形式,是使用了“最小二乘法”的思想,这里的“二乘”指的是用平方来度量观测点与估计点的距离(远近),“最小”指的是参数值要保证各个观测点与估计点的距离的平方和达到最小。

代价函数

代价函数(cost function)用于评价线性回归,其公式为: J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) − y ( i ) ) 2 J(\theta_0,\theta_1)=\frac{1}{2m}\displaystyle\sum_{i=1}^m(h_\theta(x^{(i)}-y^{(i)})^2 J(θ0,θ1)=2m1i=1m(hθ(x(i)y(i))2 计算方式是计算每一个点在当前假设函数情况下,偏差的平方和,再取平均数。m即表示一共取了几个点进行判断。

目标函数

目标函数是让代价函数最小的函数即 m i n = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) − y ( i ) ) 2 min=\frac{1}{2m}\displaystyle\sum_{i=1}^m(h_\theta(x^{(i)}-y^{(i)})^2 min=2m1i=1m(hθ(x(i)y(i))2

4. 优化方法

梯度下降法

梯度下降法(Gradient Descent)是一个最优化算法,通常也称为最速下降法。最速下降法是求解无约束优化问题最简单和最古老的方法之一,虽然现在已经不具有实用性,但是许多有效算法都是以它为基础进行改进和修正而得到的。最速下降法是用负梯度方向为搜索方向的,最速下降法越接近目标值,步长越小,前进越慢。可以用于求解非线性方程组.
梯度下降法参数的更新有两种形式,第一种遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降。第二种 每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降(stochastic gradient descent)。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,找不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。
为了克服两种方法的缺点,现在一般采用的是一种折中手段,小批的梯度下降(mini-batch gradient decent),这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。

牛顿法

牛顿法(Newton’s method)是一种在实数域和复数域上近似求解方程的方法。方法使用函数f (x)的泰勒级数的前面几项来寻找方程f (x) = 0的根。牛顿法最大的特点就在于它的收敛速度很快。牛顿法的步骤为:首先,选择一个接近函数 f (x)零点的 x 0 x_0 x0,计算相应的 f ( x 0 ) f (x_0) f(x0) 和切线斜率 f ′ ( x 0 ) f^{'}(x_0) f(x0)。然后我们计算穿过点 ( x 0 , f ( x 0 ) ) (x_0, f (x_0)) (x0,f(x0)) 并且斜率为 f ′ ( x 0 ) f^{'}(x_0) f(x0)的直线和 X轴的交点的X坐标,也就是求如下方程的解: x ⋅ f ′ ( x 0 ) + f ( x 0 ) − x 0 ⋅ f ′ ( x 0 ) = 0 x\cdot f^{'}(x_0)+f(x_0)-x_0\cdot f^{'}(x_0)=0 xf(x0)+f(x0)x0f(x0)=0我们将新求得的点的 x 坐标命名为 x 1 x_1 x1,通常 x 1 x_1 x1会比 x 0 x_0 x0更接近方程f (x) = 0的解。因此我们现在可以利用 x 1 x_1 x1开始下一轮迭代。迭代公式可化简为如下所示: x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1}=x_n-\frac {f(x_n)}{f^{'}(x_n)} xn+1=xnf(xn)f(xn)已经证明,如果 f ′ f ^{'} f 是连续的,并且待求的零点x是孤立的,那么在零点x周围存在一个区域,只要初始值 x 0 x_0 x0位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果$f ^{’} (x)不为0, 那么牛顿法将具有平方收敛的性能。

拟牛顿法

拟牛顿法(Quasi-Newton Methods)的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。拟牛顿法和最速下降法一样只要求每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。如今,优化软件中包含了大量的拟牛顿算法用来解决无约束,约束,和大规模的优化问题。
 拟牛顿法的基本思想如下。首先构造目标函数在当前迭代xk的二次模型:
m k ( p ) = f ( x k ) + ∇ f ( x k ) T p + p T B k p 2 m_k(p)=f(x_k)+\nabla f(x_k)^Tp+\frac{p^TB_kp}{2} mk(p)=f(xk)+f(xk)Tp+2pTBkp p k = − B k − 1 ∇ f ( x k ) p_k=-B_k^{-1}\nabla f(x_k) pk=Bk1f(xk)
这里 B k B_k Bk是一个对称正定矩阵,于是我们取这个二次模型的最优解作为搜索方向,并且得到新的迭代点: x k + 1 = x k + a k p k x_{k+1}=x_k+a_kp_k xk+1=xk+akpk其中我们要求步长 a k a_k ak满足Wolfe条件。这样的迭代与牛顿法类似,区别就在于用近似的Hesse矩阵 B k B_k Bk代替真实的Hesse矩阵。所以拟牛顿法最关键的地方就是每一步迭代中矩阵 B k B_k Bk的更新。现在假设得到一个新的迭代 x k + 1 x_{k+1} xk+1,并得到一个新的二次模型: m k + 1 ( p ) = f ( x k + 1 ) + ∇ f ( x k + 1 ) T p + p T B k + 1 p 2 m_{k+1}(p)=f(x_{k+1})+\nabla f(x_{k+1})^Tp+\frac{p^TB_{k+1}p}{2} mk+1(p)=f(xk+1)+f(xk+1)Tp+2pTBk+1p我们尽可能地利用上一步的信息来选取 B k B_k Bk。具体地,我们要求 ∇ f ( x k + 1 ) − ∇ f ( x k ) = a k B k + 1 p k \nabla f(x_{k+1})-\nabla f(x_k)=a_kB_{k+1}p_k f(xk+1)f(xk)=akBk+1pk从而得到 B k + 1 ( x k + 1 − x k ) = ∇ f ( x k + 1 ) − ∇ f ( x k ) B_{k+1}(x_{k+1}-x_k)=\nabla f(x_{k+1})-\nabla f(x_k) Bk+1(xk+1xk)=f(xk+1)f(xk)这个公式被称为割线方程。常用的拟牛顿法有DFP算法和BFGS算法。

5.线性回归的评估指标

均方误差(MSE)

方均误差(Mean Squared Error)公式如下 1 m ∑ i = 1 m ( y i − y i ^ ) 2 \frac{1}{m}\displaystyle\sum_{i=1}^m (y_i-\hat{y_i})^2 m1i=1m(yiyi^)2

均方根误差(RMSE)

均方根误差(Root Mean Squard Error)公式如下: 1 m ∑ i = 1 m ( y i − y i ^ ) 2 \sqrt{\smash[b]{\frac{1}{m}\displaystyle\sum_{i=1}^m (y_i-\hat{y_i})^2}} m1i=1m(yiyi^)2

平均绝对误差(MAE)

平均绝对误差(Mean Absolute Error)公式如下: 1 m ∑ i = 1 m ∣ y i − y i ^ ∣ \frac{1}{m}\displaystyle\sum_{i=1}^m \vert y_i-\hat{y_i}\vert m1i=1myiyi^

R方(R Squared)

R方公式如下: R 2 = 1 − S S r e s i d u a l S S t o t a l R^2=1-\frac{SS_{residual}}{SS_{total}} R2=1SStotalSSresidual

6. sklearn参数详解

聚类算法

class sklearn.cluster.KMeans
    (n_clusters=8, init='k-means++', n_init=10, max_iter=300, 
    tol=0.0001, precompute_distances='auto', verbose=0, 
    random_state=None, copy_x=True, n_jobs=1, algorithm='auto')

n_clusters:质心数量,也就是分类数,默认是8个。
init:初始化质心的选取方式,主要有下面三种参数可选,‘k-means++’、‘random’ or an ndarray,默认是’k-means++’。因为初始质心是随机选取的,会造成局部最优解,所以需要更换几次随机质心,这个方法在sklearn中通过给init参数传入=“k-means++”即可。
n_init:随机初始化的次数,kmeans质心迭代的次数。
max_iter:最大迭代次数,默认是300。
tol:误差容忍度最小值。
precompute_distances:是否需要提前计算距离,auto,True,False三个参数值可选。默认值是auto,如果选择auto,当样本数*质心数>12兆的时候,就不会提前进行计算,如果小于则会与提前计算。提前计算距离会让聚类速度很快,但是也会消耗很多内存。
copy_x:主要起作用于提前计算距离的情况,默认值是True,如果是True,则表示在源数据的副本上提前计算距离时,不会修改源数据。
algorithm:优化算法的选择,有auto、full和elkan三种选择。full就是一般意义上的K-Means算法,elkan是使用的elkan K-Means算法。默认的auto则会根据数据值是否是稀疏的(稀疏一般指是有大量缺失值),来决定如何选择full和elkan。如果数据是稠密的,就选择elkan K-means,否则就使用普通的Kmeans算法。

Adaboost

class sklearn.ensemble.AdaBoostClassifier(base_estimator=None, 
	n_estimators=50, learning_rate=1.0, algorithm='SAMME.R', 
	random_state=None)

base_estimator:基分类器,默认是决策树,在该分类器基础上进行boosting,理论上可以是任意一个分类器,但是如果是其他分类器时需要指明样本权重。
n_estimators:基分类器提升(循环)次数,默认是50次,这个值过大,模型容易过拟合;值过小,模型容易欠拟合。
learning_rate:学习率,表示梯度收敛速度,默认为1,如果过大,容易错过最优值,如果过小,则收敛速度会很慢;该值需要和n_estimators进行一个权衡,当分类器迭代次数较少时,学习率可以小一些,当迭代次数较多时,学习率可以适当放大。
algorithm:boosting算法,也就是模型提升准则,有两种方式SAMME, 和SAMME.R两种,默认是SAMME.R,两者的区别主要是弱学习器权重的度量,前者是对样本集预测错误的概率进行划分的,后者是对样本集的预测错误的比例,即错分率进行划分的,默认是用的SAMME.R。
random_state:随机种子设置。
关于Adaboost模型本身的参数并不多,但是我们在实际中除了调整Adaboost模型参数外,还可以调整基分类器的参数,关于基分类的调参,和单模型的调参是完全一样的,比如默认的基分类器是决策树,那么这个分类器的调参和我们之前的Sklearn参数详解——决策树是完全一致。

GBDT

class sklearn.ensemble.GradientBoostingClassifier(loss='deviance',
	learning_rate=0.1, n_estimators=100, subsample=1.0, 
 	criterion='friedman_mse', min_samples_split=2,
 	 min_samples_leaf=1, min_weight_fraction_leaf=0.0, 
 	 max_depth=3, min_impurity_decrease=0.0, 
 	 min_impurity_split=None, init=None, random_state=None,
 	 max_features=None, verbose=0, max_leaf_nodes=None,
 	 warm_start=False,presort='auto')

loss:损失函数度量,有对数似然损失deviance和指数损失函数exponential两种,默认是deviance,即对数似然损失,如果使用指数损失函数,则相当于Adaboost模型。
criterion: 样本集的切分策略,决策树中也有这个参数,但是两个参数值不一样,这里的参数值主要有friedman_mse、mse和mae3个,分别对应friedman最小平方误差、最小平方误差和平均绝对值误差,friedman最小平方误差是最小平方误差的近似。
subsample:采样比例,这里的采样和bagging的采样不是一个概念,这里的采样是指选取多少比例的数据集利用决策树基模型去boosting,默认是1.0,即在全量数据集上利用决策树去boosting。
warm_start:“暖启动”,默认值是False,即关闭状态,如果打开则表示,使用先前调试好的模型,在该模型的基础上继续boosting,如果关闭,则表示在样本集上从新训练一个新的基模型,且在该模型的基础上进行boosting。

随机森林

class sklearn.ensemble.RandomForestClassifier(
    n_estimators=10, criterion='gini', max_depth=None, 
    min_samples_split=2, min_samples_leaf=1, 
    min_weight_fraction_leaf=0.0,
    max_features='auto', max_leaf_nodes=None, 
    min_impurity_decrease=0.0, 
    min_impurity_split=None, bootstrap=True, 
    oob_score=False, n_jobs=1, 
    random_state=None, verbose=0, warm_start=False, 
    class_weight=None)

n_estimators:随机森林中树的棵树,默认是10棵。
criterion:样本集切分策略,默认是gini指数,此时树模型为CART模型,当值选为信息增益的时候,模型就成了ID3模型,默认为CART模型。
bootstrap:是统计学中的一种重采样技术,可以简单理解成是有放回地抽样,默认是True,即采取有放回抽样这种策略,这不就是bagging的思想么。
oob_score:袋外估计(out-of-bag),这个外是针对于bagging这个袋子而言的,我们知道,bagging采取的随机抽样的方式去建立树模型,那么那些未被抽取到的样本集,也就是未参与建立树模型的数据集就是袋外数据集,我们就可以用这部分数据集去验证模型效果,默认值为False。

LR模型

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:正则化选择参数,参数可选值为l1和l2,分别对应l1正则化和l2正则化,默认是l2正则化。
penalty参数的选择会影响我们损失函数优化算法的选择,即参数solver的选择,如果是l2正则化,可选的优化算法 {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’}都可以选择。但是如果penalty是L1正则化的话,就只能选择‘liblinear’了。这是因为L1正则化的损失函数不是连续可导的,而{‘newton-cg’, ‘lbfgs’,‘sag’}这三种优化算法时都需要损失函数的一阶或者二阶连续导数。而‘liblinear’并没有这个依赖。
dual:用来指明是否将原问题改成他的对偶问题,对偶问题可以理解成相反问题,比如原问题是求解最大值的线性规划,那么他的对偶问题就是转化为求解最小值的线性规划,适用于样本较小的数据集,因样本小时,计算复杂度较低。
tol:残差收敛条件,默认是0.0001,也就是只需要收敛的时候两步只差<0.0001就停止,可以设置更大或更小。(逻辑回归模型的损失函数是残差平方和)
C:正则化系数,正则化强度的导数,必须是一个正数,值越小,正则化强度越大,即防止过拟合的程度更大。
fit_intercept:是否将截距/方差加入到决策模型中,默认为True。
class_weight:class_weight是很重要的一个参数,是用来调节正负样本比例的,默认是值为None,也就是正负样本的权重是一样的,你可以以dict的形式给模型传入任意你认为合适的权重比,也可以直接指定一个值“balanced”,模型会根据正负样本的绝对数量比来设定模型最后结果的权重比。比如,有一数据集的正负样本绝对数量比为4:6,如果你给参数class_weight赋予balanced值,那么最后模型结果中,正负样本的权重比就会变成6:4。
random_state:随机种子的设置,默认是None,如果设置了随机种子,那么每次使用的训练集和测试集都是一样的,这样不管你运行多少次,最后的准确率都是一样的;如果没有设置,那么每次都是不同的训练集和测试集,最后得出的准确率也是不一样的。
solver:用来指明损失函数的优化方法,默认是‘liblinear’方法

贝叶斯

高斯朴素贝叶斯

class sklearn.naive_bayes.GaussianNB(priors=None)

priors:先验概率大小,如果没有给定,模型则根据样本数据自己计算(利用极大似然法)。

多项式分布贝叶斯

class sklearn.naive_bayes.MultinomialNB(alpha=1.0, 
	fit_prior=True, class_prior=None)

alpha:先验平滑因子,默认等于1,当等于1时表示拉普拉斯平滑。
fit_prior:是否去学习类的先验概率,默认是True
class_prior:各个类别的先验概率,如果没有指定,则模型会根据数据自动学习, 每个类别的先验概率相同,等于类标记总个数N分之一。

伯努利朴素贝叶斯

class sklearn.naive_bayes.BernoulliNB(alpha=1.0, 
	binarize=0.0, fit_prior=True, class_prior=None)

alpha:平滑因子,与多项式中的alpha一致。
binarize:样本特征二值化的阈值,默认是0。如果不输入,则模型会认为所有特征都已经是二值化形式了;如果输入具体的值,则模型会把大于该值的部分归为一类,小于的归为另一类。
fit_prior:是否去学习类的先验概率,默认是True
class_prior:各个类别的先验概率,如果没有指定,则模型会根据数据自动学习, 每个类别的先验概率相同,等于类标记总个数N分之一。

决策树

sklearn.tree.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,min_impurity_split=None, 
        class_weight=None, presort=False)

criterion:特征选择的标准,有信息增益和基尼系数两种,使用信息增益的是ID3和C4.5算法(使用信息增益比),使用基尼系数的CART算法,默认是gini系数。
splitter:特征切分点选择标准,决策树是递归地选择最优切分点,spliter是用来指明在哪个集合上来递归,有“best”和“random”两种参数可以选择,best表示在所有特征上递归,适用于数据集较小的时候,random表示随机选择一部分特征进行递归,适用于数据集较大的时候。
max_depth:决策树最大深度,决策树模型先对所有数据集进行切分,再在子数据集上继续循环这个切分过程,max_depth可以理解成用来限制这个循环次数。
min_samples_split:子数据集再切分需要的最小样本量,默认是2,如果子数据样本量小于2时,则不再进行下一步切分。如果数据量较小,使用默认值就可,如果数据量较大,为降低计算量,应该把这个值增大,即限制子数据集的切分次数。
min_samples_leaf:叶节点(子数据集)最小样本数,如果子数据集中的样本数小于这个值,那么该叶节点和其兄弟节点都会被剪枝(去掉),该值默认为1。
min_weight_fraction_leaf:在叶节点处的所有输入样本权重总和的最小加权分数,如果不输入则表示所有的叶节点的权重是一致的。
max_features:特征切分时考虑的最大特征数量,默认是对所有特征进行切分,也可以传入int类型的值,表示具体的特征个数;也可以是浮点数,则表示特征个数的百分比;还可以是sqrt,表示总特征数的平方根;也可以是log2,表示总特征数的log个特征。
random_state:随机种子的设置,与LR中参数一致。
max_leaf_nodes:最大叶节点个数,即数据集切分成子数据集的最大个数。
min_impurity_decrease:切分点不纯度最小减少程度,如果某个结点的不纯度减少小于这个值,那么该切分点就会被移除。
min_impurity_split:切分点最小不纯度,用来限制数据集的继续切分(决策树的生成),如果某个节点的不纯度(可以理解为分类错误率)小于这个阈值,那么该点的数据将不再进行切分。
class_weight:权重设置,主要是用于处理不平衡样本,与LR模型中的参数一致,可以自定义类别权重,也可以直接使用balanced参数值进行不平衡样本处理。
presort:是否进行预排序,默认是False,所谓预排序就是提前对特征进行排序,我们知道,决策树分割数据集的依据是,优先按照信息增益/基尼系数大的特征来进行分割的,涉及的大小就需要比较,如果不进行预排序,则会在每次分割的时候需要重新把所有特征进行计算比较一次,如果进行了预排序以后,则每次分割的时候,只需要拿排名靠前的特征就可以了。

SVM

class sklearn.svm.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)

penalty:正则化参数,L1和L2两种参数可选,仅LinearSVC有。
loss:损失函数,有‘hinge’和‘squared_hinge’两种可选,前者又称L1损失,后者称为L2损失,默认是是’squared_hinge’,其中hinge是SVM的标准损失,squared_hinge是hinge的平方。
dual:是否转化为对偶问题求解,默认是True。
tol:残差收敛条件,默认是0.0001,与LR中的一致。
C:惩罚系数,用来控制损失函数的惩罚系数,类似于LR中的正则化系数。
multi_class:负责多分类问题中分类策略制定,有‘ovr’和‘crammer_singer’ 两种参数值可选,默认值是’ovr’,'ovr’的分类原则是将待分类中的某一类当作正类,其他全部归为负类,通过这样求取得到每个类别作为正类时的正确率,取正确率最高的那个类别为正类;‘crammer_singer’ 是直接针对目标函数设置多个参数值,最后进行优化,得到不同类别的参数值大小。
fit_intercept:是否计算截距,与LR模型中的意思一致。
class_weight:与其他模型中参数含义一样,也是用来处理不平衡样本数据的,可以直接以字典的形式指定不同类别的权重,也可以使用balanced参数值。
verbose:是否冗余,默认是False.
random_state:随机种子的大小。
max_iter:最大迭代次数,默认是1000。

你可能感兴趣的:(线性回归算法梳理)