gpt4 book ai didi

scikit-learn - LinearSVC() 不同于 SVC(kernel ='linear')

转载 作者:行者123 更新时间:2023-12-01 04:58:44 24 4
gpt4 key购买 nike

当数据有偏移(不以零为中心)时,LinearSVC()SVC(kernel='linear')正在给出截然不同的结果。 (编辑:问题可能在于它不处理非规范化数据。)

import matplotlib.pyplot as plot
plot.ioff()
import numpy as np
from sklearn.datasets.samples_generator import make_blobs
from sklearn.svm import LinearSVC, SVC


def plot_hyperplane(m, X):
w = m.coef_[0]
a = -w[0] / w[1]
xx = np.linspace(np.min(X[:, 0]), np.max(X[:, 0]))
yy = a*xx - (m.intercept_[0]) / w[1]
plot.plot(xx, yy, 'k-')

X, y = make_blobs(n_samples=100, centers=2, n_features=2,
center_box=(0, 1))
X[y == 0] = X[y == 0] + 100
X[y == 1] = X[y == 1] + 110

for i, m in enumerate((LinearSVC(), SVC(kernel='linear'))):
m.fit(X, y)
plot.subplot(1, 2, i+1)
plot_hyperplane(m, X)

plot.plot(X[y == 0, 0], X[y == 0, 1], 'r.')
plot.plot(X[y == 1, 0], X[y == 1, 1], 'b.')

xv, yv = np.meshgrid(np.linspace(98, 114, 10), np.linspace(98, 114, 10))
_X = np.c_[xv.reshape((xv.size, 1)), yv.reshape((yv.size, 1))]
_y = m.predict(_X)

plot.plot(_X[_y == 0, 0], _X[_y == 0, 1], 'r.', alpha=0.4)
plot.plot(_X[_y == 1, 0], _X[_y == 1, 1], 'b.', alpha=0.4)

plot.show()

这是我得到的结果:

bug

(left=LinearSVC(), right=SVC(kernel='linear'))
sklearn.__version__ = 0.17。但我也在 Ubuntu 14.04 中进行了测试,它带有 0.15。

我想过报告错误,但它似乎太明显是错误。我错过了什么?

最佳答案

阅读文档,他们使用不同的底层实现。 LinearSVC正在使用 liblinear where SVC正在使用 libsvm。

仔细看系数和截距,好像LinearSVC对截距应用正则化,其中 SVC才不是。

通过添加intercept_scaling,我能够获得相同的结果。

LinearSVC(loss='hinge', intercept_scaling=1000)

Comparsion after intercept scaling

关于scikit-learn - LinearSVC() 不同于 SVC(kernel ='linear'),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34811770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com