赞
踩
API文档:sklearn.svm.SVC-scikit-learn中文社区
- import numpy as np
- import os
- # %matplotlib inline
- import matplotlib
- import matplotlib.pyplot as plt
-
- plt.rcParams['axes.labelsize'] = 14
- plt.rcParams['xtick.labelsize'] = 12
- plt.rcParams['ytick.labelsize'] = 12
- import warnings
-
- warnings.filterwarnings('ignore')
-
- '''导入库与数据集(鸢尾花数据集)'''
- from sklearn.svm import SVC
- from sklearn import datasets
-
- iris = datasets.load_iris()
- X = iris["data"][:, (2, 3)] ##选择全部样本 仅选择两个特征是便于展示。
- y = iris["target"]
- ###为了演示方便,将三分类问题转化为二分类问题便于决策边界的展示
- setosa_or_versicolor = (y == 0) | (y == 1) ##获得y为1与0值的索引值
- X = X[setosa_or_versicolor]
- y = y[setosa_or_versicolor]
-
- svm_clf = SVC(kernel="linear", C=1e12)
- ##使用线性核函数举例 先不管C值参数(控制过拟合)
- svm_clf.fit(X, y)
-
- '''绘制支持向量机决策边界'''
-
-
- def plot_decision_boundary(svm_clf, xmin, xmax, sv=True):
- w = svm_clf.coef_[0] # 权重参数 得到的为二维数据
- b = svm_clf.intercept_[0] # 偏置参数
- x0 = np.linspace(xmin, xmax, 200)
- decision_boundary = -w[0] / w[1] * x0 - b / w[1] ##此处是求解x1 需要根据求解公式解出
- margin = 1 / w[1]
- gutter_up = decision_boundary + margin ##边界上
- gutter_down = decision_boundary - margin # 边界下
- if sv:
- svs = svm_clf.support_vectors_ ##得到支持向量 点数据
- plt.scatter(svs[:, 0], svs[:, 1], s=180, facecolors="#FFAAAA")
- plt.plot(x0, decision_boundary, 'k-', linewidth=2)
- plt.plot(x0, gutter_up, 'k--', linewidth=2)
- plt.plot(x0, gutter_down, 'k--', linewidth=2)
-
-
- '''绘制SVM决策边界'''
- plt.figure(figsize=(7, 4))
- plot_decision_boundary(svm_clf, 0, 5.5, sv=True)
- ###绘制数据点
- plt.plot(X[:, 0][y == 1], X[:, 1][y == 1], 'bs')
- plt.plot(X[:, 0][y == 0], X[:, 1][y == 0], 'ys')
- plt.axis([0, 5.5, 0, 2])
- plt.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。