SVM(支持向量机)是一种常用的机器学习算法,它通过寻找最优的超平面来区分不同的类别。本文将详细介绍如何使用Python实现SVM算法,包括理论基础、代码实现以及实战案例。
一、SVM算法概述
SVM算法的核心思想是寻找一个最优的超平面,使得数据集中的不同类别尽可能地分开。这个超平面被称为最大间隔超平面,因为它在所有可能的超平面中具有最大的间隔。
1.1 SVM的数学表达
对于线性可分的数据集,SVM的数学表达式如下:
[ \text{max}\ \frac{1}{2}||w||^2 ]
其中,( w ) 是权重向量,( b ) 是偏置项,( x ) 是输入向量,( y ) 是标签。
1.2 SVM的决策函数
SVM的决策函数为:
[ f(x) = w \cdot x + b ]
其中,( w ) 和 ( b ) 由SVM算法的优化过程得到。
二、Python实现SVM算法
在Python中,我们可以使用scikit-learn库来实现SVM算法。下面是使用scikit-learn实现SVM算法的步骤:
2.1 导入必要的库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
2.2 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
2.3 数据预处理
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
# 标准化特征
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
2.4 创建SVM模型并训练
# 创建SVM模型
clf = SVC(kernel='linear', C=1.0)
# 训练模型
clf.fit(X_train, y_train)
2.5 模型评估
# 预测测试集
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = clf.score(X_test, y_test)
print("准确率:", accuracy)
三、实战案例
下面我们将使用SVM算法对鸢尾花数据集进行分类。
3.1 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
3.2 数据预处理
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
# 标准化特征
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
3.3 创建SVM模型并训练
# 创建SVM模型
clf = SVC(kernel='linear', C=1.0)
# 训练模型
clf.fit(X_train, y_train)
3.4 模型评估
# 预测测试集
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = clf.score(X_test, y_test)
print("准确率:", accuracy)
通过以上步骤,我们可以使用Python实现SVM算法,并对鸢尾花数据集进行分类。在实际应用中,我们可以根据具体问题调整SVM算法的参数,以获得更好的分类效果。