3.3 概述数据
我们需要先看一下数据,增加对数据的理解,以便选择合适的算法。我们将从以下几个角度来审查数据:
(1)数据的维度。
(2)查看数据自身。
(3)统计描述所有的数据特征。
(4)数据分类的分布情况。
不要担心这会需要很多代码,每一种审查方法只有一行代码。这些代码非常有效,在以后的项目中也会用到。
3.3.1 数据维度
通过查看数据的维度,可以对数据集有一个大概的了解,如数据集中有多少行数据、数据有几个属性等。代码如下:
#显示数据维度
print('数据维度: 行 %s,列 %s' % dataset.shape)
将会得到一个具有150行数据,5个数据特征属性的结果,执行结果如下:
数据维度: 行 150,列 5
3.3.2 查看数据自身
查看数据自身也是一个很好的理解数据的方法,通过查看数据可以直观地看到数据的特征、数据的类型,以及大概的数据分布范围等。代码如下:
# 查看数据的前10行
print(dataset.head(10))
在这里查看前10行记录,执行结果如下:
separ-length separ-width petal-length petal-width class 0 5.1 3.5 1.4 0.2 Iris-setosa 1 4.9 3.0 1.4 0.2 Iris-setosa 2 4.7 3.2 1.3 0.2 Iris-setosa 3 4.6 3.1 1.5 0.2 Iris-setosa 4 5.0 3.6 1.4 0.2 Iris-setosa 5 5.4 3.9 1.7 0.4 Iris-setosa 6 4.6 3.4 1.4 0.3 Iris-setosa 7 5.0 3.4 1.5 0.2 Iris-setosa 8 4.4 2.9 1.4 0.2 Iris-setosa 9 4.9 3.1 1.5 0.1 Iris-setosa
3.3.3 统计描述数据
数据特征的统计描述信息包括数据的行数、中位值、最大值、最小值、均值、四分位值等统计数据信息。代码如下:
# 统计描述数据信息
print(dataset.describe())
执行结果如下:
separ-length separ-width petal-length petal-width count 150.000000 150.000000 150.000000 150.000000 mean 5.843333 3.054000 3.758667 1.198667 std 0.828066 0.433594 1.764420 0.763161 min 4.300000 2.000000 1.000000 0.100000 25% 5.100000 2.800000 1.600000 0.300000 50% 5.800000 3.000000 4.350000 1.300000 75% 6.400000 3.300000 5.100000 1.800000 max 7.900000 4.400000 6.900000 2.500000
3.3.4 数据分类分布
接下来看一下数据在不同分类的分布情况,执行程序后得到的将是每个分类数据量的绝对的数值,看一下各个分类的数据分布是否均衡。代码如下:
# 分类分布情况 print(dataset.groupby('class').size())
这里就是通过前面设定的数据特征名称来查看数据的。执行结果如下:
class Iris-setosa 50 Iris-versicolor 50 Iris-virginica 50 dtype: int64
我们可以看到鸢尾花的三个亚属的数据各50条,分布非常平衡。如果数据的分布不平衡时,可能会影响到模型的准确度。因此,当数据分布不平衡时,需要对数据进行处理,调整数据到相对平衡的状态。调整数据平衡时有以下几种方法。
扩大数据样本:这是一个容易被忽视的选择。一个更大的数据集,就有可能挖掘出不同的或许更平衡的方面提高算法模型的准确度。
数据的重新抽样:过抽样(复制少数类样本)和欠抽样(删除多数类样本)。当数据量很大时可以考虑测试欠抽样(大于一万条记录),当数据量比较少时可以考虑过抽样。
尝试生成人工样本:一种简单的生成人工样本的方法是从少数类的实例中随机抽样特征属性,生成更多的数据。
异常检测和变化检测:尝试用不同的观点进行思考,以解决问题。异常检测是对罕见事件的检测。这种思维的转变在于考虑以小类作为异常值类,它可以帮助获得一种新方法来分离和分类样本。