Python支持向量机分类

Python支持向量机分类 # Python支持向量机分类# SVM 通过寻找最大间隔超平面来进行分类# 核技巧 (kernel trick) 让 SVM 能处理非线性可分数据# 1. 导入库import numpy as npfrom sklearn.svm import SVC # 支持向量机分类器from sklearn.datasets import make_classification, make_circlesfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_score# 2. 线性可分数据集X_linear, y_linear make_classification(n_samples200, n_features2, n_redundant0,n_clusters_per_class1, random_state42)Xl_train, Xl_test, yl_train, yl_test train_test_split(X_linear, y_linear, test_size0.2, random_state42)# 3. 线性核 SVM适用于线性可分数据svm_linear SVC(kernellinear, C1.0, random_state42)svm_linear.fit(Xl_train, yl_train)y_pred_linear svm_linear.predict(Xl_test)acc_linear accuracy_score(yl_test, y_pred_linear)print(f线性核准确率: {acc_linear:.4f})print(f支持向量个数: {sum(svm_linear.n_support_)}) # 决策边界由这些点决定# 4. 非线性数据集同心圆X_circles, y_circles make_circles(n_samples300, noise0.1, factor0.5, random_state42)Xc_train, Xc_test, yc_train, yc_test train_test_split(X_circles, y_circles, test_size0.2, random_state42)# 线性核在非线性数据上表现差svm_linear_fail SVC(kernellinear, C1.0)svm_linear_fail.fit(Xc_train, yc_train)print(f\n非线性数据—线性核准确率: {svm_linear_fail.score(Xc_test, yc_test):.4f})# 5. RBF 核径向基函数处理非线性数据的最佳选择svm_rbf SVC(kernelrbf, C1.0, gammascale, random_state42)svm_rbf.fit(Xc_train, yc_train)acc_rbf svm_rbf.score(Xc_test, yc_test)print(fRBF 核准确率: {acc_rbf:.4f})# 6. 多项式核适用于特定模式的数据svm_poly SVC(kernelpoly, degree3, C1.0, gammascale, random_state42)svm_poly.fit(Xc_train, yc_train)acc_poly svm_poly.score(Xc_test, yc_test)print(f多项式核 (degree3) 准确率: {acc_poly:.4f})# 7. 参数 C 的影响正则化参数# C 越大对错误分类的惩罚越大决策边界越复杂可能过拟合# C 越小允许更多错误边界更平滑可能欠拟合C_values [0.01, 0.1, 1.0, 10.0, 100.0]for C in C_values:svm SVC(kernelrbf, CC, gammascale, random_state42)svm.fit(Xc_train, yc_train)acc svm.score(Xc_test, yc_test)print(f C{C:6.2f}: 准确率{acc:.4f}, 支持向量数{sum(svm.n_support_)})# 8. 参数 gamma 的影响仅 RBF/Poly 核有效# gamma 控制 RBF 核的影响半径# gamma 越大每个支持向量的影响范围越小可能过拟合# gamma 越小影响范围越大可能欠拟合gamma_values [0.01, 0.1, 1.0, 10.0]print(f\ngamma 参数影响 (C1.0):)for gamma in gamma_values:svm SVC(kernelrbf, C1.0, gammagamma, random_state42)svm.fit(Xc_train, yc_train)acc svm.score(Xc_test, yc_test)print(f gamma{gamma:5.2f}: 准确率{acc:.4f})# 9. SVM 决策函数decision_vals svm_rbf.decision_function(Xc_test[:5])print(f\n前 5 个样本的决策函数值: {decision_vals})# 正数表示类别 1负数表示类别 0# 绝对值越大样本离决策边界越远分类信心越强# 10. 总结# SVM 关键参数:# - kernel: linear / rbf / poly / sigmoid# - C: 错误惩罚系数平衡 margin 宽度和错误率# - gamma: RBF/poly 核的参数控制影响范围# SVM 的核心思想: 找到最大间隔超平面支持向量是关键的边界点