Python-sklearn机器学习的第一个样例(4)

来源:互联网 发布:javascript入门经典pdf 编辑:程序博客网 时间:2024/06/01 15:34

彩蛋:数据的完整性测试

使用assert语句,可以快速进行数据测试。如果测试结果是True,notebook不会显示任何信息并继续向下执行,否则终止运行,并显示错误提示。

In [16]:
assert 1 == 2
---------------------------------------------------------------------------AssertionError                            Traceback (most recent call last)<ipython-input-16-a810b3a4aded> in <module>()----> 1 assert 1 == 2AssertionError: 
In [17]:
# We know that we should only have three classesassert len(iris_data_clean['class'].unique()) == 3
In [18]:
# We know that sepal lengths for 'Iris-versicolor' should never be below 2.5 cmassert iris_data_clean.loc[iris_data_clean['class'] == 'Iris-versicolor', 'sepal_length_cm'].min() >= 2.5
In [19]:
# We know that our data set should have no missing measurementsassert len(iris_data_clean.loc[(iris_data_clean['sepal_length_cm'].isnull()) |                               (iris_data_clean['sepal_width_cm'].isnull()) |                               (iris_data_clean['petal_length_cm'].isnull()) |                               (iris_data_clean['petal_width_cm'].isnull())]) == 0

就像这样的测试,如果不能通过测试,会终止程序并返回例外信息,我们必须回头继续对数据进行整理。

Step 4:数据的探索性分析

探索性分析,是在剔除了异常值和错误之后,对数据集更深入的分析和研究。在这一步里,我们试图回答这样几个问题:

  • 数据是如何分布的?

  • 数据之间是否存在相关性?

  • 有什么混杂的因素,可以解释这种相关性?

    在这个阶段,我们会采用各种方法绘数据图,当然不要太考虑美观,因为都是内部使用。 先从散点图矩阵开始吧。

  • In [20]:
    sb.pairplot(iris_data_clean)
    Out[20]:
    <seaborn.axisgrid.PairGrid at 0xb783f90>

    看起来我们的数据大致是正常分布。对于数据建模来说,数据分布正常是一个很棒的消息。

    不过,我们看到有些花瓣的尺寸数据有一点奇怪,是不是由于花的不同种类导致的呢?我们可以再一次通过有色的散点图来观察一次。

    In [21]:
    sb.pairplot(iris_data_clean, hue='class')
    Out[21]:
    <seaborn.axisgrid.PairGrid at 0xc04a6b0>


    果然,花瓣的数值分布,确实跟花的种类有关。这对我们分类的任务来说是个极好的消息,它意味着通过花瓣的尺寸,就可以容易地把iris-sentosa这个品种区分出来。

    然而,区分iris-virginica和iris-versicolor这两个品种会困难一下,因为看起来它们的尺寸有些重叠。

    花瓣的长度和宽度看起来有一些相关,花萼也有类似现象。我们通过咨生物学家,这是自然现象:较长的花瓣,宽度也会较大,花萼也类似。

    我们还可以画出提琴图(violin plots),对比不同种类的数值分布。提琴图和箱型图所包含的信息是类似的,但它还能体现数据的密度。

    In [23]:
    plt.figure(figsize=(10, 10))for column_index, column in enumerate(iris_data_clean.columns):    if column == 'class':        continue    plt.subplot(2, 2, column_index + 1)    sb.violinplot(x='class', y=column, data=iris_data_clean)

    数据摆弄得差不多了,我们进入建模部分吧。

    原创粉丝点击