机器学习库sklearn入门与实践
引言
随着机器学习技术的发展,越来越多的开发者和研究者开始使用Python中的sklearn
库进行数据处理和模型训练。本文将基于Iris(月尾花)数据集,详细介绍数据预处理过程以及八个传统机器学习分类算法的实现。本文旨在帮助读者快速入门并掌握sklearn
库的基本使用方法。
数据预处理
数据集下载与查看
首先,我们需要下载Iris数据集。可以通过seaborn
库中的load_dataset
方法获取数据:
我们把seaborn
库导入之后,然后load_dataset
,我们就可以下载到这个数据集。得到数据集后,可以使用pandas
库查看数据集的基本信息:
数据集有150行5列,其中前四列为特征值(花萼长度、花萼宽度、花瓣长度、花瓣宽度),最后一列为标签值,表示花的种类。数据集中无缺失值,且特征值均为浮点型。
特征选择与标签编码
为了简化问题,我们仅保留花瓣长度和花瓣宽度两个特征,并删除其余特征。由于某些算法要求标签值为数值类型,因此需要对标签进行编码:
使用LabelEncoder
将标签值编码为整数类型,即第一类映射为0,第二类映射为1,第三类映射为2。
数据标准化
考虑到不同特征之间数值差异较大可能影响算法性能,我们对数据进行标准化处理:
标准化公式为(X’ = \frac{X - \mu}{\sigma}),其中(\mu)为均值,(\sigma)为标准差。标准化后,数据均值为0,标准差为1。
构造训练集与测试集
将数据集划分为训练集和测试集,通常按照8:2的比例划分:
分类算法实现
我们将介绍以下八个传统机器学习分类算法:
-
K近邻算法 (KNN)
KNN算法通过计算待预测样本与训练集中最近的k个邻居的距离,选择出现次数最多的类别作为预测结果。默认情况下,k=5。
-
朴素贝叶斯算法
朴素贝叶斯算法基于贝叶斯定理,计算每个类别出现的概率,选择概率最大的类别作为预测结果。对于连续型特征,使用高斯朴素贝叶斯。
-
决策树算法
决策树通过递归地将数据集划分为更纯净的子集,最终形成一棵树结构。为了避免过拟合,通常会对树进行剪枝。
-
逻辑回归算法
尽管名为“回归”,但逻辑回归实际上是一种分类算法。它通过构造映射函数,将特征值映射为类别的概率,选择概率最大的类别作为预测结果。
-
支持向量机 (SVM)
支持向量机寻找一个超平面,使得该超平面能够最大化地分离不同类别的样本点。对于线性不可分的情况,可以通过核函数将数据映射到高维空间。
-
随机森林
随机森林通过多次有放回地抽样,构建多个决策树,然后通过投票机制确定最终的预测结果。
-
AdaBoost
AdaBoost通过迭代地训练弱分类器,并根据上一轮分类器的表现调整样本权重,最终将多个弱分类器组合成一个强分类器。
-
梯度提升树 (GBDT)
梯度提升树通过逐步拟合上一轮预测值与真实值之间的残差,最终将多个弱分类器组合成一个强分类器。
习题
单选题
-
sklearn库中用于实现K近邻算法的模块是?
- A) sklearn.neighbors
- B) sklearn.svm
- C) sklearn.tree
- D) sklearn.linear_model
答案:A
-
在sklearn中,用于对数据进行标准化处理的模块是?
- A) sklearn.preprocessing
- B) sklearn.model_selection
- C) sklearn.metrics
- D) sklearn.impute
答案:A
-
在sklearn中,用于实现逻辑回归的模块是?
- A) sklearn.neighbors
- B) sklearn.svm
- C) sklearn.linear_model
- D) sklearn.tree
答案:C
-
在sklearn中,用于实现支持向量机的模块是?
- A) sklearn.neighbors
- B) sklearn.svm
- C) sklearn.linear_model
- D) sklearn.tree
答案:B
-
在sklearn中,用于实现随机森林的模块是?
- A) sklearn.ensemble.RandomForestClassifier
- B) sklearn.ensemble.AdaBoostClassifier
- C) sklearn.ensemble.GradientBoostingClassifier
- D) sklearn.neural_network.MLPClassifier
答案:A
-
在sklearn中,用于实现AdaBoost算法的模块是?
- A) sklearn.ensemble.RandomForestClassifier
- B) sklearn.ensemble.AdaBoostClassifier
- C) sklearn.ensemble.GradientBoostingClassifier
- D) sklearn.neural_network.MLPClassifier
答案:B
-
在sklearn中,用于实现梯度提升树的模块是?
- A) sklearn.ensemble.RandomForestClassifier
- B) sklearn.ensemble.AdaBoostClassifier
- C) sklearn.ensemble.GradientBoostingClassifier
- D) sklearn.neural_network.MLPClassifier
答案:C
判断题
-
sklearn库中,K近邻算法的默认邻居数是5。
- 正确
答案:正确
- 正确
-
在sklearn中,逻辑回归算法只能用于二分类任务。
- 错误
答案:错误
- 错误
-
在sklearn中,支持向量机只能用于线性分类。
- 错误
答案:错误
- 错误
-
在sklearn中,随机森林是一种集成学习方法。
- 正确
答案:正确
- 正确
-
在sklearn中,AdaBoost是一种基于梯度下降的集成学习方法。
- 错误
答案:错误
- 错误
填空题
-
在sklearn中,用于实现数据集划分的函数是______。
答案:train_test_split -
在sklearn中,用于实现标签编码的类是______。
答案:LabelEncoder -
在sklearn中,用于实现数据标准化的类是______。
答案:StandardScaler -
在sklearn中,用于实现朴素贝叶斯分类器的类是______。
答案:GaussianNB -
在sklearn中,用于实现决策树分类器的类是______。
答案:DecisionTreeClassifier
简答题
-
简述K近邻算法的基本思想。
答案:K近邻算法的基本思想是:对于待预测样本,找到与其最近的k个邻居样本,然后根据这k个邻居样本的多数类别来预测该样本的类别。 -
简述朴素贝叶斯算法的基本思想。
答案:朴素贝叶斯算法的基本思想是:根据贝叶斯定理,计算给定特征条件下每个类别的后验概率,选择后验概率最大的类别作为预测类别。 -
简述决策树算法的基本思想。
答案:决策树算法的基本思想是:通过递归地选择最优特征进行分裂,将数据集划分为尽可能纯净的子集,直到满足停止条件。 -
简述逻辑回归算法的基本思想。
答案:逻辑回归算法的基本思想是:通过构建一个映射函数,将特征映射为类别的概率,然后通过最大化似然估计来确定映射函数的参数。 -
简述支持向量机的基本思想。
答案:支持向量机的基本思想是:寻找一个超平面,使得该超平面能够最大化两类样本之间的间隔,从而实现最佳分类效果。 -
简述随机森林的基本思想。
答案:随机森林的基本思想是:通过有放回地随机抽样,构建多个决策树,然后通过投票或其他方式组合这些决策树的结果,形成一个强分类器。 -
简述AdaBoost的基本思想。
答案:AdaBoost的基本思想是:通过迭代地调整样本权重,逐步训练多个弱分类器,并根据弱分类器的误差率赋予不同的权重,最终将多个弱分类器组合成一个强分类器。 -
简述梯度提升树的基本思想。
答案:梯度提升树的基本思想是:通过逐步拟合上一轮预测值与真实值之间的残差,不断优化模型,最终将多个弱分类器组合成一个强分类器。
习题
一、数据读取与转换
-
如何将文本数据读取并转换为DataFrame格式?
- 首先将文件打开,构造一个date列表,对于每一行进行row的初始化,将每个数据用split分开,然后pad到row里面去,row再用pen到data里面去。最后将该数据用pen.dataframe转换成DataFrame格式。
- 答案:将文件进行打开,然后构造一个data列表,对于每一行,进行一个row的初始化,然后将每一个数据用split将其分开,然后pad到row里面去,然后row我们再用pen到data里面去。然后这个data就是一个类似于二维形式的数据,我们就要将该数据用pen.dataframe进行转换。
-
为什么需要将数据集中的所有数据转化为float类型?
- 因为要对数据进行数学运算和模型训练,所以需要将数据统一为数值型,即float类型。
- 答案:为了方便后续的数据处理和模型训练。
二、数据探索与预处理
-
使用什么工具来初步查看数据?
- 使用pandas_profiling工具进行数据域分析,可以查看数据的相关性图等信息。
- 答案:pandas_profiling
-
在绘制图表时遇到中文显示问题如何解决?
- 使用seaborn绘图时,需要额外三行代码来解决中文显示问题。
- 答案:使用额外的三行代码来解决seaborn绘图时的中文显示问题。
-
为什么“每周消费冰淇淋的公升数”这个特征可能对预测结果的贡献度不高?
- 从可视化结果可以看出,这个特征的曲线几乎完全重叠在一起,因此对预测结果的贡献度可能不高。
- 答案:因为它的曲线几乎都是完全覆盖在一起,对最后预测的结果贡献度可能不高。
三、数据标准化与拆分
-
如何对数据集进行标准化处理?
- 从sklearn.preprocessing中导入标准化工具,然后对数据进行标准化处理。
- 答案:从sklearn.preprocessing中导入StandardScaler,然后对数据进行标准化处理。
-
为什么选择20%作为测试集的比例?
- 测试表明,20%是一个较为合适的选择,若超过此比例(如25%或30%),模型预测率会降低。
- 答案:经过测试,发现20%是一个比较合适的数字,如果使用25%或者30%,会降低模型的预测率。