机器学习之sklearn基础——一个小案例,sklearn初体验(代码片段)

肥猪猪爸 肥猪猪爸     2022-10-22     561

关键词:


活动地址:CSDN21天学习挑战赛

工欲善其事,必先利其器

        子曰:“工欲善其事,必先利其器。居是邦也,事其大夫之贤者,友其士之仁者。” 
        各位爱好机器学习的小伙伴们,大家好!在我们学习和工作中,使用好的工具会事半功倍。sklearn就是一把机器学习领域的瑞士军刀。有了它,很多事情就变得简单了!
        scikit-learn是基于Python语言的机器学习库,具有如下特点:
        1.简单高效的数据分析工具
        2.可在多种环境中重复使用
        3.建立在Numpy,Scipy以及matplotlib等数据科学库之上
        4.开源且可商用的-基于BSD许可

        sklearn的内容很多,本文想通过一个小案例来说明一些关键的概念。

数据集

        巧妇难为无米之炊,数据集是机器学习的原材料,没有数据,一切都是空谈。sklearn.datasets模块提供了多种数据集:
1.自带的小数据集(Toy datasets):sklearn.datasets.load_<name>
2.可在线下载的数据集(Real world datasets):sklearn.datasets.fetch_<name>
3.计算机生成的数据集(Generated datasets):sklearn.datasets.make_<name>
4.其他可加载的数据集(Loading other datasets)

PCA降维

        PCA(Principal Component Analysis) ,即主成分分析,是一种使用最广泛的数据降维算法。主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。主要步骤就是先计算样本矩阵的协方差矩阵,然后对协方差矩阵进行矩阵分解,按一定的规则(比如特征值大则对应的特征向量越重要)取出前k个特征值及特征向量,得到的特征向量既是降维的结果。

流形学习

        流形学习也主要用于降维,有些数据利用PCA降维效果不理想,于是就有了流形学习的诸多方法,如Isomap、LLE等。其主要思想是假设所处理的数据点分布在嵌入于外维欧式空间的一个潜在的流形体上,降维时要保证降维前后每个样本数据之间的相似度尽量保持不变。主要步骤基本上是根据原数据矩阵,按一定的相似度规则,计算出代表相似度的矩阵,然后在对相似度矩阵进行矩阵分解,选出的特征向量就是降维的结果。详细的内容会在以后的文章中详细说明。

Pipeline(管道)

        Pipeline 可以把多个评估器(转换器、分类器等)链接成一个大模型。这个是很有用的,因为处理数据的步骤一般都是固定的。Pipeline 在这里有多种用途:
1.便捷性和封装性:你只要对数据调用 fit和 predict 一次来适配所有的一系列评估器。
2.联合的参数选择:你可以一次grid search管道中所有评估器的参数。
3.安全性:训练转换器和预测器使用的是相同样本,管道有助于防止来自测试数据的统计数据泄露到交叉验证的训练模型中。

        除了最后一个评估器,管道的所有评估器必须是转换器 (必须有 transform 方法)。最后一个评估器的类型不限(转换器、分类器等等)。

案例:手写数字数据上的 K-Means 聚类演示

        本文案例采用手写数字数据,将数据从原始 64 维空间投影到一个二维空间,并在这个新空间中绘制数据和集群。Isomap和LLE与PCA相比,计算较慢,读者在运行时稍稍耐心一下啊!!

样本数据的图片展示如下:

 代码如下:

import numpy as np
from sklearn.datasets import load_digits
import matplotlib.colors
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
from sklearn.manifold import (
    Isomap,
    LocallyLinearEmbedding
)


# 加载数据:手写数字数据
digits = load_digits()
data = digits.data
labels = digits.target
# 样本个数,样本属性个数,类别标签个数
(n_samples, n_features), n_digits = data.shape, np.unique(labels).size
print(f"# 类别: n_digits; # 样本数: n_samples; # 样本属性个数 n_features")
# 绘图展示前30个数字
fig0 = plt.figure(figsize=(7, 7))
fig0.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05, wspace=0.05)
for i in range(30):
    ax = fig0.add_subplot(6, 5, i+1, xticks=[], yticks=[])
    ax.imshow(digits.images[i], cmap=plt.cm.binary, interpolation='nearest')
    ax.text(0, 7, str(digits.target[i]))
plt.show()

# 通过管道构建模型,首先进行降维,然后利用K-means进行聚类,这里对比了3种不同降维方法的效果
models = [Pipeline([('reduction', PCA(n_components=2)), ('clr', KMeans(init="k-means++", n_clusters=n_digits, n_init=4))]),
          Pipeline([('reduction', Isomap(n_neighbors=30, n_components=2)), ('clr', KMeans(init="k-means++", n_clusters=n_digits, n_init=4))]),
          Pipeline([('reduction', LocallyLinearEmbedding(n_neighbors=30, n_components=2, method="modified")), ('clr', KMeans(init="k-means++", n_clusters=n_digits, n_init=4))])]
# 模型标题
model_titles = ["PCA降维加K-means聚类,聚类中心用叉号表示", "Isomap降维加K-means聚类,聚类中心用叉号表示", "LLE降维加K-means聚类,聚类中心用叉号表示"]

for t in range(len(models)):
    # 训练模型
    model = models[t]
    model.fit(data)
    # 降维后的数据(二维)
    reduced_data = model.named_steps["reduction"].transform(data)
    # 绘图网格间隔
    h = 0.02
    # 生成绘图网格数据
    x_min, x_max = reduced_data[:, 0].min() - 1, reduced_data[:, 0].max() + 1
    y_min, y_max = reduced_data[:, 1].min() - 1, reduced_data[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
    # 对网格数据进行聚类预测
    Z = model.named_steps["clr"].predict(np.c_[xx.ravel(), yy.ravel()])
    # 绘制结果
    Z = Z.reshape(xx.shape)
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    matplotlib.rcParams['axes.unicode_minus'] = False
    plt.figure(1)
    plt.clf()
    plt.imshow(
        Z,
        interpolation="nearest",
        extent=(xx.min(), xx.max(), yy.min(), yy.max()),
        cmap=plt.cm.Paired,
        aspect="auto",
        origin="lower",
    )
    # 绘制聚类中心
    plt.plot(reduced_data[:, 0], reduced_data[:, 1], "k.", markersize=2)
    centroids = model.named_steps["clr"].cluster_centers_
    plt.scatter(
        centroids[:, 0],
        centroids[:, 1],
        marker="x",
        s=169,
        linewidths=3,
        color="w",
        zorder=10,
    )
    plt.title(model_titles[t])
    plt.xlim(x_min, x_max)
    plt.ylim(y_min, y_max)
    plt.xticks(())
    plt.yticks(())
    plt.show()

结果如下:

        本文案例降维后仅保留2个维度,要是对数据进行预测,准确率可能比较低,本文只是通过该案例说明一些sklearn的概念!


作者这水平有限,有不足之处欢迎留言指正
 

人工智能机器学习之运用特征脸(eigenface)和sklearn.svm.svc进行人脸识别

运用特征脸(eigenface)和sklearn.svm.SVC进行人脸识别。首先需要下载一个经过预处理的数据集,从数据集中找出最有代表性的前5人的预期结果第一步,import导入实验所用到的包importmatplotlib.pyplotaspltfromsklearn.model_selectionimporttrain_test... 查看详情

机器学习之分类模型评估指标及sklearn代码实现(代码片段)

文章目录前言Accuracy(准确率)、Recall(召回率)、Precision(精确率)、F1评分(F1-Score)Accuracy(准确率)Recall(召回率)Precision(精确率)F1评 查看详情

sklearn集成学习之votingclassifier(代码片段)

sklearn集成学习之VotingClassifier在机器学习中,我们可以对KNN、逻辑回归、SVM、决策树、神经网络等预测的结果进行投票,少数服从多数最终决定预测结果。在sklearn中提供了一个VotingClassifier的方法进行投票。这是属于集成... 查看详情

机器学习之手写决策树以及sklearn中的决策树及其可视化(代码片段)

文章目录决策树理论部分基本算法划分选择信息熵信息增益信息增益率基尼系数基尼指数决策树代码实现参考决策树理论部分决策树的思路很简单,就是从数据集中挑选一个特征,然后进行分类。基本算法从伪代码中可... 查看详情

机器学习之基础知识(全)(代码片段)

目录1.机器学习概述1.1人工智能概述1.1.1人工智能使用场景1.1.2人工智能小案例1.2 人工智能发展历程1.2.1图灵测试1.2.2发展历程1.2.3小结1.3人工智能主要分支1.3.1 人工智能、机器学习和深度学习1.3.2主要分支介绍1.3.3人工智能发展... 查看详情

集成学习之随机森林案例专题python机器学习系列(十七)(代码片段)

集成学习之随机森林案例专题【Python机器学习系列(十七)】文章目录1.Bagging与随机森林简介2.随机森林--分类任务2.1准备数据2.2python实现随机森林--分类任务2.3绘制ROC曲线与计算AUC2.4绘制决策树3.随机森林--回归任务集成... 查看详情

机器学习之梯度下降法

在吴恩达的机器学习课程中,讲了一个模型,如何求得一个参数令错误函数值的最小,这里运用梯度下降法来求得参数。首先任意选取一个θ令这个θ变化,怎么变化呢,怎么让函数值变化的快,变化的小怎么变化,那么函数值... 查看详情

机器学习之概率统计基础,机器学习学习笔记----08

机器学习之概率统计基础,机器学习学习笔记----08离散型的随机变量对于任意的我们获取的一组随机变量,最关注的是哪些要素呢?来列举一下:第一:随机变量的取值。显然这个是我们首先需要关注的,... 查看详情

机器学习之回归模型-调用sklearn库求解线性回归(代码片段)

机器学习之回归模型-调用sklearn库求解线性回归在使用sklearn库之前,我们先看一下这个库的结构,该库经常用于监督学习和无监督学习,sklearn共分为6大部分,分别用于完成分类任务,回归任务,聚类任务&... 查看详情

自动机器学习框架auto-sklearn基础编程案例(代码片段)

...架”的方法(参考2),并开源了一个叫做auto-sklearn的项目(参考1)。在2020年,他们又对这个auto-sklearn框架进行了优化(参考3)。初步看来,auto-skle 查看详情

机器学习之学习率

 梯度下降法公式:求   就是找到一个 能够最小化代价函数J() 如何确保梯度下降正常工作?如何选择学习率a(learningrate)?今天就给大家总结一下学习率有关的知识当学习率a选择过大可能出现随着迭代次数... 查看详情

机器学习之微积分与概率论入门1

这两门学科作为机器学习的必备科目!一、微积分1夹逼定理通俗的讲:A≤B≤C当求极限时,存在A=C,则说明B也等于A和C案例1:案例2:2两个重要极限3导数通俗的讲就是曲线的斜率二阶导数是斜率变化快慢的反应,表征曲线的凹凸... 查看详情

机器学习之logistic回归算法

1Logistic回归算法的原理1.1需要的数学基础我在看机器学习实战时对其中的代码非常费解,说好的利用偏导数求最值怎么代码中没有体现啊,就一个简单的式子:θ=θ - α Σ[(hθ(x(i))-y(i) )]*xi。经过查找资料才知道,... 查看详情

7000字精华总结,pandas/sklearn进行机器学习之特征筛选,有效提升模型性能(代码片段)

...关于数据分析与可视化今天小编来说说如何通过pandas以及sklearn这两个模块来对数据集进行特征筛选,毕竟有时候我们拿到手的数据集是非常庞大的,有着非常多的特征,减少这些特征的数量会带来许多的好处,例... 查看详情

机器学习之数学基础-微积分,概率论和矩阵

...看,和交流分享。~~(。?ω?。)~~这一系列主要学习和回顾机器学习的数学部分。 微积分:一:两边夹定理二:极限存在定理三:两个常用的极限四:常用函数的导数五:泰勒公式-麦克劳林公式六:方向导数七:梯度的概念八... 查看详情

机器学习之理论篇—线性模型

机器学习之理论篇—线性模型2016-05-02 雷厉风行 机器学习与大数据算法线性模型是机器学习中的最基本模型,其形式简单、易于建模。线性回归模型虽然简单,但却非常的实用,许多非线性模型也都是建立在线性模型的... 查看详情

机器学习sklearn数据集(代码片段)

...1.1.1Scikit-learn工具介绍1.1.2安装1.1.3Scikit-learn包含的内容1.2sklearn数据集1.2.1scikit-learn数据集API介绍1.2.2sklearn小数据集1.2.3sklearn大数据集1.2.4sklearn数据集的使用1.3数据集的划分2pip/pip3下载慢解决1数据集知道数据集的分为训练集和测... 查看详情

机器学习之roc曲线

机器学习之ROC曲线roc曲线全称受试者工作曲线,ROC曲线下面积就是AUC(Areaunderthecurve),AUC用来衡量二分类机器学习算法的性能,即泛化能力这里有几个概念,真阳性率,假阳性率,真阴性率,假阴性率,这四个率的产生是一个... 查看详情