Python支持向量机(SVM)详解

Python支持向量机(SVM)详解

Python支持向量机(SVM)详解

支持向量机(Support Vector Machine,简称SVM)是一种常用的机器学习算法,用于分类和回归分析。在本文中,我们将详细介绍Python中如何使用SVM算法进行分类任务。

SVM原理

SVM的原理是通过在不同类别的数据点之间找到一个最优的超平面(或者在高维空间中是一个最优的超平面),从而能够最大化分类的边界。具体来说,SVM试图找到一个超平面,使得将不同类别的数据点分隔开来的间隔最大化。

我们先来看一下一个简单的示例,在本例中我们使用sklearn库中的SVC模型来实现一个线性SVM分类器。

from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练SVM模型
model = SVC(kernel='linear')
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)

运行结果:

准确率: 0.9777777777777777

SVM核技巧

除了线性SVM以外,SVM还支持通过核技巧来处理非线性可分的数据。常用的核函数有线性核、多项式核、高斯核等。我们再来看一个使用高斯核的SVM分类器的示例。

from sklearn.datasets import make_classification
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 生成数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练SVM模型
model = SVC(kernel='rbf')
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)

运行结果:

准确率: 0.9666666666666667

SVM与特征缩放

对于SVM算法,在训练过程中会涉及到特征权重的计算,因此对特征的尺度非常敏感。如果特征的尺度相差很大,可能会影响到SVM的分类性能。因此,在使用SVM之前,通常需要对数据进行特征缩放。

我们再来看一个使用StandardScaler对数据进行特征缩放后再训练SVM分类器的示例。

from sklearn.datasets import make_blobs
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 生成数据集
X, y = make_blobs(n_samples=1000, centers=2, random_state=42)

# 特征缩放
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)

# 训练SVM模型
model = SVC(kernel='linear')
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)

运行结果:

准确率: 1.0

总结

在本文中,我们详细介绍了Python中如何使用SVM算法进行分类任务。我们讨论了SVM的原理、核技巧以及特征缩放等相关内容,并给出了相应的示例代码和运行结果。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程