机器学习之理解数据

1、"理解数据"常用的七种方法:

  • 1.简单地查看数据
  • 2.审查数据的维度
  • 3.审查数据的类型和属性
  • 4.总结查看数据分类的分布情况
  • 5.通过描述性统计分析数据
  • 6.理解数据属性的相关性
  • 7.审查数据的分布状况

2、代码实现


# ============================================================================

# 1.简单地查看数据【这是加强对数据理解最有效的方法之一,通过对数据的观察,可以发现数据的内在关系】
from pandas import read_csv
file_name = r'pima_data.csv'
names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
data = read_csv(file_name,names=names)
print(data.head(10))    #显示数据前十行
'''
   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
'''

# ============================================================================

# 2.审查数据的维度
'''
在机器学习当中要注意数据的行和列,原因有以下两点:
    1.太多的行会导致花费大量时间来训练算法得到模型,太少会导致对算法训练不充分,得不到合适的模型
    2.如果数据有太多特征,会引起某些算法性能低下的问题
通过DataFrame的shape属性,可以便捷的查看数据集中有多少行和多少列
'''
#显示数据的行和列数据
print(data.shape)   #(768, 9)

# ============================================================================

# 3.审查数据的类型和属性【字符串会被转化成浮点数或整数,便于计算和分类】
print(data.dtypes)
'''
preg       int64
plas       int64
pres       int64
skin       int64
test       int64
mass     float64
pedi     float64
age        int64
class      int64
dtype: object
'''

# ============================================================================

# 4.描述性统计
'''
例如:
    数据记录数(count)
    平均值(mean)
    标准方差(std)
    最小值(min)
    下四分位数(25%)
    中位数(50%)
    上四分位数(75%)
    最大值(max)
'''
from pandas import set_option
set_option('display.width',100)
# 设置数据的精确度
set_option('precision',4)
print(data.describe())
'''
preg      plas      pres      skin      test      mass      pedi       age    class
count  768.0000  768.0000  768.0000  768.0000  768.0000  768.0000  768.0000  768.0000  768.000
mean     3.8451  120.8945   69.1055   20.5365   79.7995   31.9926    0.4719   33.2409    0.349
std      3.3696   31.9726   19.3558   15.9522  115.2440    7.8842    0.3313   11.7602    0.477
min      0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0780   21.0000    0.000
25%      1.0000   99.0000   62.0000    0.0000    0.0000   27.3000    0.2437   24.0000    0.000
50%      3.0000  117.0000   72.0000   23.0000   30.5000   32.0000    0.3725   29.0000    0.000
75%      6.0000  140.2500   80.0000   32.0000  127.2500   36.6000    0.6262   41.0000    1.000
max     17.0000  199.0000  122.0000   99.0000  846.0000   67.1000    2.4200   81.0000    1.000

'''

# ============================================================================

# 5.数据分组分布【适用于分类算法】
'''
    在分类算法中,需要知道每个分类数据大概有多少条记录,以及数据分布是否平衡,
如果数据分布平衡性差,需要在数据加工阶段进行数据处理,来提高数据分布的平衡性。
通过Pandas的属性和方法,可以查看数据的分布情况
'''
print("*"*30)
print(data.groupby('class').size())
'''
class
0    500
1    268
dtype: int64
'''

# ============================================================================

# 6.数据属性的相关性
'''
    数据属性的相关性是指数据的两个属性是否互相影响,以及这种影响是
什么方式的。通用的计算两个属性相关性的方法是皮尔逊相关系数,它是一个
介于1和-1之间的值,其中,1表示变量完全正相关,0表示无关,-1表示完全
负相关。在机器学习中,有些数据的关联性比较高时,有些算法的性能就会降低。
当数据特征的相关性比较高时,应该考虑对特征进行降维处理。
'''
set_option('display.width',100)
set_option('precision',2)
print("*"*30)
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
'''

# ============================================================================

# 7.数据的分布分析
'''
    通过分析的数据的高斯分布(正态分布)来确认数据的偏离情况,高斯
分布曲线呈钟型,两头低,中间高,左右对称。
    skew v. 偏离
'''
print("*"*30)
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
'''

你可能感兴趣的:(机器学习,python,人工智能)