📅  最后修改于: 2023-12-03 15:22:19.679000             🧑  作者: Mango
支持向量机(Support Vector Machine, SVM)是一种常见的机器学习算法,被广泛用于模式识别、计算机视觉和自然语言处理等领域。它的基本思想是通过寻找一个最优的边界,将不同类别的数据分割开来。
SVM是一种监督学习算法,也就是说需要事先准备好带标签的数据集。对于二分类问题(即数据只有两个类别),SVM会尝试找到一个超平面(在二维空间中就是一条直线),使得数据点中所属不同类别的点尽可能被分开。
在Python中,可以使用scikit-learn
库来实现SVM。scikit-learn
是一个流行的Python机器学习库,提供了大量的机器学习算法实现,包括SVM。
首先需要确保scikit-learn
库已经安装。可以使用pip工具进行安装,命令如下:
pip install -U scikit-learn
接下来我们需要准备数据集。这里我们使用Iris数据集,这是一个常用的分类数据集,包含三种不同的鸢尾花,每种鸢尾花有四个特征。我们将使用SVM尝试将不同种类的鸢尾花分开。
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
接下来我们需要对数据进行预处理,包括归一化、标准化等操作。这里我们使用StandardScaler
类对数据进行标准化处理。
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X = scaler.fit_transform(X)
接下来我们需要将数据集拆分为训练集和测试集。训练集用于训练模型,测试集用于测试模型的性能。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.3,
random_state=42)
接下来我们可以使用SVC
类来训练SVM模型,其中C
参数表示正则化参数,kernel
参数表示核函数,这里使用默认参数rbf
。
from sklearn.svm import SVC
model = SVC()
model.fit(X_train, y_train)
接下来我们可以使用测试集来测试模型的性能。
from sklearn.metrics import accuracy_score
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)
下面是完整代码。
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 数据预处理
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.3,
random_state=42)
# 训练模型
model = SVC()
model.fit(X_train, y_train)
# 测试模型
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)
使用SVM对Iris数据集进行分类,可以得到约97%的准确率。SVM是一种有效的分类算法,可用于许多不同的机器学习任务。