使用 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 反馈 — 无需本地设置。
此课程中的所有课时
- SVM 理论:间隔与支持向量
- 核技巧:RBF、多项式与 Sigmoid
- 使用 sklearn 进行 SVM 分类
- 用于回归的 SVM(SVR)