Python机器学习

统计数据

Python机器学习统计数据详细操作教程

简介

在使用机器学习项目时,通常我们忽略两个最重要的部分,分别是 数学 数据 。这是因为,我们知道ML是一种数据驱动的方法,并且ML模型只会产生与提供给它的数据一样好的或坏的结果。
在上一章中,我们讨论了如何将CSV数据上传到我们的ML项目中,但是最好在上传之前了解数据。我们可以通过统计和可视化两种方式来理解数据。
在本章中,借助以下Python食谱,我们将了解具有统计信息的ML数据。

查看原始数据

第一个方法是查看原始数据。查看原始数据非常重要,因为我们在查看原始数据后将获得的洞察力将增加我们为ML项目更好地进行预处理以及处理数据的机会。
以下是通过使用Pima Indians糖尿病数据集上的Pandas DataFrame的head()函数实现的Python脚本,以查看前50行以更好地了解它-

示例

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
print(data.head(50))

输出

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
10    4    110  92    0     0    37.6   0.191    30     0
11   10    168  74    0     0    38.0   0.537    34     1
12   10    139  80    0     0    27.1   1.441    57     0
13    1    189  60   23   846    30.1   0.398    59     1
14    5    166  72   19   175    25.8   0.587    51     1
15    7    100   0    0     0    30.0   0.484    32     1
16    0    118  84   47   230    45.8   0.551    31     1
17    7    107  74    0     0    29.6   0.254    31     1
18    1    103  30   38    83    43.3   0.183    33     0
19    1    115  70   30    96    34.6   0.529    32     1
20    3    126  88   41   235    39.3   0.704    27     0
21    8     99  84    0     0    35.4   0.388    50     0
22    7    196  90    0     0    39.8   0.451    41     1
23    9    119  80   35     0    29.0   0.263    29     1
24   11    143  94   33   146    36.6   0.254    51     1
25   10    125  70   26   115    31.1   0.205    41     1
26    7    147  76    0     0    39.4   0.257    43     1 
27    1     97  66   15   140    23.2   0.487    22     0
28   13    145  82   19   110    22.2   0.245    57     0
29    5    117  92    0     0    34.1   0.337    38     0
30    5    109  75   26     0    36.0   0.546    60     0
31    3    158  76   36   245    31.6   0.851    28     1
32    3     88  58   11    54    24.8   0.267    22     0 
33    6     92  92    0     0    19.9   0.188    28     0
34   10    122  78   31     0    27.6   0.512    45     0 
35    4    103  60   33   192    24.0   0.966    33     0
36   11    138  76    0     0    33.2   0.420    35     0
37    9    102  76   37     0    32.9   0.665    46     1
38    2     90  68   42     0    38.2   0.503    27     1
39    4    111  72   47   207    37.1   1.390    56     1
40    3    180  64   25    70    34.0   0.271    26     0
41    7    133  84    0     0    40.2   0.696    37     0
42    7    106  92   18     0    22.7   0.235    48     0
43    9    171 110   24   240    45.4   0.721    54     1 
44    7    159  64    0     0    27.4   0.294    40     0
45    0    180  66   39     0    42.0   1.893    25     1
46    1    146  56    0     0    29.7   0.564    29     0
47    2     71  70   27     0    28.0   0.586    22     0
48    7    103  66   32     0    39.1   0.344    31     1
49    7    105   0    0     0    0.0    0.305    24     0
我们可以从上面的输出中观察到,第一列给出的行号对于引用特定观察值非常有用。

检查数据维度

了解ML项目需要多少行和列数据总是一个好习惯。背后的原因是-
假设行和列太多,那么运行算法和训练模型将花费很长时间。 假设行和列太少,那么我们就没有足够的数据来很好地训练模型。
以下是通过在Pandas Data Frame上打印shape属性实现的Python脚本。我们将在虹膜数据集上实现它,以获取其中的行数和列数。

示例

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.shape)

输出

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
(150, 4)
从输出中我们可以轻松地看到我们将要使用的虹膜数据集具有150行和4列。

获取每个属性的数据类型

了解每个属性的数据类型是另一种好习惯。背后的原因是,根据要求,有时我们可能需要将一种数据类型转换为另一种数据类型。例如,我们可能需要将字符串转换为浮点数或int以表示分类或有序值。通过查看原始数据,我们可以对属性的数据类型有所了解,但是另一种方法是使用Pandas DataFrame的 dtypes 属性。借助 dtypes 属性,我们可以对每种属性数据类型进行分类。可以通过以下Python脚本来理解-

示例

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.dtypes)

输出

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
sepal_length float64
sepal_width float64
petal_length float64
petal_width float64
dtype: object
从上面的输出中,我们可以轻松地获取每个属性的数据类型。

数据统计摘要

我们已经讨论了Python配方来获取数据的形状,即行和列的数量,但是很多时候我们需要查看该数据形状的摘要。可以借助Pandas DataFrame的 describe()函数来完成,该函数进一步为每个数据属性提供以下8个统计属性-
总数 平均值 标准偏差 最低价值 最大值 25% 中位数,即50% 75%

示例

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
from pandas import read_csv
from pandas import set_option
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
set_option('display.width', 100)
set_option('precision', 2)
print(data.shape)
print(data.describe())

输出

(768, 9)
       preg     plas     pres    skin     test     mass     pedi     age      class
count  768.00   768.00   768.00  768.00   768.00   768.00   768.00   768.00   768.00
mean     3.85   120.89    69.11   20.54    79.80    31.99     0.47    33.24     0.35
std      3.37    31.97    19.36   15.95   115.24     7.88     0.33    11.76     0.48
min      0.00     0.00     0.00    0.00     0.00     0.00     0.08    21.00     0.00
25%      1.00    99.00    62.00    0.00     0.00    27.30     0.24    24.00     0.00
50%      3.00   117.00    72.00   23.00    30.50    32.00     0.37    29.00     0.00
75%      6.00   140.25    80.00   32.00   127.25    36.60     0.63    41.00     1.00
max     17.00   199.00   122.00   99.00   846.00    67.10     2.42    81.00     1.00
从以上输出中,我们可以观察到Pima印度糖尿病数据集的统计摘要以及数据的形状。

查看类分布情况

在需要知道类值平衡的分类问题中,类分布统计信息很有用。知道类别值的分布很重要,因为如果我们的类别分布高度不平衡,即一个类别比其他类别具有更多的观察值,那么在我们的ML项目的数据准备阶段可能需要特殊处理。借助Pandas DataFrame,我们可以轻松地在Python中获得类分发。

示例

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
count_class = data.groupby('class').size()
print(count_class)

输出

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
Class
0 500
1 268
dtype: int64
从上面的输出中,可以清楚地看到,类别0的观察次数几乎是类别1的观察次数的两倍。

查看属性之间的关联

两个变量之间的关系称为相关。在统计数据中,最常用的相关系数计算方法是Pearson的相关系数。它可以具有以下三个值-
系数值= 1 -它表示变量之间的完全相关。 系数值= -1 -它表示变量之间完全的相关性。 系数值= 0 -它表示变量之间完全没有相关性。
对我们而言,在将数据集用于ML项目之前,先检查数据集中属性的成对相关性总是一件好事,因为如果我们拥有高度相关的属性,则某些机器学习算法(例如线性回归和逻辑回归)的性能将很差。在Python中,我们可以借助Pandas DataFrame上的 corr()函数轻松地计算数据集属性的相关矩阵。

示例

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
from pandas import read_csv
from pandas import set_option
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
set_option('display.width', 100)
set_option('precision', 2)
correlations = data.corr(method='pearson')
print(correlations)
输出
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
以上输出中的矩阵给出了数据集中所有属性对之间的相关性。

审查属性分布的偏斜

偏度可以定义为假定为高斯分布,但在一个方向或另一个方向或向左或向右扭曲或偏移的分布。由于以下原因,复查属性的偏斜度是重要的任务之一
数据中存在偏斜度需要在数据准备阶段进行校正,以便我们可以从模型中获得更高的准确性。 大多数ML算法都假定数据具有高斯分布,即钟形曲线数据的正态分布。
在Python中,我们可以通过在Pandas DataFrame上使用 skew()函数轻松地计算每个属性的偏度。

示例

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
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
从上面的输出中,可以看到正偏或负偏。如果该值更接近于零,则表示偏斜较小。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4