scikit感知器偏置
我正在使用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
偏置项是自动学习得到的,你可以在调用了
fit
之后,在clf.intercept_
中找到它(这是一个数组,每个类别有一个偏置项)。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中减去是因为准确率表示的是成功匹配的百分比(成功的衡量标准),而训练误差则是错误的衡量标准。错误有很多种类型……准确率只是其中一种。