首页
技术小册
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机器学习基础教程(上)
### 1.7.4 构建第一个模型:k 近邻算法 在Python机器学习的世界中,k近邻(k-Nearest Neighbors, k-NN)算法是一种直观且强大的分类与回归方法。作为本教程中的第一个模型构建章节,我们将深入探讨k-NN算法的基本原理、如何在Python中实现它,并通过实例来展示其应用。本章节旨在使读者能够理解k-NN的基本概念,掌握其实现方法,并初步体验到机器学习模型构建的乐趣。 #### 1.7.4.1 k近邻算法概述 **定义**:k近邻算法是一种基于实例的学习或惰性学习算法,它使用整个训练集来对新样本进行分类或预测。对于给定的测试样本,算法会找到训练集中与其最相近的k个邻居(即k个最相似的实例),然后根据这k个邻居的信息来预测测试样本的类别或值。 **原理**:k-NN的核心思想是“少数服从多数”或“平均法”。对于分类问题,算法会统计这k个邻居中属于各个类别的数量,并将测试样本分类为数量最多的那个类别。对于回归问题,则通常计算这k个邻居的目标值的平均值或加权平均值作为预测结果。 **优缺点**: - **优点**:简单易懂,无需训练过程,对异常值不敏感(取决于k的选择)。 - **缺点**:计算量大,尤其是当数据集很大时;需要选择合适的k值;对数据的尺度敏感,需要进行数据预处理。 #### 1.7.4.2 Python中的k-NN实现 在Python中,我们可以使用多种库来实现k-NN算法,其中`scikit-learn`是最流行的一个。`scikit-learn`是一个基于Python的机器学习库,提供了大量的算法实现和数据处理工具,非常适合初学者和研究者使用。 ##### 安装scikit-learn 如果你还没有安装`scikit-learn`,可以通过pip命令轻松安装: ```bash pip install scikit-learn ``` ##### 示例:使用scikit-learn的KNeighborsClassifier 以下是一个使用`scikit-learn`的`KNeighborsClassifier`类来实现k-NN分类器的简单示例。 ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score # 加载鸢尾花数据集 iris = 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) # 特征缩放(可选,但通常对k-NN很重要) scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # 创建k-NN分类器实例 k = 3 # 选择k值 knn = KNeighborsClassifier(n_neighbors=k) # 训练模型 knn.fit(X_train_scaled, y_train) # 预测测试集 y_pred = knn.predict(X_test_scaled) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print(f'Accuracy: {accuracy:.2f}') ``` 在上述代码中,我们首先加载了鸢尾花(Iris)数据集,并将其分为训练集和测试集。接着,我们使用了`StandardScaler`对数据进行了特征缩放,因为k-NN算法对特征的尺度非常敏感。然后,我们创建了一个`KNeighborsClassifier`实例,指定了k值为3,并使用训练数据对其进行了训练。最后,我们使用训练好的模型对测试集进行了预测,并计算了准确率。 #### 1.7.4.3 选择合适的k值 选择合适的k值是k-NN算法中一个重要的步骤。k值太小,模型容易受到噪声数据的影响,导致过拟合;k值太大,则可能将不同类别的数据视为相似,导致欠拟合。因此,通常需要通过交叉验证等方法来选择一个合适的k值。 在`scikit-learn`中,我们可以使用`GridSearchCV`或`RandomizedSearchCV`等工具来自动寻找最优的k值。这些工具会尝试多个k值,并使用交叉验证来评估每个k值对应的模型性能,最终选择性能最好的k值。 ```python from sklearn.model_selection import GridSearchCV # 设置k值的候选范围 param_grid = {'n_neighbors': range(1, 11)} # 创建k-NN分类器实例和网格搜索实例 knn = KNeighborsClassifier() grid_search = GridSearchCV(knn, param_grid, cv=5, scoring='accuracy') # 搜索最优的k值 grid_search.fit(X_train_scaled, y_train) # 打印最优的k值和对应的准确率 print(f'Best k: {grid_search.best_params_}') print(f'Best accuracy: {grid_search.best_score_:.2f}') ``` #### 1.7.4.4 k-NN算法的进阶应用 除了简单的分类任务外,k-NN算法还可以应用于多种复杂的场景,如推荐系统、异常检测、图像识别等。在推荐系统中,k-NN可以根据用户的历史行为找到与其相似的其他用户,并推荐这些用户喜欢的物品。在异常检测中,k-NN可以计算每个样本与其邻居之间的距离,如果某个样本的邻居都与其差异很大,则该样本可能是异常点。 #### 1.7.4.5 小结 通过本章节的学习,我们深入了解了k近邻算法的基本原理、Python实现方法以及如何选择合适的k值。k-NN算法作为机器学习领域中的一个基础且强大的工具,具有广泛的应用前景。希望读者能够通过实践加深对k-NN算法的理解,并为后续学习更复杂的机器学习算法打下坚实的基础。在未来的学习中,我们将继续探索其他类型的机器学习模型,包括决策树、支持向量机、神经网络等,以构建更加复杂和强大的机器学习系统。
上一篇:
1.7.3 要事第 一:观察数据
下一篇:
1.7.5 做出预测
该分类下的相关小册推荐:
Python高并发编程与实战
Python合辑2-字符串常用方法
Python合辑11-闭包函数
Python合辑14-面向对象编程案例(下)
Python编程轻松进阶(五)
Python合辑10-函数
Python3网络爬虫开发实战(上)
Python数据分析与挖掘实战(下)
Python合辑9-判断和循环
Python面试指南
Python合辑3-字符串用法深度总结
剑指Python(磨刀不误砍柴工)