【问题标题】:scikit Perceptron biasscikit感知器偏差
【发布时间】:2014-12-09 16:47:36
【问题描述】:

我正在使用 scikit 类 Perceptron 提供的非常基本的线性分类器:

  clf = linear_model.Perceptron(n_iter=12)
  clf.fit(X,Y)

我有一个 X 数组,其中行是实例,列是二进制特征。我的班级有一个 Y 数组。我的数据分为三类。 我有两个问题: 1)感知器算法需要一个偏置项。 scikit 感知器如何处理偏差?我应该在我的输入 X 数据中添加一个“偏差列”(全部)吗?或者 scikit 感知器函数是否会自动向具有特征的 X 数组(输入)添加偏差?还是单独处理偏差? 2)如何找到我的感知器的训练误差?

【问题讨论】:

    标签: python scikit-learn perceptron


    【解决方案1】:

    1) 偏差会被自动处理。如果您不确定,请尝试使用 2 个版本的数据进行训练...您的原始数据和缩放版本(sklearn 中的标准缩放器)。

    2)

    clf = linear_model.Perceptron(n_iter=12)
    clf.fit(X, Y)
    
    training_results = clf.predict(X)
    training_error = 1 - metrics.accuracy_score(training_results, Y)  #or pick your metric from metrics module.
    

    如您所见,如果您在使用您训练的数据进行预测时计算误差,则会给出训练误差。 “测试错误”是指您预测模型尚未“看到”的数据。 我从 1 中减去,因为准确度给出了成功匹配的百分比(成功的衡量标准),而训练误差是错误的衡量标准。错误有很多种...准确度只是其中一种。

    【讨论】:

    • 谢谢!我对数据的两个版本有疑问。原始 X 数据包含我的二进制特征,我没有任何偏差列。缩放后的版本会达到什么效果?
    • 一般来说,缩放数据会使优化算法收敛得更快。在 sklearn 的感知器的构造函数中,fit_intercept 默认为 true...它将学习截距,可以将其视为您学习的偏置单元。如果您已经对数据进行了缩放,请使用 fit_intercept=False 并且您应该获得与使用未缩放数据的默认值相同的结果。
    【解决方案2】:
    1. 偏置项是自动学习的,可以在您调用fit 后在clf.intercept_ 中找到(它是一个每个类一个术语的数组)。

    2. clf.score(X) 给出了X 的准确度。 1 - clf.score(X) 是零一损失(错误)。

    【讨论】:

      猜你喜欢
      • 2014-12-11
      • 2023-03-11
      • 2017-03-15
      • 2011-08-13
      • 1970-01-01
      • 2020-11-04
      • 2017-09-27
      • 1970-01-01
      • 2018-05-28
      相关资源
      最近更新 更多