scikit感知器偏置

2 投票
2 回答
2260 浏览
提问于 2025-04-27 14:03

我正在使用scikit-learn库里非常基础的线性分类器,叫做感知器(Perceptron):

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

我有一个X数组,里面的每一行代表一个实例,每一列是一个二进制特征。我还有一个Y数组,里面是我的分类标签。我的数据有三种类别。
我有两个问题:
1)感知器算法需要一个偏置项(bias term)。那么scikit-learn的感知器是怎么处理这个偏置的呢?我需要在输入的X数据中添加一列“偏置列”(全是1)吗?还是说scikit-learn的感知器函数会自动在X数组中添加偏置?或者它是单独处理偏置的?
2)我该如何找到我的感知器的训练误差呢?

暂无标签

2 个回答

2
  1. 偏置项是自动学习得到的,你可以在调用了 fit 之后,在 clf.intercept_ 中找到它(这是一个数组,每个类别有一个偏置项)。

  2. clf.score(X) 会给出在 X 上的准确率。1 - clf.score(X) 就是零一损失(错误率)。

2

1) 偏差会自动处理。如果你不确定,可以尝试用两种版本的数据进行训练……一种是你原始的数据,另一种是经过缩放处理的数据(可以使用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中减去是因为准确率表示的是成功匹配的百分比(成功的衡量标准),而训练误差则是错误的衡量标准。错误有很多种类型……准确率只是其中一种。

撰写回答