第L6周:支持向量机实战
- 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
- 🍖 原作者:K同学啊
线性
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 数据预处理
sc = StandardScaler()
X = sc.fit_transform(X)
# 训练集和测试集的分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建SVM模型
svm = SVC(kernel='linear', C=1.0)
'''1. kernel(默认值:'rbf')
○ 作用:指定要使用的核函数,支持不同的非线性映射方法。
○ 可选值:
■ 'linear':线性核函数,即不进行任何非线性映射。
■ 'poly':多项式核函数,通常用于多项式可分的情况。
■ 'rbf':径向基函数(Radial Basis Function),又称高斯核,是最常用的非线性核函数。
■ 'sigmoid':类似于神经网络的激活函数,较少使用。
■ 你也可以传递自定义核函数,方法是传递一个函数。
2.C (默认值:1.0)
○ 作用:惩罚参数,用于平衡最大化分类间隔和误分类惩罚之间的关系。
○ 解释:较大的 C 值意味着对误分类的惩罚更大,模型会倾向于将更多的训练数据点分类正确,但可能会导致间隔变小,可能出现过拟合;较小的 C 值则会更关注于间隔的大小,而允许更多的误分类,从而提高模型的泛化能力。
○ 常用范围:通常在 0.001 到 1000 之间进行调节。
'''
# 训练模型
svm.fit(X_train, y_train)
# 预测
y_pred = svm.predict(X_test)
# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy: %.2f' % (accuracy * 100.0))
Accuracy: 97.78
非线性
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 数据预处理
sc = StandardScaler()
X = sc.fit_transform(X)
# 训练集和测试集的分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建SVM模型
svm = SVC(kernel='rbf', C=1.0, gamma=0.1)
'''
4. gamma(默认值:'scale')
○ 作用:核函数系数,适用于 'rbf'、'poly' 和 'sigmoid' 核函数。
○ 可选值:
■ 'scale':使用 1 / (n_features * X.var()) 作为默认值。这个值会根据输入特征的数量和方差自动调整。
■ 'auto':使用 1 / n_features 作为值。
○ 解释:gamma 值越大,模型越倾向于拟合训练数据,但可能会导致过拟合;gamma 值越小,模型更倾向于平滑。
'''
# 训练模型
svm.fit(X_train, y_train)
# 预测
y_pred = svm.predict(X_test)
# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy: %.2f' % (accuracy * 100.0))
Accuracy: 100.00
总结收获:
1、学会调用scikit-learn库实现线性与非线性SVM
2、了解SVM的一些相关参数
SVM在处理小样本数据、高维特征空间和非线性问题时表现出色,但对于大规模数据集和缺失数据的处理相对困难。同时,在模型的解释性方面也存在一定的挑战。