仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接
本文目录
3. 1背景知识
3. 2Scikit-learn概述
3. 3Scikit-learn主要用法
3. 3.1基本建模流程
3. 3.2数据预处理
3. 3.3监督学习算法
3. 3.4无监督学习算法
3. 3.5评价指标
3. 3.6交叉验证及超参数调优
3. 4Scikit-learn总结
参考文献
Scikit-learn是基于NumPy、SciPy和Matplotlib的开源Python机器学习包,它封装了一系列数据预处理、机器学习算法、模型选择等工具,是数据分析师首选的机器学习工具包。
自2007年发布以来,Scikit-learn已经成为Python重要的机器学习库了,Scikit-learn简称sklearn,支持包括分类、回归、降维和聚类四大机器学习算法,还包括了特征提取、数据处理和模型评估三大模块。
机器学习的编程语言没有限制,同学们可选用自己熟悉的语言对算法进行实现。本书的代码基于Python编写。回顾一下本书需要掌握的Python相关知识,限于篇幅,本文不再对Python的使用进行详细讲解,仅列出使用Python进行机器学习算法所需要掌握的知识点:
(1)Python环境的安装:包括安装Anaconda、Jupyter和Pycharm。
(2)Python数据结构:列表、元组、集合、字典。
①列表用来存储一连串元素的容器,用[]来表示,其他元素类型可不相同。
②元组与列表类似,元组中的元素也可进行索引计算,用()来表示。二者的区别是列表里面的元素值可以修改,而元组中的元素值不可以修改,只能读取。
③集合有两个功能,一是进行集合操作,二是消除重复元素。集合的格式是:set(),其中()内可以是列表、字典或者字符串。
④字典(dict)也称作关联数组,用{}表示,使用键-值存储。
(3)Python控制流:顺序结构、分支结构、循环结构。
(4)Python函数:调用函数、定义函数、高阶函数。
(5)Python主要模块:NumPy、Pandas、SciPy、Matplotlib、Scikit-learn。
(6)NumPy:是一个用Python实现的科学计算扩展程序库。
(7)Pandas:是基于NumPy的一种工具,为解决数据分析任务而创建。
(8)SciPy:是一款为科学和工程设计的工具包,包括统计、优化、线性代数、傅里叶变化等。
(9)Matplotlib:是一款2D绘图库,以各种硬拷贝格式和跨平台的交互式环境生成绘图、直方图、功率谱、条形图等。
(10)Scikit-learn:Python重要的机器学习库。
Scikit-Learn库的算法主要有四类:分类、回归、聚类、降维。其中:
常用的回归:线性回归、决策树回归、SVM回归、KNN回归;集成回归:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees。
常用的分类:线性分类、决策树、SVM、KNN,朴素贝叶斯;集成分类:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees。
常用聚类:K均值(K-means)、层次聚类(Hierarchicalclustering)、DBSCAN。
常用降维:LinearDiscriminantAnalysis、PCA。
图3-1代表了Scikit-Learn算法选择的一个简单路径,这个路径图代表:蓝色圆圈是判断条件,绿色方框是可以选择的算法,我们可以根据自己的数据特征和任务目标去找一条自己的操作路线。
Scikit-Learn中包含众多数据预处理和特征工程相关的模块,但其实Sklearn六大板块中有两块都是关于数据预处理和特征工程的,两个板块互相交互,为建模之前的全部工程打下基础。
基本建模的符号标记见表3-1:
表3-1符号标记
符号
代表含义
符号
代表含义
X_train
训练数据
y_train
训练集标签
X_test
测试数据
y_test
测试集标签
X
完整数据
y
数据标签
y_pred
预测标签
1. 导入工具包
导入工具包的方法如下(这里使用伪代码):
代码示例:
2. 导入数据
导入数据的方法如下:
Scikit-learn支持以NumPy的arrays对象、Pandas对象、SciPy的稀疏矩阵及其他可转换为数值型arrays的数据结构作为其输入,前提是数据必须是数值型的。
sklearn. datasets模块提供了一系列加载和获取著名数据集如鸢尾花、波士顿房价、Olivetti人脸、MNIST数据集等的工具,也包括了一些toydata如S型数据等的生成工具。
Scikit-learn内置了很多可以用于机器学习的数据,可以用两行代码就可以使用这些数据。内置数据分为可以直接使用的数据集、需下载的数据集以及生成数据集。
(1)可以直接使用的自带数据集
此类数据集可以直接导入使用数据,数据集和描述见表3-2:
表3-2可以直接使用的自带数据集
数据集名称
描述
类型
维度
load_boston
Boston房屋价格
回归
50613
fetch_california_housing
加州住房
回归
206409
load_diabetes
糖尿病
回归
44210
load_digits
手写字
分类
179764
load_breast_cancer
乳腺癌
分类、聚类
(357+212)30
load_iris
鸢尾花
分类、聚类
(503)*4
load_wine
葡萄酒
分类
(59+71+48)*13
load_linnerud
体能训练
多分类
20
(2)需要下载的自带数据集
此类数据集第一次使用,需要联网下载数据,数据集和描述见表3-3:
表3-3需要下载的自带数据集
数据集名称
描述
fetch_20newsgroups
用于文本分类、文本挖据和信息检索研究的国际标准数据集之一。数据集收集了大约20,000左右的新闻组文档,均匀分为20个不同主题的新闻组集合。返回一个可以提取文本特征的提取器
fetch_20newsgroups_vectorized
这是上面这个文本数据的向量化后的数据,返回一个已提取特征的文本序列,即不需要使用特征提取器
fetch_california_housing
加利福尼亚的房价数据,总计20640个样本,每个样本8个属性表示,以及房价作为target,所有属性值均为number,详情可调用。如:fetch_california_housing()[‘DESCR’],了解每个属性的具体含义;
fetch_covtype
森林植被类型,总计581012个样本,每个样本由54个维度表示(12个属性,其中2个分别是onehot4维和onehot40维),以及target表示植被类型1-7,所有属性值均为number,详情可调用fetch_covtype()[‘DESCR’]了解每个属性的具体含义
fetch_kddcup99
KDD竞赛在1999年举行时采用的数据集,KDD99数据集仍然是网络入侵检测领域的事实Benckmark,为基于计算智能的网络入侵检测研究奠定基础,包含41项特征
fetch_lfw_pairs
该任务称为人脸验证:给定一对两张图片,二分类器必须预测这两个图片是否来自同一个人。
fetch_lfw_people
打好标签的人脸数据集
fetch_mldata
从mldata. org中下载数据集
fetch_olivetti_faces
Olivetti脸部图片数据集
fetch_rcv1
路透社新闻语聊数据集
fetch_species_distributions
物种分布数据集
(3)生成数据集
此类数据集可以用来分类任务,可以用来回归任务,可以用来聚类任务,用于流形学习的,用于因子分解任务的,用于分类任务和聚类任务的:这些函数产生样本特征向量矩阵以及对应的类别标签集合,数据集和描述见表3-4:
表3-4生成数据集
数据集名称
描述
make_blobs
多类单标签数据集,为每个类分配一个或多个正态分布的点集
make_classification
多类单标签数据集,为每个类分配一个或多个正态分布的点集,提供了为数据添加噪声的方式,包括维度相关性,无效特征以及冗余特征等
make_gaussian-quantiles
将一个单高斯分布的点集划分为两个数量均等的点集,作为两类
make_hastie-10-2
产生一个相似的二元分类数据集,有10个维度
make_circle和make_moons
产生二维二元分类数据集来测试某些算法的性能,可以为数据集添加噪声,可以为二元分类器产生一些球形判决界面的数据
代码示例:
1. 数据划分
机器学习的数据,可以划分为训练集、验证集和测试集,也可以划分为训练集和测试集(图3-2)。
代码示例:
2. 数据变换操作
sklearn. preprocessing模块包含了数据变换的主要操作(表3-5),数据变换的方法如下:
表3-5使用Scikit-learn进⾏数据变换
预处理操作
库名称
标准化
StandardScaler
最小最大标准化
MinMaxScaler
One-Hot编码
OneHotEncoder
归一化
Normalizer
二值化(单个特征转换)
Binarizer
标签编码
LabelEncoder
缺失值填补
Imputer
多项式特征生成
PolynomialFeatures
代码示例:
3. 特征选择
特征选择的方法如下:
过滤式(Filter)
封装式(Wrapper),结合交叉验证的递归特征消除法,自动选择最优特征个数:
嵌入式(Embedded),从模型中自动选择特征,任何具有coef_或者feature_importances_的基模型都可以作为estimator参数传入。
1. 监督学习算法-回归
表3-6常见的回归模型
回归模型名称
库名称
线性回归
LinearRegression
岭回归
Ridge
LASSO回归
Lasso
ElasticNet回归
ElasticNet
决策树回归
tree. DecisionTreeRegressor
代码示例:
2. 监督学习算法-分类
表3-7常见的分类模型
模型名称
库名称
逻辑回归
linearmodel. LogisticRearession
支持向量机
svm. SVC
朴素贝叶斯
naive_bayes. GaussianNB
KNN
neighbors. NearestNeighbors
随机森林
ensemble. RandomForestClassifier
GBDT
ensemble. GradientBoostingClassifier
代码示例:
1. 聚类算法
sklearn. cluster模块包含了一系列无监督聚类算法,聚类使用的方法如下:
表3-8常见的聚类模型
模型名称
库名称
K-means
KMeans
DBSCAN
DBSCAN
层次聚类
AgglomerativeClustering
谱聚类
SpectralClustering
代码示例:
2. 降维算法
Scikit-learn中降维算法都被包括在模块decomposition中,sklearn. decomposition模块本质是一个矩阵分解模块。最常见的降维方法是PCA(主成分分析)。
降维的使用的方法如下:
代码示例:
sklearn. metrics模块包含了一系列用于评价模型的评分函数、损失函数以及成对数据的距离度量函数。评价指标主要分为分类评价指标、回归评价指标等等,表3-8列举了常见的几种评价指标。
评价指标使用的方法如下:
表3-8常见评价指标
评价指标
库名称
使用范围
准确率
accuracy_score
分类
精确率
precision_score
分类
F1值
f1_score
分类
对数损失
log_loss
分类
混淆矩阵
confusion_matrix
分类
含多种评价的分类报告
classification_report
分类
均方误差MSE
mean_squared_error
回归
平均绝对误差MAE
mean_absolute_error
回归
决定系数R2
r2_score
回归
代码示例:
1. 交叉验证
交叉验证的方法如图3-3,具体原理将在第7章“机器学习实践”中讲解,本章仅讲解使用方法。
代码示例:
此外,Scikit-learn提供了部分带交叉验证功能的模型类如LogisticRegressionCV、LassoCV、等,这些类包含CV参数。
2. 超参数调优
在机器学习中,超参数是指无法从数据中学习而需要在训练前提供的参数。机器学习模型的性能在很大程度上依赖于寻找最佳超参数集。
超参数调整一般是指调整模型的超参数,这基本上是一个非常耗时的过程。目前主要有3种最流行的超参数调整技术:网格搜索、随机搜索和贝叶斯搜索,其中Scikit-learn内置了网格搜索、随机搜索,本章进行简单讲解,其余调参方法如贝叶斯搜索,本章不进行讨论。
(1)超参数调优⸺网格搜索
代码示例:
在参数网格上进行穷举搜索,方法简单但是搜索速度慢(超参数较多时),且不容易找到参数空间中的局部最优。
(2)超参数调优⸺随机搜索
代码示例:
在参数子空间中进行随机搜索,选取空间中的100个点进行建模(可从scipy. stats常见分布如正态分布norm、均匀分布uniform中随机采样得到),时间耗费较少,更容易找到局部最优。
Scikit-learn是基于Python语言的机器学习工具,它建立在NumPy、SciPy、Pandas和Matplotlib之上,被广泛地用于统计分析和机器学习建模等数据科学领域,其主要优点包括:
(1)建模方便:用户通过Scikit-learn能够实现各种监督和非监督学习的模型,仅仅需要几行代码就可以实现。
(2)功能多样:使用Scikit-learn还能够进行数据的预处理、特征工程、数据集切分、模型评估等工作。
(3)数据丰富:内置丰富的数据集,比如:泰坦尼克、鸢尾花等,还可以生成数据,非常方便。
本文为黄海广老师的机器学习入门基础的第三章原文。
购书连接:
教师可以向黄海广老师申请教学ppt原版(邮件:haiguang2000@wzu. edu.cn)
代码地址:https ://github. com/fengdu78/WZU-machine-learning-course