
3.5 机器学习通用库Sklearn
Sklearn(Scikit-Learn)是基于NumPy和Scipy的一个机器学习算法库,Sklearn已经封装了大量的机器学习算法,例如种监督学习、非监督学习及监督学习等机器学习,同时Sklearn内置了大量数据集,可节省获取和整理数据集的时间。Sklearn主页:https://scikitlearn.org/stable/,如图3-22所示。

图3-22 Sklearn主页
3.5.1 Sklearn的安装
Sklearn的pip安装命令为pip install sklearn,如图3-23所示。

图3-23 Sklearn的pip安装
在PyCharm中安装Sklearn方法是在主界面选择菜单命令“File>Settings”,打开Settings窗口,操作如图3-24所示。

图3-24 在PyCharm中安装Sklearn
安装完成后,如图3-25所示。

图3-25 PyCharm安装完成
3.5.2 Sklearn的数据集
SKlearn中包含了强大的预置数据集,很多数据可以直接拿来使用。Sklearn数据集主页:https://scikit-learn.org/stable/modules/classes.html#module-sklearn.datasets,如图3-26所示。

图3-26 Sklearn数据集主页
典型的数据集包括datasets.load_boston([return_X_y])(波士顿房价)、load_digits([n_class, return_X_y])(手写数字数据集)、fetch_20newsgroups([data_home,…])(新闻分类数据集)fetch_lfw_pairs([subset,…])(带标签的人脸分类数据集)、load_diabetes([return_X_y])(糖尿病数据集)、load_iris([return_X_y])(鸢尾花数据集)等。
其中,datasets.load_*()用于获取小规模数据集,数据包含在datasets里。datasets.fetch_*()用于获取大规模数据集,需要从网络上下载。
下面以示例形式展示数据集的应用方法。
(1)sklearn.datasets.load_sample_image(image_name)。参数image_name为图像的文件名,例如“china.jpg”、“flower.jpg”,返回一个三维数组。获取显示图像的代码如下。

执行结果如图3-27所示。

图3-27 下载指定的图像
(2)加载手写数字库的代码如下。

(3)波士顿房价预测实例如下。


输出结果如图3-28所示。

图3-28 波斯顿房价预测
3.5.3 Sklearn的机器学习方式
Sklearn的主要构成为六大部分:分类、回归、聚类、降维、模型选择和预处理。
1.分类(Classification)
算法包括逻辑回归、SVM、最近邻、随机森林、Naïve Bayes、神经网络等,可应用到二元分类、多分类、垃圾邮件检测、图像识别等。
2.回归(Regression)
算法包括线性回归、Ridge Regression、Lasso、SVR、最小角回归(LARS)等。
3.聚类(Clustering)
算法包括k-Means、Spectral Clustering(谱聚类)、Mean-Shift(均值漂移)等,可应用于客户细分、实验结果分组等。
4.降维(Dimensionality Reduction)
算法包括主成分分析(PCA)、非负矩阵分解(NMF)、特征选择(Feature_Selection)等。
5.预处理(Preprocessing)
子模块包括Preprocessing、Feature_Extraction、Transformer等,可应用于转换输入数据、规范化编码等。
6.模型选择(Model selection)
子模块包括网格搜索(Grid_Search)、交叉验证(Cross_Validation)、度量(Metrics)、(流水线)Pipeline、学习曲线(Learning_Curve),主要功能是通过参数调整提高精度。
机器学习主要分为有监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)两大类。
有监督学习是指已知系统的正确输出的情况下的一类学习算法,典型的有监督学习包括分类、线性回归、神经网络、决策树、支持向量机(SVM)、KNN、朴素贝叶斯算法。
无监督学习是指对无标签数据的一类学习算法。因为没有标签信息,意味着需要从数据集中发现和总结模式或者结构。典型的无监督算法有主成分分析法(PCA)、异常检测法、自编码算法、深度信念网络、赫比学习法、生成式对抗网络、自组织映射网络。
Skleran中集成了许多机器学习算法,典型的算法说明如下。
(1)逻辑回归:from sklearn.linear_model import LogisticRegression。
(2)朴素贝叶斯:from sklearn.naive_bayes import GaussianNB。
(3)K-近邻:from sklearn.neighbors import KNeighborsClassifier。
(4)决策树:from sklearn.tree import DecisionTreeClassifier。
(5)聚类算法:sklearn.cluster,包括k-means、邻近传播算法、DBSCAN等。
下面具体介绍Sklearn的典型的机器学习算法。
1.K最近邻分类器(KNeighborsClassifier)
KNeighborsClassifier详细使用说明网址:https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html。KNeighborsClassifier使用方法很简单,有如下三步:(1)创建KNeighborsClassifier对象;(2)调用其fit函数训练;(3)调用predict函数预测。示例如下。

输出结果:[5] [9]。
例如,使用Sklearn的K最近邻分类算法对Sklearn的数据库鸢尾花(iris)进行预测,代码如下。


输出结果如下。

2.朴素贝叶斯算法(GaussianNB)
朴素贝叶斯算法示例如下。

输出结果:[2]。
3.DBSCAN
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种很典型的密度聚类算法,和K-Means这种只适用于凸样本集的聚类相比,DBSCAN既可以适用于凸样本集,也可以适用于非凸样本集。
下面的代码来源于https://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html# sphx-glr-auto-examples-cluster-plot-dbscan-py,代码如下。


输出结果如图3-29所示。

图3-29 DBSCAN聚类
4.k-means
k-means算法将数据分为k个簇,簇内相似度较高,簇间相似度较低,使用方法如下。
(1)选择k个点作为初始中心。
(2)将每个点指派到最近的中心,形成k个簇(Cluster)。
(3)重新计算每个簇的中心。
(4)如果簇中心发生明显变化或未达到最大迭代次数,则回到第二步。
k-means算法可实现图像的压缩,下面的代码来源于https://scikit-learn.org/stable/auto_examples/cluster/plot_color_quantization.html#sphx-glr-download-auto-examples-cluster-plot-color-quantization-py。


输出结果如图3-30所示。

图3-30 k-means算法压缩图像