0Pricing
Learn AI with Python · 课时

使用 sklearn 进行 SVM 分类

SVC、LinearSVC、核函数选择、class_weight='balanced'、probability=True。

使用 sklearn 进行 SVM 分类 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

scikit-learn 中的 SVM

scikit-learn 提供多个 SVM 分类器。其中主要的是SVC,它通过kernel参数支持线性边界和核边界。

from sklearn.svm import SVC

model = SVC(kernel="rbf", C=1.0, gamma="scale")
model.fit(Xtr, ytr)
print(model.score(Xte, yte))

SVC 的核心参数

三个参数决定 SVC 的行为:

  • kernel边界类型(线性、RBF、多项式)
  • C错误惩罚/正则化
  • gammaRBF/多项式核的宽度
from sklearn.svm import SVC

model = SVC(kernel="rbf", C=10, gamma=0.1)

始终先进行缩放

SVM 对尺度敏感。请将缩放器和 SVC 包装在流水线中,这样即使在交叉验证过程中,缩放也只会在训练数据上执行 fit。

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

pipe = make_pipeline(StandardScaler(), SVC(kernel="rbf"))
pipe.fit(Xtr, ytr)

用于大型数据集的 LinearSVC

SVC(kernel="linear")无法很好地扩展到大量样本。LinearSVC使用针对线性问题优化的更快求解器,处理大型高维数据的能力要强得多。

from sklearn.svm import LinearSVC

model = LinearSVC(C=1.0, max_iter=5000)
model.fit(Xtr, ytr)

SVC 与 LinearSVC

对于大型或稀疏数据(例如文本),请使用LinearSVC。当您需要使用核来处理非线性边界时,请使用SVC。请注意,LinearSVC 使用略有不同的损失函数,并且没有predict_proba。

类别不平衡

当一个类别较为稀少时,SVM 往往会偏向多数类别。设置class_weight="balanced"后,系统会根据类别频率的倒数自动设置类别权重。

from sklearn.svm import SVC

model = SVC(kernel="rbf", class_weight="balanced")
model.fit(Xtr, ytr)

自定义类别权重

您还可以向 class_weight 传入一个显式字典,以比自动平衡更高的权重强调特定类别。

from sklearn.svm import SVC

model = SVC(class_weight={0: 1, 1: 5})  # class 1 errors cost 5x

概率估计

SVC 默认返回硬标签。设置 probability=True 可启用 predict_proba(通过内部校准实现),这是计算 ROC AUC 和调整阈值所必需的,但会降低训练速度。

from sklearn.svm import SVC

model = SVC(probability=True)
model.fit(Xtr, ytr)
proba = model.predict_proba(Xte)[:, 1]

多分类 SVM

SVC 会自动使用一对一方案处理两个以上的类别。您无需修改代码,只需使用多分类标签进行拟合即可正常工作。

from sklearn.svm import SVC

model = SVC(decision_function_shape="ovr")
model.fit(X_multiclass, y_multiclass)

使用 GridSearchCV 调优 C 和 γ

标准做法是在缩放流水线中,以对数尺度对 C 和 gamma 进行网格搜索。

from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

pipe = make_pipeline(StandardScaler(), SVC(kernel="rbf"))
param = {
    "svc__C": [0.1, 1, 10, 100],
    "svc__gamma": [0.001, 0.01, 0.1, 1],
}
gs = GridSearchCV(pipe, param, cv=5, scoring="f1")
gs.fit(Xtr, ytr)
print(gs.best_params_)

实用技巧

SVM 适合具有清晰间隔的小型到中型数据集。在非常大的数据集上表现较差(请使用 LinearSVC 或改用提升方法)。务必进行缩放、调优 C 和 γ,并使用 class_weight 处理类别不平衡。

快速检查

测试您对 sklearn SVM 的了解。

总结

总结:对于非线性分类,请使用带有 kernel、C 和 gamma 的 SVC,并始终将其置于缩放流水线中。对于大型数据或文本数据,请切换到 LinearSVC。使用 class_weight="balanced" 处理类别不平衡,并使用 GridSearchCV 联合调优 C 和 gamma。

常见问题解答

「使用 sklearn 进行 SVM 分类」课时是免费的吗?

是的 — 「使用 sklearn 进行 SVM 分类」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「使用 sklearn 进行 SVM 分类」这节课中我会学到什么?

SVC、LinearSVC、核函数选择、class_weight='balanced'、probability=True。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「使用 sklearn 进行 SVM 分类」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. SVM 理论:间隔与支持向量
  2. 核技巧:RBF、多项式与 Sigmoid
  3. 使用 sklearn 进行 SVM 分类
  4. 用于回归的 SVM(SVR)
← 返回 Learn AI with Python