基于头歌的数据生成。
第一关:生成分类数据集
机器学习中的分类问题的基本结构:分类问题和回归问题
分类问题:一个事物有n
个特征,我们该通过什么样的方法将其划分到m
类中。其中这n
个特征和这m
个类别都是由人来定义的,而这个划分方法的大框架也是由人来指定,但是方法的细节却是由机器通过预先设计好的算法在给定的训练数据集上学习得来的。
所以所谓的机器学习,其实学习的只是划分方法的细节而已。而事物的特征,类别,以及大方法的框架却都是由人来划分的。所以说在机器学习中,最重要的问题就是如何划分事物的特征,确定事物的类别 (学习框架的选择相比之下会容易许多)。这也是计算机科学的根本问题,即如何将现实世界的事物抽象为计算机可表示的模型。大家在学习机器学习或算法之类的课程时往往会沉迷于其中的算法细节,如书本在讲述机器学习算法时都是将特征与类别确定好了的,只需要去跑算法就好了,但往往会忘记最重要的事情。
不过万幸,scikit-learn 中有着内置的,非常完善的数据生成和加载机制。我们这一节先来讲述最简单的数据生成方法: make_blobs
。
make_blobs
方法的原型如下:
sklearn.datasets.make_blobs(
n_samples,
n_features,
centers,
cluster_std,
center_box,
shuffle,
random_state
)
其中各个参数的含义如下:
n_samples
:一个整数或一个整数数组,当输入为一个整数时,表示将要生成的数据总量。当输入为一个整数数组时,表示需要为每一类生成的数据量。默认值为100
。n_features
:一个整数,表示特征的数量。默认值为2
。centers
:生成的数据中心的数量。(即生成的种类数)可以是None
或者一个整数或者是一个整数数组。当centers
为None
且n_samples
为整数时,会生成3
个中心。当n_samples
为整数数组时,centers
必须为与n_samples
一样长度的整数数组。默认值为None
cluster_std
:一个浮点数,表示数据之间的标准差,默认值为1.0
。center_box
:一个浮点数对,表示生成的每一类的中心的下限与上限。默认值为(-10.0, 10.0)
。shuffle
:一个布尔值,表示是否要打乱生成的数据。默认为True
。random_state
:None
或者一个整数,当输入为一个整数时,表示这次生成数据过程的随机因子。换句话说,如果两次调用make_blobs
生成数据时,如果random_state
是同一个整数,且其他参数都相同,则生成的数据是一样的。
make_blobs
的返回值由两部分组成,第1
部分是一个n_samples*n_features
的矩阵,表示数据的特征部分,第2
部分是一个长度为n_samples
的向量,表示数据的类别部分。
易错点:刚开始的时候取两位小数点,忘记用numpy的统计学函数了。
第二关:生成回归数据集
回归问题可以这样不严谨地进行描述:一个事物有n
个特征,我们该通过什么样的方法预测出这个事物所对应的值(不一定是标量,可以是1
维2
维任意维的量),但是这个维度需要预先设定好。
我们可以看到回归问题与分类问题是很像的,事物都需要n