深度学习笔记
像在matlab中的使⽤⼀样, python可以使⽤libsvm,但是python提供了在libsvm基础上封装过的, 并且更加易于使⽤,并且功能更加强⼤的API, sklearn.svm。其中使⽤最常⽤的是svm.SVC和 svm.SVR(当然也可以在sklearn.svm.libsvm中调⽤libsvm,以下是SVC和SVR的介绍 ### 深度学习笔记:理解SVM与Python中的实现 #### SVM简介 支持向量机(SVM, Support Vector Machine)是一种广泛应用于分类与回归分析的监督学习模型。其核心思想是找到一个最优决策边界(即超平面),使得不同类别之间的间隔最大化。这种最大间隔不仅有助于提高模型的泛化能力,还能够减少过拟合的风险。 #### Python中的SVM实现 Python作为一门强大的编程语言,在数据科学领域有着广泛的应用。特别是在机器学习方面,Python提供了丰富的库来支持各种算法的实现,其中包括非常著名的Scikit-Learn库。Scikit-Learn库中的`sklearn.svm`模块为用户提供了一个易于使用且功能强大的API,该API是在libsvm的基础上进行封装的。 #### `sklearn.svm.SVC` `sklearn.svm.SVC`是Scikit-Learn提供的用于支持向量分类的类。它提供了多种内核函数供选择,并允许用户自定义参数以适应不同的数据集。下面详细介绍`sklearn.svm.SVC`的关键参数: - **C**: 正则化参数,默认值为1.0。该参数控制了错误项的惩罚程度。较小的C值意味着对错误项的惩罚较小,因此模型倾向于寻找更大的间隔但可能会导致一些训练样本被错误分类;较大的C值意味着对错误项的惩罚更大,模型会尽可能地减少训练样本的错误分类。 - **kernel**: 内核函数,默认值为'rbf'(径向基函数)。SVM通过不同的内核函数将低维空间的数据映射到高维空间,从而解决非线性可分的问题。常用的内核包括'linear'(线性)、'poly'(多项式)、'rbf'、'sigmoid'以及'precomputed'。 - **degree**: 当使用多项式内核时,该参数表示多项式的阶数,默认值为3。 - **gamma**: 决定了每个样本对分类超平面的影响程度,默认值为'auto',此时γ = 1 / n_features。对于'rbf'、'poly'和'sigmoid'内核,γ越大,支持向量的影响范围越小,反之亦然。 - **coef0**: 多项式或S型内核中的自由参数,默认值为0.0。 - **probability**: 是否启用概率估计,默认为False。启用后,`predict_proba()`方法可以提供预测结果的概率估计。 - **shrinking**: 是否采用启发式缩小的方法,默认为True。这种方法可以加快训练速度,尤其是在处理大规模数据集时更为明显。 - **tol**: 容忍误差,默认值为0.001。这是优化过程中收敛的容忍误差阈值。 - **cache_size**: 缓存大小,默认值为200 MB。这个参数控制了内核缓存的大小,对于大型数据集,增加这个值可以提高性能。 - **class_weight**: 类别权重,可以设置为'dict'或者'balanced'。当设置为'balanced'时,类别权重会自动调整为与训练数据中各类别出现频率成反比。 #### 示例代码 下面是一个简单的示例,展示如何使用`sklearn.svm.SVC`进行分类: ```python from sklearn import svm from sklearn.datasets import make_blobs import numpy as np # 创建一个简单的二分类问题 X, y = make_blobs(n_samples=100, centers=2, random_state=6) # 使用默认参数初始化SVC clf = svm.SVC() # 训练模型 clf.fit(X, y) # 预测新的数据点 new_data = np.array([[2, 3], [3, 4]]) predictions = clf.predict(new_data) print("Predictions:", predictions) ``` #### 总结 `sklearn.svm.SVC`提供了强大的支持向量机分类功能,用户可以通过灵活设置参数来满足不同的应用场景需求。此外,Scikit-Learn还提供了许多其他工具和支持向量机相关的功能,如网格搜索(GridSearchCV)等,这些工具可以帮助用户更高效地调整模型参数并获得最佳性能。