【机器学习】Pima数据探索--七种武器

七种理解数据的方法

  • 简单查看数据
  • 审查数据的维度
  • 审查数据的类型和属性
  • 总结查看数据分类的分布情况
  • 统计分析数据
  • 理解数据属性的相关性
  • 审查数据的分布情况
# 简单查看数据
from pandas import read_csv
filename = 'data/pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names) # 手动指定头部
peek = data.head(10)
print(peek)
   preg  plas  pres  skin  test  mass   pedi  age  class
0     6   148    72    35     0  33.6  0.627   50      1
1     1    85    66    29     0  26.6  0.351   31      0
2     8   183    64     0     0  23.3  0.672   32      1
3     1    89    66    23    94  28.1  0.167   21      0
4     0   137    40    35   168  43.1  2.288   33      1
5     5   116    74     0     0  25.6  0.201   30      0
6     3    78    50    32    88  31.0  0.248   26      1
7    10   115     0     0     0  35.3  0.134   29      0
8     2   197    70    45   543  30.5  0.158   53      1
9     8   125    96     0     0   0.0  0.232   54      1

了解数据的维度

知道数据有多少行,多少列很重要,通过pandas的shape属性可以知道。

print(data.shape)
(768, 9)

数据的属性和类型

了解数据是什么类型,方便下一步的计算。

print(data.dtypes)
preg       int64
plas       int64
pres       int64
skin       int64
test       int64
mass     float64
pedi     float64
age        int64
class      int64
dtype: object

可以看出来,数据都是数值类型,两个是浮点数,其他都是整数类型。

describe, 描述性统计信息

from pandas import set_option
set_option('precision',4)
print(data.describe())
           preg      plas      pres      skin      test      mass      pedi  \
count  768.0000  768.0000  768.0000  768.0000  768.0000  768.0000  768.0000   
mean     3.8451  120.8945   69.1055   20.5365   79.7995   31.9926    0.4719   
std      3.3696   31.9726   19.3558   15.9522  115.2440    7.8842    0.3313   
min      0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0780   
25%      1.0000   99.0000   62.0000    0.0000    0.0000   27.3000    0.2437   
50%      3.0000  117.0000   72.0000   23.0000   30.5000   32.0000    0.3725   
75%      6.0000  140.2500   80.0000   32.0000  127.2500   36.6000    0.6262   
max     17.0000  199.0000  122.0000   99.0000  846.0000   67.1000    2.4200   

            age    class  
count  768.0000  768.000  
mean    33.2409    0.349  
std     11.7602    0.477  
min     21.0000    0.000  
25%     24.0000    0.000  
50%     29.0000    0.000  
75%     41.0000    1.000  
max     81.0000    1.000  

数据分组分布 – 适用于分类算法

知道每个类有多少数据,看数据的分布是否均衡,如果不均衡,我们就对数据进行预处理,再进入下一步。

print(data.groupby('class').size())
class
0    500
1    268
dtype: int64

可以看出数据有两个类别,一类有500个,另一类有268个数据,不是特别均衡,但是在同一个数量级。

数据属性的相关性探索

在机器学习中,当数据的关联性比较高时,有些算法的性能会降低,比如线性回归和逻辑斯蒂回归算法等。

当数据特征相关性比较高时,可以考虑对特征进行降维,使用corr()可以查看数据特征值之间的关联关系。

set_option('display.width', 100)
# 设置数据精度
set_option('precision', 2)
print(data.corr(method='pearson'))
       preg  plas  pres  skin  test  mass  pedi   age  class
preg   1.00  0.13  0.14 -0.08 -0.07  0.02 -0.03  0.54   0.22
plas   0.13  1.00  0.15  0.06  0.33  0.22  0.14  0.26   0.47
pres   0.14  0.15  1.00  0.21  0.09  0.28  0.04  0.24   0.07
skin  -0.08  0.06  0.21  1.00  0.44  0.39  0.18 -0.11   0.07
test  -0.07  0.33  0.09  0.44  1.00  0.20  0.19 -0.04   0.13
mass   0.02  0.22  0.28  0.39  0.20  1.00  0.14  0.04   0.29
pedi  -0.03  0.14  0.04  0.18  0.19  0.14  1.00  0.03   0.17
age    0.54  0.26  0.24 -0.11 -0.04  0.04  0.03  1.00   0.24
class  0.22  0.47  0.07  0.07  0.13  0.29  0.17  0.24   1.00

数据的分布分析

机器学习算法一般假设数据遵循高斯分布,所以通过分析数据的高斯分布情况,可以确认数据的偏离情况。用skew()方法计算所有数据属性的高斯分布偏离情况。数据接近0时表示数据的偏差很小。

print(data.skew())
preg     0.90
plas     0.17
pres    -1.84
skin     0.11
test     2.27
mass    -0.43
pedi     1.92
age      1.13
class    0.64
dtype: float64

总结

对数据的分析是机器学习的重要步骤,只有对数据有足够的理解,才能选择出有效的算法来建立模型。上面列出的7个方法,也是7个角度,7个步骤。

审查数据时,还有以下几个技巧:

  • 审查数字,观察思考数据的特点,找到数据的内在关联以及对解决问题的帮助
  • 问为什么,观察数据时,多问几个为什么
  • 写下想法,边观察边记录自己的想法,这些想法在后面的步骤有大用

END.

参考:

《机器学习Python实践》–魏贞原

你可能感兴趣的:(Machine,Learning)