Python-sklearn-SVM

发布时间:2026/8/12 16:50:39
Python-sklearn-SVM Sklearn 支持向量机SVMsklearn.svm提供 SVC、SVR、NuSVC、NuSVR、OneClassSVM、LinearSVC、LinearSVR。️ 分类 SVM1.SVC— 支持向量分类器 ⭐fromsklearn.svmimportSVC modelSVC(C1.0,# 正则化参数越大越拟合训练集kernelrbf,# linear,poly,rbf,sigmoid,precomputeddegree3,# 多项式核的次数gammascale,# 核系数# scale1/(n_features*X.var())# auto1/n_features# float自定义值越大拟合越紧coef00.0,# 独立项poly 和 sigmoid 核shrinkingTrue,# 启发式收缩加速probabilityFalse,# 是否启用概率估计额外 5-fold CV较慢tol1e-3,cache_size200,# 核缓存MBclass_weightNone,# None 或 balanced 或 dictverboseFalse,max_iter-1,# -1无限制decision_function_shapeovr,# ovr(一对多) 或 ovo(一对一)break_tiesFalse,# 决策函数平票时预测第一类random_stateNone)model.fit(X,y)# 关键属性print(model.support_)# 支持向量的索引print(model.support_vectors_)# 支持向量按索引顺序print(model.n_support_)# 每类的支持向量数量print(model.dual_coef_)# 对偶空间中支持向量的系数print(model.coef_)# 仅 linear 核时可用print(model.intercept_)# 决策函数中的截距print(model.classes_)# 类别标签print(model.n_features_in_)# 特征数print(model.fit_status_)# 0正确拟合print(model.shape_fit_)# 拟合的 (n_SV, n_features)# 预测方法y_predmodel.predict(X)y_scoremodel.decision_function(X)# 到超平面的距离# 概率需 probabilityTrue 训练y_probmodel.predict_proba(X)y_log_probmodel.predict_log_proba(X)2.LinearSVC— 线性支持向量分类器比SVC(kernellinear)更快尤其适合大数据和稀疏数据。fromsklearn.svmimportLinearSVC modelLinearSVC(penaltyl2,# l1 或 l2losssquared_hinge,# hinge 或 squared_hingedualauto,# True/False/auto样本特征时选Falsetol1e-4,C1.0,multi_classovr,# ovr 或 crammer_singerfit_interceptTrue,intercept_scaling1,class_weightNone,verbose0,random_stateNone,max_iter1000)model.fit(X,y)print(model.coef_)print(model.intercept_)y_predmodel.predict(X)y_scoremodel.decision_function(X)3.NuSVC— Nu-支持向量分类器用参数nu替代C来控制支持向量的数量。fromsklearn.svmimportNuSVC modelNuSVC(nu0.5,# 支持向量比例上界 训练误差上界 (0 nu ≤ 1)kernelrbf,degree3,gammascale,coef00.0,shrinkingTrue,probabilityFalse,tol1e-3,cache_size200,class_weightNone,verboseFalse,max_iter-1,decision_function_shapeovr,break_tiesFalse,random_stateNone)model.fit(X,y) 回归 SVM1.SVR— 支持向量回归器 ⭐fromsklearn.svmimportSVR modelSVR(kernelrbf,degree3,gammascale,coef00.0,tol1e-3,C1.0,epsilon0.1,# ε-不敏感带的宽度管状回归shrinkingTrue,cache_size200,verboseFalse,max_iter-1)model.fit(X,y)print(model.support_)print(model.support_vectors_)print(model.dual_coef_)print(model.coef_)# 仅 linear 核print(model.intercept_)print(model.n_support_)y_predmodel.predict(X)2.LinearSVR— 线性支持向量回归器fromsklearn.svmimportLinearSVR modelLinearSVR(epsilon0.0,tol1e-4,C1.0,lossepsilon_insensitive,# epsilon_insensitive 或 squared_epsilon_insensitivefit_interceptTrue,intercept_scaling1.0,dualauto,verbose0,random_stateNone,max_iter1000)model.fit(X,y)3.NuSVR— Nu-支持向量回归器fromsklearn.svmimportNuSVR modelNuSVR(nu0.5,C1.0,kernelrbf,degree3,gammascale,coef00.0,shrinkingTrue,tol1e-3,cache_size200,verboseFalse,max_iter-1)model.fit(X,y)️ 异常检测OneClassSVM— 单类 SVMfromsklearn.svmimportOneClassSVM modelOneClassSVM(kernelrbf,degree3,gammascale,coef00.0,tol1e-3,nu0.5,# 异常比例上界训练误差下界(0 nu ≤ 1)shrinkingTrue,cache_size200,verboseFalse,max_iter-1)model.fit(X)# 预测: 1正常, -1异常y_predmodel.predict(X)scoresmodel.decision_function(X)# 到分离超平面的带符号距离# 获取支持向量信息print(model.support_)print(model.support_vectors_)print(model.n_support_)print(model.dual_coef_)print(model.intercept_)️ 核函数详解# 线性核: K(x, y) xᵀySVC(kernellinear)# 最简单最快LinearSVC()# 大规模线性分类更优# 多项式核: K(x, y) (γxᵀy r)^dSVC(kernelpoly,degree3,gammascale,coef00)# RBF 核高斯核: K(x, y) exp(-γ||x-y||²)SVC(kernelrbf,gammascale)# 默认最通用# Sigmoid 核: K(x, y) tanh(γxᵀy r)SVC(kernelsigmoid,gammascale,coef00)# 自定义核预计算核矩阵gram_matrixcompute_custom_kernel(X)SVC(kernelprecomputed).fit(gram_matrix,y) Gamma 与 C 的影响参数过大过小C过拟合每个点都分类正确欠拟合允许大量错误gamma过拟合高方差复杂边界欠拟合高偏差简单边界调参模板fromsklearn.svmimportSVCfromsklearn.model_selectionimportGridSearchCVimportnumpyasnp param_grid{C:np.logspace(-3,3,7),# 0.001 ... 1000gamma:np.logspace(-3,3,7),# 0.001 ... 1000kernel:[rbf,linear]}svcSVC(random_state42)gridGridSearchCV(svc,param_grid,cv5,scoringaccuracy,n_jobs-1)grid.fit(X_train,y_train)print(fBest:{grid.best_params_}, Score:{grid.best_score_:.3f}) 实践指导使用流程fromsklearn.svmimportSVCfromsklearn.preprocessingimportStandardScalerfromsklearn.pipelineimportmake_pipelinefromsklearn.model_selectionimporttrain_test_split,GridSearchCV# 1. 分割数据X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.2,random_state42,stratifyy)# 2. 构建管道SVM 必须标准化pipelinemake_pipeline(StandardScaler(),SVC(random_state42))# 3. 调参param_grid{svc__C:[0.1,1,10,100],svc__gamma:[scale,auto,0.01,0.1,1],svc__kernel:[rbf,linear]}gridGridSearchCV(pipeline,param_grid,cv5,n_jobs-1,verbose1)grid.fit(X_train,y_train)# 4. 最终评估print(fTest score:{grid.score(X_test,y_test):.3f})print(fBest params:{grid.best_params_})适用场景场景推荐中小数据集 非线性SVC(kernelrbf)大数据集 线性可分LinearSVC特征数 样本数LinearSVC或 LogisticRegression需要概率输出SVC(probabilityTrue)控制支持向量比例NuSVC异常检测/新颖检测OneClassSVM回归 非线性SVR(kernelrbf)⚠️ 重要注意事项必须标准化: SVM 对特征尺度非常敏感务必先StandardScaler样本量大时慢: RBF 核复杂度 O(n²)~O(n³)大样本用LinearSVC或近似方法概率估计额外开销:probabilityTrue会执行 5 折交叉验证不平衡数据: 设置class_weightbalanced[[sklearn-总览|← 返回总览]]