赞
踩
支持向量机(SVM,Support Vector Machines)是一种广泛使用的监督学习方法,适用于分类、回归和其他任务。SVM的核心思想是找到一个最优的决策边界(在二维空间中是一条线,在更高维度是一个超平面),以此来区分不同类别的数据点。SVM试图将这个决策边界与最近的训练数据点(即支持向量)之间的距离最大化,以增强模型的泛化能力。
下面是SVM从底层到高层的详细讲解:
线性SVM专注于在数据特征空间中寻找一个最优的线性超平面,该超平面能够正确分离不同类别的数据点。
当数据不是线性可分时,线性SVM就无法有效工作。这时,可以应用核技巧将原始特征映射到一个更高维的空间,使得数据在这个新空间中线性可分。
虽然SVM本质上是一个二分类器,但它可以通过一对一(OvO)或一对多(OvR)策略被扩展到多类分类问题。
应不同类型的数据特征分布,包括线性和非线性关系。
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
# 加载数据集,这里我们使用内置的鸢尾花(Iris)数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 为了简化问题,我们只使用前两个特征,并且只处理二分类问题
X = X[:, :2]
y = y[y < 2]
# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 特征缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 训练线性SVM分类器
svm = SVC(kernel='linear', C=1.0)
svm.fit(X_train_scaled, y_train)
# 测试集上的准确率
accuracy = svm.score(X_test_scaled, y_test)
print(f"测试集准确率: {accuracy:.2f}")
这段代码首先加载鸢尾花数据集,然后选择了前两个特征和两个类别来简化为一个二分类问题。之后,数据集被划分为训练集和测试集,特征进行了标准化处理(这是SVM训练前的重要步骤之一)。最后,使用线性核函数训练SVM分类器,并在测试集上评估其准确率。
注意,这个简单的例子只使用了线性核,并且处理了一个二分类问题。对于非线性可分的数据集,你可能需要使用不同的核函数(如RBF核),Scikit-learn的SVC类同样支持通过kernel参数选择不同的核函数。而且,对于多类分类问题,Scikit-learn会自动应用一对一(OvO)或一对多(OvR)策略,无需用户手动实现。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。