引言
支持向量机(Support Vector Machine,SVM)是一种强大的机器学习算法,广泛应用于分类和回归问题。Scikit-learn库提供了对SVM算法的实现,使得使用SVM变得简单而高效。本文将通过一个实战案例,带你轻松入门Scikit-learn中的SVM。
SVM简介
SVM的目标是找到一个超平面,将不同类别的样本点尽可能地分开。在二分类问题中,SVM通过最大化两类样本点之间的间隔来实现这一点。SVM可以处理线性可分和线性不可分的数据,通过核函数将数据映射到高维空间,实现非线性分类。
实战案例:鸢尾花数据集分类
在本案例中,我们将使用鸢尾花数据集,通过SVM进行分类。
1. 数据加载与预处理
首先,我们需要加载鸢尾花数据集,并进行预处理。
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 加载数据集
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.2, random_state=42)
# 特征标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
2. SVM模型训练
接下来,我们使用SVM模型进行训练。
from sklearn.svm import SVC
# 实例化SVM模型
model = SVC(kernel='linear')
# 训练模型
model.fit(X_train, y_train)
3. 模型评估
使用测试集评估模型的性能。
from sklearn.metrics import classification_report, accuracy_score
# 预测
y_pred = model.predict(X_test)
# 评估
print(classification_report(y_test, y_pred))
print("Accuracy:", accuracy_score(y_test, y_pred))
4. 模型参数调优
为了提高模型的性能,我们可以对SVM的参数进行调优。
from sklearn.model_selection import GridSearchCV
# 参数网格
param_grid = {
'C': [0.1, 1, 10],
'kernel': ['linear', 'rbf'],
'gamma': [0.001, 0.01, 0.1, 1]
}
# 实例化网格搜索
grid_search = GridSearchCV(model, param_grid, cv=5)
# 搜索最佳参数
grid_search.fit(X_train, y_train)
# 输出最佳参数
print("Best parameters:", grid_search.best_params_)
总结
通过本文的实战案例,我们了解了Scikit-learn中SVM的基本用法,包括数据预处理、模型训练、评估和参数调优。SVM是一种强大的机器学习算法,在多个领域都有广泛的应用。希望本文能帮助你轻松入门SVM。