首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 为何选择机器学习
1.1.1 机器学习能够解决的问题
1.1.2 熟悉任务和数据
1.2 为何选择Python
1.3 scikit-learn
1.4 必要的库和工具
1.4.1 Jupyter Notebook
1.4.2 NumPy
1.4.3 SciPy
1.4.4 matplotlib
1.4.5 pandas
1.4.6 mglearn
1.5 Python 2 与Python 3 的对比
1.7 第 一个应用:鸢尾花分类
1.7.1 初识数据
1.7.2 衡量模型是否成功:训练数据与测试数据
1.7.3 要事第 一:观察数据
1.7.4 构建第 一个模型:k 近邻算法
1.7.5 做出预测
1.7.6 评估模型
2.1 分类与回归
2.2 泛化、过拟合与欠拟合
2.3 监督学习算法
2.3.1 一些样本数据集
2.3.2 k 近邻
2.3.3 线性模型
2.3.4 朴素贝叶斯分类器
2.3.5 决策树
2.3.6 决策树集成
2.3.7 核支持向量机
2.3.8 神经网络(深度学习)
2.4 分类器的不确定度估计
2.4.1 决策函数
2.4.2 预测概率
2.4.3 多分类问题的不确定度
3.1 无监督学习的类型
3.2 无监督学习的挑战
3.3 预处理与缩放
3.3.1 不同类型的预处理
3.3.2 应用数据变换
3.3.3 对训练数据和测试数据进行相同的缩放
3.3.4 预处理对监督学习的作用
3.4 降维、特征提取与流形学习
3.4.1 主成分分析
3.4.2 非负矩阵分解
3.4.3 用t-SNE 进行流形学习
3.5 聚类
3.5.1 k 均值聚类
3.5.2 凝聚聚类
3.5.3 DBSCAN
3.5.4 聚类算法的对比与评估
3.5.5 聚类方法小结
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(上)
小册名称:Python机器学习基础教程(上)
### 2.3.7 核支持向量机 在深入探讨机器学习领域时,支持向量机(SVM)无疑是一个举足轻重的算法,它以其强大的分类能力和对高维数据的良好适应性而著称。然而,标准的线性SVM在处理非线性问题时显得力不从心。为了克服这一局限,研究者们引入了核技巧(Kernel Trick),从而诞生了核支持向量机(Kernel Support Vector Machine, KSVM),也称为非线性SVM。本章将详细阐述核支持向量机的基本原理、核函数的选择、算法实现及其在Python中的应用。 #### 2.3.7.1 核支持向量机的基本概念 **线性SVM的局限性**:线性SVM通过寻找一个最优超平面来划分不同类别的数据点,这个超平面由支持向量决定,且保证所有点到该平面的距离最大化(即间隔最大化)。然而,当数据并非线性可分或者即使可分但线性分类器效果不佳时,线性SVM就显得捉襟见肘。 **核技巧的核心**:核技巧的核心思想是将输入空间的数据通过某种非线性映射转换到一个更高维的特征空间(即核空间),在这个高维空间中数据可能变得线性可分。然后,在高维空间中应用线性SVM算法进行分类。这一过程的关键在于,尽管映射本身可能是复杂的,但核技巧允许我们在不知道具体映射函数的情况下,仅通过计算输入空间中点对的“核函数”值来高效地执行SVM算法。 #### 2.3.7.2 核函数的选择 核函数是核技巧的核心组件,它定义了输入空间中任意两点在核空间中的相似度或距离。常见的核函数包括: 1. **线性核(Linear Kernel)**:$K(x, x') = x \cdot x'$,实质上是线性SVM的核表示,不改变原始空间。 2. **多项式核(Polynomial Kernel)**:$K(x, x') = (\gamma x \cdot x' + r)^d$,其中$\gamma, r, d$是参数,通过调整这些参数可以控制模型的复杂度和拟合能力。 3. **径向基函数(Radial Basis Function, RBF)核,也称为高斯核(Gaussian Kernel)**:$K(x, x') = \exp(-\gamma \|x - x'\|^2)$,其中$\gamma$是控制函数径向作用范围的参数。高斯核是应用最广泛的核函数之一,因为它能够有效地捕捉数据中的局部结构。 4. **Sigmoid核**:$K(x, x') = \tanh(\gamma x \cdot x' + r)$,虽然理论上可以看作是一个神经网络层,但在实践中使用较少。 选择合适的核函数对于KSVM的性能至关重要。通常,这需要根据具体问题、数据特性和实验来决定。 #### 2.3.7.3 核支持向量机的算法实现 在Python中,我们可以使用`scikit-learn`库来方便地实现和使用核支持向量机。`scikit-learn`提供了`SVC`(Support Vector Classification)类,该类支持多种核函数,包括上述提到的线性核、多项式核、RBF核等。 **示例代码**: ```python 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 # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 特征缩放,对于SVM很重要 scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # 实例化SVC类,使用RBF核 model = SVC(kernel='rbf', gamma='auto') # 训练模型 model.fit(X_train_scaled, y_train) # 预测测试集 y_pred = model.predict(X_test_scaled) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy:.2f}") ``` 在这个例子中,我们首先加载了鸢尾花数据集,并将其分为训练集和测试集。接着,对数据进行了标准化处理,这是SVM模型性能优化的重要步骤之一。然后,我们创建了一个`SVC`对象,指定使用RBF核,并自动调整`gamma`参数。最后,我们训练了模型,并在测试集上进行了预测,计算了模型的准确率。 #### 2.3.7.4 核支持向量机的优势与挑战 **优势**: - **强大的非线性分类能力**:通过核技巧,KSVM能够处理复杂的非线性分类问题。 - **高维数据处理能力**:即使在高维空间中,KSVM也能保持较高的计算效率和分类精度。 - **灵活性**:通过选择不同的核函数和参数,KSVM可以适应不同的数据分布和分类需求。 **挑战**: - **参数选择**:选择合适的核函数和参数(如`gamma`、`C`等)通常需要大量的实验和调优。 - **计算复杂度**:尽管核技巧允许在不知道具体映射函数的情况下进行计算,但高维空间中的计算复杂度仍然较高,特别是在大规模数据集上。 - **过拟合风险**:当核函数过于复杂或参数设置不当时,KSVM可能容易发生过拟合现象。 #### 2.3.7.5 总结 核支持向量机通过引入核技巧,将线性SVM扩展到非线性领域,极大地增强了其分类能力。在Python中,我们可以利用`scikit-learn`库方便地实现和使用KSVM,通过调整核函数和参数来优化模型性能。然而,KSVM也面临着参数选择、计算复杂度和过拟合等挑战。因此,在实际应用中,我们需要根据具体问题的特点和需求来选择合适的模型和参数。
上一篇:
2.3.6 决策树集成
下一篇:
2.3.8 神经网络(深度学习)
该分类下的相关小册推荐:
Python高并发编程与实战
Python面试指南
Python合辑3-字符串用法深度总结
Python编程轻松进阶(五)
Python机器学习实战
Python编程轻松进阶(一)
Python合辑5-格式化字符串
Python3网络爬虫开发实战(上)
Python数据分析与挖掘实战(下)
Python合辑11-闭包函数
Python机器学习基础教程(下)
机器学习算法原理与实战