我是靠谱客的博主 怡然冬日,最近开发中收集的这篇文章主要介绍scikit-learn 中 SVM 的使用1 线性 SVM 分类器2 非线性 SVM 分类器3 SVM 回归,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
1 线性 SVM 分类器
import numpy as np
from sklearn import datasets
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC
# sklearn 自带数据
iris = datasets.load_iris()
X = iris["data"][:, (2, 3)] # petal length, petal width
y = (iris["target"] == 2).astype(np.float64) # Iris virginica
svm_clf = Pipeline([
# SVM 需要对数据做归一化处理
("scaler", StandardScaler()),
# C越小,间距 margin 越大,容错率越高(允许更多的实例分错)
("linear_svc", LinearSVC(C=1, loss="hinge", random_state=42)),
])
# 训练
svm_clf.fit(X, y)
# 预测
svm_clf.predict([[5.5, 1.7]])
# 直接返回类别
>>>array([1.])
线性 SVM 优点:速度快
2 非线性 SVM 分类器
from sklearn.datasets import make_moons
X, y = make_moons(n_samples=100, noise=0.15, random_state=42)
from sklearn.svm import SVC
poly_kernel_svm_clf = Pipeline([
("scaler", StandardScaler()),
("svm_clf", SVC(kernel="poly", degree=3, coef0=1, C=5))
])
poly_kernel_svm_clf.fit(X, y)
# Gaussian RBF Kernel
rbf_kernel_svm_clf = Pipeline([
("scaler", StandardScaler()),
# gamma控制rbf钟形曲线得宽窄:gamma较小时钟形曲线较宽,实例影响更大,当模型过拟合时,减小gamma值,同 C 得调整一样
("svm_clf", SVC(kernel="rbf", gamma=5, C=0.001))
])
rbf_kernel_svm_clf.fit(X, y)
关于 kernel 的选择:
1 首选 linear kernel,在 scikit-learn 中 LinearSVC 比 SVC(kernel=“linear”) 要快,特别是训练集特别大时候,首选 LinearSVC
2 线性kernel 效果不好时再尝试 Gaussian RBF kernel,大部分时候 RBF 都能由较好的效果
3 有时间可以用 cross-validation 和 grid search 尝试其它 kernel
3 SVM 回归
# 线性回归
np.random.seed(42)
m = 50
X = 2 * np.random.rand(m, 1)
y = (4 + 3 * X + np.random.randn(m, 1)).ravel()
from sklearn.svm import LinearSVR
svm_reg = LinearSVR(epsilon=1.5, random_state=42)
svm_reg.fit(X, y)
from sklearn.svm import SVR
# 设置kernel非线性回归
svm_poly_reg = SVR(kernel="poly", degree=2, C=100, epsilon=0.1, gamma="scale")
svm_poly_reg.fit(X, y)
关于 SVM 的原理可以参考 SVM 原理详细推导
参考:
Hands-on Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition
最后
以上就是怡然冬日为你收集整理的scikit-learn 中 SVM 的使用1 线性 SVM 分类器2 非线性 SVM 分类器3 SVM 回归的全部内容,希望文章能够帮你解决scikit-learn 中 SVM 的使用1 线性 SVM 分类器2 非线性 SVM 分类器3 SVM 回归所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复