FightLi

常见模型

 

一般线性回归

优化函数使用最小二乘法,以使得残差平方和最小确定最优回归线。考虑了经验风险最小化,没有考虑结构风险最小化问题。故模型容易出现过拟合的现象。

 

Ridge(岭回归)

https://scikit-learn.org/stable/modules/linear_model.html#ridge-regression

优化函数在最小二乘法的基础上加上L2正则化,及线性模型系数的二次方和的惩罚项。岭回归不经考虑的经验风险最小化,而且考虑了结构风险最小化。模型的容错性相比与线性回归更好。

alpha惩罚项系数,增大 alpha 会使得系数更加趋向于0,从而降低训练集性能,但可能会提高泛化性能。

 

Lasso

https://scikit-learn.org/stable/modules/linear_model.html#lasso

优化函数在最小二乘法的基础上加上L1正则化,及线性模型系数的一次方和的惩罚项。Lasso不经考虑的经验风险最小化,而且考虑了结构风险最小化。模型的容错性相比与线性回归更好。相比与岭回归Lasso的模型复杂度更高,在优化函数取相同值时,岭回归模型得出的模型项数可能比Lasso模型项数少。

alpha惩罚项系数,增大 alpha 会使得系数更加趋向于0,从而降低训练集性能,但可能会提高泛化性能。

 

ElasticNet

ElasticNet 结合了 Lasso Ridge 的惩罚项 L1正则化 L2正则化。

https://scikit-learn.org/stable/modules/linear_model.html#elastic-net

惩罚项系数的具体分配根据如下表达式:

alpha * p * L1 + alpha * (1-p) * L2

当出现多个变量与某一个变量相关时,ElasticNet的优势就很明显,它会选择所有与高度相关的变量,而Lasso则只会从中选取一个高度相关的变量。通过调节p能实现中和Lasso和岭回归各自的缺点,并继承两者的优点。当然,ElasticNet多了一个超参数,在实践过程中需要投入更多的时间寻找最优参数。

 

LogisticRegressionLinearSVC L2正则化

LogisticRegression 具有L1 L2 两种惩罚项。在Logistic的基础上加上一个惩罚项,综合考虑经验风险和结构风险。

https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression

LinearSVC 可以近似理解为SCV使用linear线性核。其实现过程使用的时线性簇而不是支持向量机簇,因此其在惩罚项和损失函数上有更灵活的选择。它更加适合与大数据量的样本拟合。

https://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC

如果参数 C 值较大,那么 LogisticRegression LinearSVC 将尽可能将训练集拟合到最好,而如果 C 值较小,那么模型更强调使系数向量(w )接近于 0

参数 C 的作用还有另一个有趣之处。较小的 C 值可以让算法尽量适应大多数数据点,而较大的 C 值更强调每个数据点都分类正确的重要性。

如果想要一个可解释性更强的模型,使用 L1 正则化可能更好,因为它约束模型只使用少数几个特征。

 

朴素贝叶斯分类

GaussianNB BernoulliNB MultinomialNB

https://scikit-learn.org/stable/modules/naive_bayes.html#gaussian-naive-bayes

https://scikit-learn.org/stable/modules/naive_bayes.html#bernoulli-naive-bayes

https://scikit-learn.org/stable/modules/naive_bayes.html#multinomial-naive-bayes

GaussianNB,BernouliNB,MultinormialNB三者的根本区别在与它们对数据分布的假设前提不一样。GaussianNB 假定数据分布服从高斯分布;BernouliNB 假定数据分布服从伯努利分布;MultinomialNB 假定数据分布服从多项式分布。由于分布假设不一样,导致在给定的y的条件下,其xi的先验概率不一样。

GaussianNB 可应用于任意连续数据,而 BernoulliNB 假定输入数据为二分类数据,MultinomialNB 假定输入数据为计数数据(即每个特征代表某个对象的整数计数,比如一个单词在句子里出现的次数)。

alpha 的工作原理是,算法向数据中添加 alpha 这么多的虚拟数据点,这些点对所有特征都取正值。这可以将统计数据平滑化smoothing)。alpha 越大,平滑化越强,模型复杂度就越低。

算法性能对 alpha 值的鲁棒性相对较好,也就是说,alpha 值对模型性能并不重要。但调整这个参数通常都会使精度略有提高。

 

GaussianNB 主要用于高维数据,而另外两种朴素贝叶斯模型则广泛用于稀疏计数数据

 

决策树

https://scikit-learn.org/stable/modules/tree.html#tree

feature_importance 特征重要性始终为正数,也不能说明该特征对应哪个类别。特征重要性告诉我们"worst radius"(最大半径)特征很重要,但并没有告诉我们半径大表示样本是良性还是恶性。

决策树有两个优点:

  一是得到的模型很容易可视化,非专家也很容易理解(至少对于较小的树而言)。

  二是算法完全不受数据缩放的影响。由于每个特征被单独处理,而且数据的划分也不依赖于缩放,因此决策树算法不需要特征预处理,比如归一化或标准化。特别是特征的尺度完全不一样时或者二元特征和连续特征同时存在时,决策树的效果很好。

决策树缺点:

  决策树容易造成过拟合。

  决策树不是一个稳定的算法,对于数据的变化很敏感。数据的轻微变动就会导致决策树的生成发生变化。

  决策树的优化问题是一个NP难问题。

 

决策树集成(随机森林,梯度提升回归树)

https://scikit-learn.org/stable/modules/ensemble.html#forest

梯度提升树模型的主要参数包括树的数量 n_estimators 和学习率 learning_rate ,后者用于控制每棵树对前一棵树的错误的纠正强度。这两个参数高度相关,因为 learning_rate 越低,就需要更多的树来构建具有相似复杂度的模型。

随机森林的 n_estimators 值总是越大越好,但梯度提升不同,增大 n_estimators 会导致模型更加复杂,进而可能导致过拟合。通常的做法是根据时间和内存的预算选择合适的 n_estimators ,然后对不同的 learning_rate 进行遍历。

另一个重要参数是 max_depth (或 max_leaf_nodes ),用于降低每棵树的复杂度。梯度提升模型的 max_depth 通常都设置得很小,一般不超过5

随机森林:几乎总是比单棵决策树的表现要好,鲁棒性很好,非常强大。不需要数据缩放。不适用于高维稀疏数据。

梯度提升回归树:精度通常比随机森林略高。与随机森林相比,训练速度更慢,但预测速度更快,需要的内存也更少。比随机森林需要更多的参数调节。

 

SVM

https://scikit-learn.org/stable/modules/svm.html#svm-classification

gamma 参数是上一节给出的公式中的参数,用于控制高斯核的宽度。它决定了点与点之间靠近是指多大的距离。C 参数是正则化参数,与线性模型中类似。

需要数据预处理,数据变化范围相差不大。

 

神经网络算法

https://scikit-learn.org/stable/modules/neural_networks_supervised.html#neural-networks-supervised

此处描述的神经网络算法不涉及卷积网络,是传统的BP神经网络算法。SKlearn中的MLPClassifier算法存在一定程度上局限性,隐藏层中的激活函数无法多元化,及隐藏层上的激活函数共享同一个激活函数。

对数据缩放敏感,需要仔细地预处理数据,正如我们这里所看到的。与 SVM 类似,神经网络在均匀数据上的性能最好,其中均匀是指所有特征都具有相似的含义。神经网络算法,在计算力允许的情况,算法的表现力总是最好的。因为其结构的复杂性,理论上可以拟合出任何一种分布,随之而来的问题就是无法做出合理的解释,这也是学术界诟病已久的问题。神经网络算法的变种有很多,例如深度神经网络,残差神经网络,序列模型我个人觉得也可以算作一种神经网络算法。卷积神经网络的出现,给计算机视觉领域带来新的契机,出现了许多经典模型,例如,AlexNetVGGNet,InceptionNet,ResNet,STLM

 

聚类算法

K-means,DBSCAN(基于密度聚类),凝聚聚类

DBSCANmin_sample,eps核心参数

min_sample 决定密度值,在给定范围类相似数据点个数

eps 决定范围大小即半径大小

 

凝聚聚类:确定中心点,意中心点为参照向外辐射

 

数据分解方法

                非负矩阵分解:NMF

                独立成分分析:ICA

                因子分析:FA

                稀疏编码

                流行学习,无监督:TSNE

 

数据表示的最佳方法不仅取决于数据的语义,还取决于所使用的模型种类。

 

特征工程

  数据变换

  对基于树的模型而言,这种变换并不重要,但对线性模型来说可能至关重要。对回归的目标变量 y 进行变换有时也是一个好主意。尝试预测计数(比如订单数量)是一项相当常见的任务,而且使用 log(y + 1) 变换也往往有用

  分箱:根据给定的范围将数据划分不同的部分。1.在每个部分中进行模型训练;2.将分箱的信息与属性相结合i*fi为箱子编号,f为分箱属性

  多变量交互:多个变量之间做加减乘除等运算

  多项式:多项式拟合

  单变量:单一变量做非线性变换,exp,log,sin,平方等

 

 

  模型验证

  应该在进行任何预处理之前完成数据集的划分。任何从数据集中提取信息的处理过程都应该仅应用于数据集的训练部分,因此,任何交叉验证都应该位于处理过程的最外层循环

  data:train_data,test_data. 原始data拆分成训练集和测试集

  train_data:valid_train_data,valid_test_data. 训练集train_data被拆分成交叉验证时的训练集和测试集。

  原因解释:

                若先对数据进行预处理,那么valid_train_data,valid_test_data使用了完全相同的处理过程,并且隐含假定了它们的分布完全相同。故此时的valid_test_data相对于valid_train_data来说不是新数据。则在进行交叉验证的训练阶段valid_test_data的一部分信息提前告知了训练过程(信息泄露)。

    在交叉验证中,信息泄露的影响大小取决于预处理步骤的性质。使用测试部分来估计数据的范围,通常不会产生可怕的影响,但在特征提取和特征选择中使用测试部分,则会导致结果的显著差异。

 

分类:

技术点:

相关文章: