下面我来为你详细讲解Python实现SVM支持向量机的示例代码的完整攻略。
SVM简介
SVM(Support Vector Machine)是一种用于分类、回归以及异常检测的机器学习算法,它可以将数据集映射到高维空间中,从而将非线性问题转化为线性问题。SVM的核心是找到最大间隔超平面,这个过程就是优化超平面离支持向量最远的距离,而支持向量是离超平面最近的样本点。
SVM的实现步骤
SVM的实现步骤主要包括以下几个方面:
- 数据准备:准备要用来训练的数据集,数据集的标签需要区分开来。包括特征数据和标签数据两部分。
- 训练模型:使用SVM算法对数据进行训练,得到训练好的模型。
- 预测数据:使用训练好的模型对新数据进行分类。
SVM的Python实现示例
下面我将介绍SVM在Python中的实现过程,并使用两个示例代码说明。
示例1:使用Python实现线性SVM
首先我们需要安装支持向量机算法相关的Python库,如scikit-learn、numpy和pandas:
!pip install scikit-learn numpy pandas
然后,我们可以使用经典的IRIS数据集进行试验,该数据集包含150个样本,被分成3类,每类50个数据,每个样本包含4个属性。我们可以使用Pandas库将数据加载为一个Pandas数据框:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data[:, :2]
y = iris.target
iris_df = pd.DataFrame(X, columns=iris.feature_names[:2])
iris_df['target'] = y
在准备好数据后,我们可以对其进行可视化处理以更好地了解数据之间的分布情况:
plt.scatter(X[:,0], X[:,1], c=y)
plt.xlabel('Sepal Length')
plt.ylabel('Sepal Width')
plt.show()
接下来,我们将使用scikit-learn中的SVC模型进行训练和预测。首先,我们需要将数据集分为训练集和测试集:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=42)
然后,我们可以使用SVC模型对训练数据进行拟合,并使用测试数据进行预测:
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
svc = SVC(kernel='linear')
svc.fit(X_train, y_train)
y_pred = svc.predict(X_test)
最后,我们可以使用accuracy_score函数计算预测准确度:
accuracy_score(y_test, y_pred)
示例2:使用Python实现非线性SVM
SVM除了线性模型外,还有一种非线性模型,叫做核函数SVM。SVM在高维空间中进行分类,如果数据线性不可分,则可以采用核函数的方法,将低维的数据空间映射到高维的空间中,使得在高维空间中线性可分,从而可以使用线性分类器进行分类。
我们将使用鸢尾花数据集进行训练,该数据集包含150个样本,被分成3类,每类50个数据,每个样本包含4个属性。我们可以使用Pandas库将数据加载为一个Pandas数据框:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data[:, :2]
y = iris.target
iris_df = pd.DataFrame(X, columns=iris.feature_names[:2])
iris_df['target'] = y
与示例1不同的是,我们将使用rbf核函数对数据进行非线性拟合:
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
svc = SVC(kernel='rbf')
svc.fit(X_train, y_train)
y_pred = svc.predict(X_test)
accuracy_score(y_test, y_pred)
这样,我们就成功实现了非线性SVM的模型训练和预测。
总之,SVM是一种非常重要的分类算法,非常适合二分类和多分类问题,同时也可以处理非线性问题。在Python中,SVM可以使用scikit-learn等库进行实现,灵活易用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现SVM支持向量机的示例代码 - Python技术站