概念术语介绍

维基百科上面是这样定义的:

Machine learning is a field of computer science that gives computers the ability to learn without being explicitly programmed.

就是说让计算机在不显式编程的情况下具备学习的能力。再往细了说机器学习要解决这样的问题:给我们一些已知的样本数据,然后我们要能预测出未知数据的一些特性。一般我们将已知的样本数据的列称为属性或者特征,将我们要预测的目标特性称(或称为目标变量)之为类别标签

大的我们可以将机器学习分为两类:

  • 监督学习(supervised learning),指数据中已经包含了我们想要预测的目标变量的集合。该类可以再细分为以下两类:

    • 分类(classification),简单说就是如果目标变量的集合是离散的(即有限的集合,一般称为标称型),那就是分类问题。举个例子,比如用户手写单个数字,范围是0~9,我们去识别具体是哪个数字的问题就是分类问题,因为结果只有10种情况(0到9中的某一个)。
    • 回归(regression),和分类相反,如果目标变量的集合是连续的(即无限的集合,一般称之为数值型),那就是回归问题。比如预测气温,温度是一个连续的数值,情况是不可枚举的。
  • 非监督学习(unsupervised learning),指数据中只有特征信息,没有目标变量的信息。根据研究方向的不同,我们也可以对该类再进行细分:

    • 聚类(clustering),虽然我们并不知道目标变量是什么,但是我们依旧可以根据数据的一些相似性将原始数据分为若干类,这种问题就是聚类。
    • 密度估计(density estimation),研究数据的分布情况。
    • 降维(dimensionality reduction),研究如何将高维度的数据投射到低维度(一般是二维或三维),便于我们可视化,从而更好的研究数据。
    • ……

有的地方还会有一个半监督学习(Semi-supervised learning)的概念,一般我们认为他也是监督学习的一种,指的是给的训练集中部分目标变量信息是缺失的。当然,机器学习是一个很大的领域,里面涉及很多东西,上面的分类也只是一个比较粗的分类,是可以再细化再补充的,比如还有主动学习(Active learning)增强学习(Reinforcement learning)等。在使用数据的时候,我们一般会按照一定比例(比如常见的是八二分或者七三分)将原始数据集分为两部分:一部分用于训练模型,称之为训练集;另一部分用于验证模型的正确率,称之为测试集

实例

上面部分我们对基本概念进行了总结,这部分我们通过一个例子来说明。这里我们使用Python中一个挺有名的机器学习库scikit-learn来进行说明(当然现在最火的机器学习库是Google开源的TensorFlow,但我个人认为对于初学者scikit-learn更加合适,因为它的文档是指导式的,并且非常详细并配有有大量的实例及代码)。这里我们用scikit-learn中的鸢尾花(Iris)数据集来举例说明。

现在的问题是有三种鸢尾花:Setosa、Versicolor、Virginica(如下图),我们需要构建一个模型,当给我们一个新的鸢尾花时,能够识别出它的种类。

鸢尾花图集

要能识别种类,我们必然要根据一些鸢尾花的特征去判断。数据集中提供了四种鸢尾花的特征数据:萼片(sepal)长度、萼片宽度、花瓣(petal)长度、花瓣宽度,单位都是厘米。对应的要预测的目标变量就是上图所示的三个种类。我们先看一下具体的数据组织结构。

from sklearn.datasets import load_iris

 # 加载数据
iris = load_iris() 

# 查看数据的所有属性
print(iris.keys())

# 查看样本数据的特征情况
print("\n特征情况:")
print("data shape:", iris.data.shape)
print("feature names:",iris.feature_names)
print("first row of data:", iris.data[0])   # 只打印一条

# 查看目标变量情况
print("\n目标变量情况:")
print("target shape:", iris.target.shape)
print("target names:",iris.target_names)
print("target:", iris.target)

代码输出如下:

dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names'])

特征情况:
data shape: (150, 4)
feature names: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
first row of data: [ 5.1  3.5  1.4  0.2]

目标变量情况:
target shape: (150,)
target names: ['setosa' 'versicolor' 'virginica']
target: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]

简要分析如下:

  1. 在sklearn中一般我们可以调用keys()方法查看数据集有哪些属性,不同的数据集属性可能不同。比如上面例子中有5个key:

    • data:存储特征数据;
    • feature_names:存储特征数据的具体含义;
    • target:存储目标变量数据;
    • target_names:存储目标变量的具体含义;
    • DESCR:存储数据的具体描述信息,对于数据集不了解的都可以在这里找到非常详细的说明。
  2. 结合前面的概念我们看一下:

    • data是一个150*4的二维矩阵,表示我们有150条样本数据,每条数据包含4个维度的信息,即feature_names打印出来的四个值。
    • target是一个包含150个数据的以为矩阵,和data一一对应,即data里面一条数据对应target里面一个数据;而数据只有0、1、2三种情况,分别对应'setosa'、'versicolor'、'virginica'三个种类。

也就是说现在我们拿到的样本数据中包含鸢尾花四个维度的信息,并且当各个维度取某个值时,它对应的是哪一种鸢尾花也是已知的,并且种类是离散的。我们现在的任务就是根据这个样本数据集得出一个判断方法(专业术语叫训练一个模型),当有新的鸢尾花的四个维度信息时,我们根据这个之前得到的判断方法可以判断出该鸢尾花属于哪一个种类,这个过程就是我们前面讲的机器学习中的监督学习要解决的问题,因为鸢尾花的种类是离散的,所以属于分类问题。

具体操作的时候,我们一般不会使用全部150条数据去训练模型,而是将150条样本数据集按照一定比例(一般八二分或者七三分)分为训练集和测试集。比如随机选取120条(150*0.8)数据训练出一个模型,然后在剩下的30条数据上面去套用这个模型,预测出鸢尾花的类型,然后和已知的类型做对比,从而评估模型的正确率。

至于模型何如训练,有很多的算法,后面我们再总结。

机器学习与数据挖掘

最后,我们简单说一下机器学习(Machine Learning)和数据挖掘(Data Mining)的关系。维基百科上面是这样说的:

Machine learning and data mining often employ the same methods and overlap significantly, but while machine learning focuses on prediction, based on known properties learned from the training data, data mining focuses on the discovery of (previously) unknown properties in the data (this is the analysis step of knowledge discovery in databases). Data mining uses many machine learning methods, but with different goals; on the other hand, machine learning also employs data mining methods as "unsupervised learning" or as a preprocessing step to improve learner accuracy. Much of the confusion between these two research communities (which do often have separate conferences and separate journals, ECML PKDD being a major exception) comes from the basic assumptions they work with: in machine learning, performance is usually evaluated with respect to the ability to reproduce known knowledge, while in knowledge discovery and data mining (KDD) the key task is the discovery of previously unknown knowledge. Evaluated with respect to known knowledge, an uninformed (unsupervised) method will easily be outperformed by other supervised methods, while in a typical KDD task, supervised methods cannot be used due to the unavailability of training data.

从上面我们可以得到以下一些结论:

  • 联系:ML和DM两个领域有很多重叠的部分(主要指涉及到的技术、方法等),二者往往是相辅相成的。
  • 区别:ML和DL的关注点不同:ML主要关注如何依据已知的数据属性(特征)去做一些预测;DM则关注如何从数据集中找到一些未知的属性(特征)。

其实对于学习者来说,二者的异同我们不必太关心,因为涉及到的技术往往是相同或者想通的。