返回介绍

数学基础

统计学习

深度学习

工具

Scala

一、线性模型

发布于 2023-07-17 23:38:23 字数 12464 浏览 0 评论 0 收藏 0

  1. 线性模型的一些通用参数:

    • fit_intercept:一个布尔值,指定是否需要计算截距项。如果为False,那么不会计算截距项。

      当 $ MathJax-Element-47 $ , $ MathJax-Element-48 $ 时, 可以设置 fit_intercept=False

    • intercept_scaling:一个浮点数,用于缩放截距项的正则化项的影响。

      当采用fit_intercept 时,相当于人造一个特征出来,该特征恒为 1 ,其权重为 $ MathJax-Element-49 $ 。

      在计算正则化项的时候,该人造特征也被考虑了。为了降低这个人造特征的影响,需要提供intercept_scaling

    • tol:一个浮点数,指定判断迭代收敛与否的阈值。

1.1 LinearRegression

  1. LinearRegression是线性回归模型,它的原型为:

    
    class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False,
    copy_X=True, n_jobs=1)
    • fit_intercept:一个布尔值,指定是否需要计算截距项。
    • normalize:一个布尔值。如果为True,那么训练样本会在训练之前会被归一化。
    • copy_X:一个布尔值。如果为True,则会拷贝X
    • n_jobs:一个整数,指定计算并行度。
  2. 模型属性:

    • coef_:权重向量。
    • intercept_: $ MathJax-Element-49 $ 值。
  3. 模型方法:

    • fit(X,y[,sample_weight]):训练模型。
    • predict(X):用模型进行预测,返回预测值。
    • score(X,y[,sample_weight]):返回模型的预测性能得分。

1.2 Ridge

  1. Ridge类实现了岭回归模型。其原型为:

    
    
    xxxxxxxxxx
    class sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, tol=0.001, solver='auto', random_state=None)
    • alpha: $ MathJax-Element-84 $ 值,用于缓解过拟合。

    • max_iter: 指定最大迭代次数。

    • tol:一个浮点数,指定判断迭代收敛与否的阈值。

    • solver:一个字符串,指定求解最优化问题的算法。可以为:

      • 'auto':根据数据集自动选择算法。

      • 'svd':使用奇异值分解来计算回归系数。

      • 'cholesky':使用scipy.linalg.solve函数来求解。

      • 'sparse_cg':使用scipy.sparse.linalg.cg函数来求解。

      • 'lsqr':使用scipy.sparse.linalg.lsqr函数求解。

        它运算速度最快,但是可能老版本的scipy不支持。

      • 'sag':使用Stochastic Average Gradient descent算法求解最优化问题。

    • random_state:用于设定随机数生成器,它在solver=sag时使用。

    • 其它参数参考LinearRegression

  2. 模型属性:

    • coef_:权重向量。
    • intercept_: $ MathJax-Element-49 $ 值。
    • n_iter_:实际迭代次数。
  3. 模型方法: 参考LinearRegression

  4. 下面的示例给出了不同的 $ MathJax-Element-84 $ 值对模型预测能力的影响。

    • 当 $ MathJax-Element-84 $ 超过 1 之后,随着 $ MathJax-Element-84 $ 的增长,预测性能急剧下降。

      这是因为 $ MathJax-Element-84 $ 较大时,正则化项 $ MathJax-Element-24 $ 影响较大,模型趋向于简单。

    • 极端情况下当 $ MathJax-Element-25 $ 时, $ MathJax-Element-26 $ 从而使得正则化项 $ MathJax-Element-27 $ ,此时的模型最简单。

      但是预测预测性能非常差,因为对所有的未知样本,模型都预测为同一个常数 $ MathJax-Element-49 $ 。

    Ridge_alpha

1.3 Lasso

  1. Lasso类实现了Lasso回归模型。其原型为:

    
    
    xxxxxxxxxx
    lass sklearn.linear_model.Lasso(alpha=1.0, fit_intercept=True, normalize=False, precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic')
    • alpha: $ MathJax-Element-84 $ 值,用于缓解过拟合。

    • precompute:一个布尔值或者一个序列。是否提前计算Gram矩阵来加速计算。

    • warm_start:是否从头开始训练。

    • positive:一个布尔值。如果为True,那么强制要求权重向量的分量都为正数。

    • selection:一个字符串,可以为'cyclic'或者'random'。它指定了当每轮迭代的时候,选择权重向量的哪个分量来更新。

      • 'random':更新的时候,随机选择权重向量的一个分量来更新
      • 'cyclic':更新的时候,从前向后依次选择权重向量的一个分量来更新
    • 其它参数参考Ridge

  2. 模型属性:参考Ridge

  3. 模型方法: 参考LinearRegression

  4. 下面的示例给出了不同的 $ MathJax-Element-84 $ 值对模型预测能力的影响。

    当 $ MathJax-Element-84 $ 超过 1 之后,随着 $ MathJax-Element-84 $ 的增长,预测性能急剧下降。原因同Ridge中的分析。

    Lasso_alpha

1.4 ElasticNet

  1. ElasticNet类实现了ElasticNet回归模型。其原型为:

    
    
    xxxxxxxxxx
    class sklearn.linear_model.ElasticNet(alpha=1.0, l1_ratio=0.5, fit_intercept=True, normalize=False, precompute=False, max_iter=1000, copy_X=True, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic')
    • alpha: $ MathJax-Element-84 $ 值 。
    • l1_ratio: $ MathJax-Element-38 $ 值 。
    • 其它参数参考 Lasso
  2. 模型属性:参考 Lasso

  3. 模型方法:参考 Lasso

  4. 下面的示例给出了不同的 $ MathJax-Element-84 $ 值和 $ MathJax-Element-38 $ 值对模型预测能力的影响。

    • 随着 $ MathJax-Element-84 $ 的增大,预测性能下降。因为正则化项为:

      $ \alpha \rho||\mathbf {\vec w}||_1+\frac{\alpha(1- \rho)}{2}||\mathbf {\vec w}||_2^{2}\quad ,\alpha \ge 0 ,1 \ge \rho \ge 0 $
    • $ MathJax-Element-38 $ 影响的是性能下降的速度,因为这个参数控制着 $ MathJax-Element-39 $ 之间的比例 。

    ElasticNet_alpha_rho

1.4 LogisticRegression

  1. LogisticRegression实现了对数几率回归模型。其原型为:

    
    
    xxxxxxxxxx
    class 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:一个字符串,指定了正则化策略。

      • 如果为'l2', 则为 $ MathJax-Element-40 $ 正则化。
      • 如果为'l1',则为 $ MathJax-Element-41 $ 正则化。
    • dual :一个布尔值。

      • 如果为True,则求解对偶形式(只在penalty='l2'solver='liblinear'有对偶形式)。
      • 如果为False,则求解原始形式。
    • C:一个浮点数。它指定了罚项系数的倒数。如果它的值越小,则正则化项越大。

    • class_weight:一个字典或者字符串'balanced' ,指定每个类别的权重。

      • 如果为字典:则字典给出了每个分类的权重。如{class_label: weight}
      • 如果为字符串'balanced':则每个分类的权重与该分类在样本集中出现的频率成反比。
      • 如果未指定,则每个分类的权重都为 1
    • solver:一个字符串,指定了求解最优化问题的算法。可以为下列的值:

      • 'newton-cg':使用牛顿法。
      • 'lbfgs':使用L-BFGS拟牛顿法。
      • 'liblinear':使用liblinear
      • 'sag':使用Stochastic Average Gradient descent算法。

      注意:

      • 对于规模小的数据集,'liblinear'比较适用;对于规模大的数据集,'sag'比较适用。
      • 'newton-cg''lbfgs''sag'只处理penalty='l2'的情况。
    • multi_class:一个字符串,指定对于多分类问题的策略。可以为:

      • 'ovr':采用one-vs-rest策略。
      • 'multinomial':直接采用多分类 logistic回归策略。
    • 其它参数参考ElasticNet

  2. 模型属性:参考ElasticNet

  3. 模型方法:

    • fit(X,y[,sample_weight]):训练模型。
    • predict(X):用模型进行预测,返回预测值。
    • score(X,y[,sample_weight]):返回模型的预测性能得分。
    • predict_log_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率的对数值。
    • predict_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率值。
  4. 下面的示例给出了不同的 C 值对模型预测能力的影响。

    C是正则化项系数的倒数,它越小则正则化项的权重越大。

    • 随着C的增大(即正则化项的减小),LogisticRegression的预测准确率上升。

    • C增大到一定程度(即正则化项减小到一定程度),LogisticRegression的预测准确率维持在较高的水准保持不变。

      事实上,当 C 太大时,正则化项接近于0,此时容易发生过拟合,预测准确率会下降。

    LogisticRegression_C

1.5 LinearDiscriminantAnalysis

  1. LinearDiscriminantAnalysis实现了线性判别分析模型。其原型为:

    
    
    xxxxxxxxxx
    class sklearn.discriminant_analysis.LinearDiscriminantAnalysis(solver='svd', shrinkage=None, priors=None, n_components=None, store_covariance=False, tol=0.0001)
    • solver:一个字符串,指定求解最优化问题的算法。可以为:

      • 'svd':奇异值分解。对于有大规模特征的数据,推荐用这种算法。
      • 'lsqr':最小平方差算法,可以结合shrinkage参数。
      • 'eigen':特征值分解算法,可以结合shrinkage参数。
    • shrinkage:字符串'auto'或者浮点数或者None

      该参数只有在solver='lsqr'或者'eigen'下才有意义。当矩阵求逆时,它会在对角线上增加一个小的数 $ MathJax-Element-44 $ ,防止矩阵为奇异的。其作用相当于正则化。

      • 字符串'auto':根据Ledoit-Wolf引理来自动决定 $ MathJax-Element-44 $ 的大小。
      • None:不使用shrinkage参数。
      • 一个01 之间的浮点数:指定 $ MathJax-Element-44 $ 的值。
    • priors:一个数组,数组中的元素依次指定了每个类别的先验概率。

      如果为None则认为每个类的先验概率都是等可能的。

    • n_components:一个整数,指定了数据降维后的维度(该值必须小于 n_classes-1)

    • store_covariance:一个布尔值。如果为True,则需要额外计算每个类别的协方差矩阵 $ MathJax-Element-45 $ 。

    • tol:一个浮点值。它指定了用于SVD算法中评判迭代收敛的阈值。

  2. 模型属性:

    • coef_:权重向量。
    • intercept_: $ MathJax-Element-49 $ 值。
    • covariance_:一个数组,依次给出了每个类别的协方差矩阵。
    • means_:一个数组,依次给出了每个类别的均值向量。
    • xbar_:给出了整体样本的均值向量。
    • n_iter_:实际迭代次数。
  3. 模型方法: 参考LogisticRegression

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文