Scikit-learn 学习笔记(1)

学习 scikit 的记录(一):数据集、统计推断

学习材料:https://scikit-learn.org/stable/tutorial/statistical_inference/index.html

目标

Problems it tackles range from building a prediction function linking different observations, to classifying observations, or learning the structure in an unlabeled dataset.

机器学习要解决的任务包括有:

  • 对于有标签的观测结果,构建一个统一的预测函数,不但能描述此前的多次观测结果,还能判断未来的观测结果属于哪一类
  • 从无标签的观测结果中,学习归纳出数据的内在结构和形式

途径

This tutorial will explore statistical learning, the use of machine learning techniques with the goal of statistical inference: drawing conclusions on the data at hand.

为了实现 上述学习目标 ,一种比较有效的方法是统计学习方法:统计推断(statistical inference)。

统计推断是由于总体的特征难以得到,只能通过有限的观测值来推断总体的特征。这么做的逻辑是:

  • 每一次的观测值一定携带着有关总体的信息,通过统计的方法,就能把有关总体的信息尽可能多地提取出来。
  • 观测值又不能完全体现有关总体的信息,所以利用观测值的统计结果代替总体的特征,总会有一定的信息损失。
  • 如果我们能将信息的损失程度加以量化,就能寻找一种方法,将损失程度降到最低。

总体的特征又有两个方面:

  • 确定分布时,需要估计分布的参数
  • 未知分布时,需要对总体的做出假设

概述

Scikit-learn is a Python module integrating classic machine learning algorithms in the tightly-knit world of scientific Python packages (NumPy, SciPy, matplotlib).

Scikit-learn 是一个 Python 的库,将机器学习算法与已有的一些科学计算库(NumPy, SciPy, matplotlib)紧密结合,充分利用了这些科学计算库的优点和便捷性,通过 统计方法 以实现 上述目标

数据集

Scikit-learn deals with learning information from one or more datasets that are represented as 2D arrays.

Scikit-learn 能处理的数据集都必须是2维矩阵,第一维是列举了所有的观察值,第二维则是每个观察值的多个特征。

$$ \underbrace{ \begin{bmatrix} \begin{pmatrix} f_1 \\ f_2 \\ f_3 \\ f_4 \\ \end{pmatrix} & \begin{pmatrix} f_1 \\ f_2 \\ f_3 \\ f_4 \\ \end{pmatrix} & \begin{pmatrix} f_1 \\ f_2 \\ f_3 \\ f_4 \\ \end{pmatrix} & \cdots \begin{pmatrix} f_1 \\ f_2 \\ f_3 \\ f_4 \\ \end{pmatrix} & \end{bmatrix}}_{\text{samples}} $$

比如 Scikit-learn 自带的 iris 数据(鸢尾花数据集),它包含了150个样本,每个样本体现了4方面特征,是一个 $150 \times 4$ 的二维矩阵。

>>> from sklearn import datasets
>>> iris = datasets.load_iris()
>>> iris.data.shape
(150, 4)
>>> iris.data[:10]
array([[5.1, 3.5, 1.4, 0.2],
       [4.9, 3. , 1.4, 0.2],
       [4.7, 3.2, 1.3, 0.2],
       [4.6, 3.1, 1.5, 0.2],
       [5. , 3.6, 1.4, 0.2],
       [5.4, 3.9, 1.7, 0.4],
       [4.6, 3.4, 1.4, 0.3],
       [5. , 3.4, 1.5, 0.2],
       [4.4, 2.9, 1.4, 0.2],
       [4.9, 3.1, 1.5, 0.1]])
>>>

库里自带了对数据的描述,摘录如下:

Iris plants dataset

Data Set Characteristics:

:Number of Instances: 150 (50 in each of three classes)
:Number of Attributes: 4 numeric, predictive attributes and the class
:Attribute Information:
    - sepal length in cm
    - sepal width in cm
    - petal length in cm
    - petal width in cm
    - class:
            - Iris-Setosa
            - Iris-Versicolour
            - Iris-Virginica

:Summary Statistics:

============== ==== ==== ======= ===== ====================
                Min  Max   Mean    SD   Class Correlation
============== ==== ==== ======= ===== ====================
sepal length:   4.3  7.9   5.84   0.83    0.7826
sepal width:    2.0  4.4   3.05   0.43   -0.4194
petal length:   1.0  6.9   3.76   1.76    0.9490  (high!)
petal width:    0.1  2.5   1.20   0.76    0.9565  (high!)
============== ==== ==== ======= ===== ====================

:Missing Attribute Values: None
:Class Distribution: 33.3% for each of 3 classes.
:Creator: R.A. Fisher
:Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
:Date: July, 1988

The famous Iris database, first used by Sir R.A. Fisher. The dataset is taken from Fisher’s paper. Note that it’s the same as in R, but not as in the UCI Machine Learning Repository, which has two wrong data points.

This is perhaps the best known database to be found in the pattern recognition literature. Fisher’s paper is a classic in the field and is referenced frequently to this day. (See Duda & Hart, for example.) The data set contains 3 classes of 50 instances each, where each class refers to a type of iris plant. One class is linearly separable from the other 2; the latter are NOT linearly separable from each other.

上节的解释

著名的鸢尾花数据集,由英国统计与遗传学家 R.A. Fisher 爵士首次提出。现今是模式识别领域中最知名的数据集。这个数据集包括来自三种鸢尾花:

  • Iris Setosa(山鸢尾)

  • Iris Versicolour(杂色鸢尾)

  • Iris Virginica(维吉尼亚鸢尾)

150 朵鸢尾花的数据来自以上三种每种 50 朵。每条数据描述花的4个特征:4个特征(花萼长度,花萼宽度,花瓣长度,花瓣宽度),都量化为数字形式。

三种花的数据中,其中有一种数据可以以线性分类的方法区分出来,但是另外两种则不能线性相互拆分开。

估计器

Scikit-learn 自带多种的估计器,用来完成机器学习的各种任务:

An estimator is any object that learns from data; it may be a classification, regression or clustering algorithm or a transformer that extracts/filters useful features from raw data.

估计器的输入是原始的数据(raw data),根据估计器任务类型的不同,输出的结果可能是分类的标签、回归的参数、聚类的结果。

所有的估计器都有 .fit() 接口用于输入数据、学习数据。

如果要给估计器设定参数,可以在实例化的时候指定:

estimator = Estimator(param1=1, param2=2)
>>> estimator.param1
1

学习成果:

Estimated parameters: When data is fitted with an estimator, parameters are estimated from the data at hand. All the estimated parameters are attributes of the estimator object ending by an underscore:

当数据集送入估计器的 .fit() 接口后,估计的参数就可以从估计器对象的属性读取得到。要注意的是,属性名称是以下划线结尾的。

>>> estimator.estimated_param_ 

捐助本站

为了保证阅读体验,本站不安放广告。但是,租用服务器和编写文章需要个人资金和时间的投入。

如果您觉得文章对您有用,请考虑捐助小站(金额不限),以期待更多原创文章。捐助记录

本站是个人网站,若无特别说明,文章均为原创,并采用 署名协议 CC-BY-NC 授权。
欢迎转载,惟请保留原文链接,且不得用于商业用途。