当前位置:   article > 正文

非线性支持向量机(SVM)

非线性支持向量机(SVM)
理论知识推导

支持向量机(SVM)是一种用于分类和回归分析的监督学习模型。在处理非线性数据时,线性SVM可能无法很好地分离数据。为了解决这个问题,我们使用核函数将低维空间的非线性数据映射到高维空间,使得在高维空间中可以线性分离。

核函数

非线性SVM的目标函数

目标是找到最优分离超平面,使得分类间隔最大。其优化问题如下:

实施步骤与参数解读

  1. 导入库
  2. 生成多维数据集
  3. 数据标准化
  4. 分割数据集
  5. 训练未优化的非线性SVM模型
  6. 预测并评估未优化模型
  7. 优化模型(调整核函数和参数)
  8. 训练优化后的非线性SVM模型
  9. 预测并评估优化后的模型
  10. 可视化结果
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from sklearn import datasets
  4. from sklearn.model_selection import train_test_split
  5. from sklearn.preprocessing import StandardScaler
  6. from sklearn.svm import SVC
  7. from sklearn.metrics import classification_report, accuracy_score
  8. # 设置全局字体为楷体
  9. plt.rcParams['font.family'] = 'KaiTi'
  10. # 生成多维数据集
  11. X, y = datasets.make_classification(n_samples=500, n_features=5, n_informative=3, n_redundant=2, random_state=42)
  12. # 数据标准化
  13. scaler = StandardScaler()
  14. X = scaler.fit_transform(X)
  15. # 数据集划分
  16. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  17. # 未优化模型
  18. clf_unoptimized = SVC(kernel='rbf')
  19. clf_unoptimized.fit(X_train, y_train)
  20. y_pred_unoptimized = clf_unoptimized.predict(X_test)
  21. # 输出未优化模型的结果
  22. print("未优化模型的分类报告:")
  23. print(classification_report(y_test, y_pred_unoptimized))
  24. print("未优化模型的准确率:", accuracy_score(y_test, y_pred_unoptimized))
  25. # 优化后的模型
  26. clf_optimized = SVC(kernel='rbf', C=10, gamma=0.1)
  27. clf_optimized.fit(X_train, y_train)
  28. y_pred_optimized = clf_optimized.predict(X_test)
  29. # 输出优化后的模型的结果
  30. print("优化后的模型的分类报告:")
  31. print(classification_report(y_test, y_pred_optimized))
  32. print("优化后的模型的准确率:", accuracy_score(y_test, y_pred_optimized))
  33. # 可视化
  34. plt.figure(figsize=(12, 6))
  35. # 选取二维特征进行可视化
  36. X_vis = X_test[:, :2]
  37. y_vis = y_test
  38. # 未优化模型的可视化
  39. plt.subplot(1, 2, 1)
  40. plt.scatter(X_vis[y_vis == 0][:, 0], X_vis[y_vis == 0][:, 1], color='blue', label='Class 0')
  41. plt.scatter(X_vis[y_vis == 1][:, 0], X_vis[y_vis == 1][:, 1], color='red', label='Class 1')
  42. plt.title('未优化模型')
  43. plt.xlabel('Feature 1')
  44. plt.ylabel('Feature 2')
  45. plt.legend()
  46. # 优化后的模型的可视化
  47. plt.subplot(1, 2, 2)
  48. plt.scatter(X_vis[y_vis == 0][:, 0], X_vis[y_vis == 0][:, 1], color='blue', label='Class 0')
  49. plt.scatter(X_vis[y_vis == 1][:, 0], X_vis[y_vis == 1][:, 1], color='red', label='Class 1')
  50. plt.title('优化后的模型')
  51. plt.xlabel('Feature 1')
  52. plt.ylabel('Feature 2')
  53. plt.legend()
  54. plt.show()

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号