在进行机器学习项目时,通常无涯教程会忽略两个最重要的部分,分别是 数学 和 数据 。这是因为知道ML是一种数据驱动的方法,并且ML模型只会产生与提供给它的数据一样好的或坏的输出。
在上一章中,讨论了如何将CSV数据上传到ML项目中,但是最好在上传之前了解数据。可以通过统计和可视化两种方式来理解数据。
在本章中,在遵循以下Python的帮助下将了解带有统计信息的ML数据。
第一个秘诀是查看原始数据,查看原始数据很重要,因为无涯教程在查看原始数据后增加为ML项目更好地进行预处理以及处理数据的机会。
以下是通过使用Pima Indians糖尿病数据集上的Pandas DataFrame的head()函数实现的Python脚本,以查看前50行数据-
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脚本。
from pandas import read_csv path = r"C:\iris.csv" data = read_csv(path) print(data.shape)
(150, 4)
可以从输出中轻松观察到将要使用的数据集具有150行4列。
了解每个属性的数据类型是另一种好习惯,背后的原因是,根据要求,有时可能需要将一种数据类型转换为另一种数据类型。例如,可能需要将字符串转换为浮点数或整数,以表示分类或有序值。通过查看原始数据,可以对属性的数据类型有所了解,但是另一种方法是使用Pandas DataFrame的 dtypes 属性。借助 dtypes 属性,无涯教程可以对每种属性数据类型进行分类。可以通过以下Python脚本来理解-
from pandas import read_csv path = r"C:\iris.csv" data = read_csv(path) print(data.dtypes)
sepal_length float64 sepal_width float64 petal_length float64 petal_width float64 dtype: object
从上面的输出中,可以轻松地获取每个属性的数据类型。
已经讨论了Python配方来获取数据的维度,即行和列的数量,但是很多时候需要查看该数据维度的摘要。可以借助Pandas DataFrame的describe()函数来完成,该函数进一步提供每个数据属性的以下8个统计属性-
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中获得类分发。
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)
Class 0 500 1 268 dtype: int64
从上面的输出中,可以清楚地看到,类别0的观察次数几乎是类别1的观察次数的两倍。
两个变量之间的关系称为相关。在统计数据中,最常用的相关系数计算方法是Pearson的相关系数。它可以具有三个值,如下所示:
系数值= 1 - 它表示变量之间的完全正相关。
系数值= -1 - 它表示变量之间完全负的相关性。
系数值= 0 - 它表示变量之间完全没有相关性。
在将数据集用于ML项目之前,最好先检查一下数据集中属性的成对相关性,因为如果拥有高度相关的属性,则某些机器学习算法(例如线性回归和逻辑回归)的性能将很差,在Python中,借助Pandas DataFrame上的 corr()函数,可以轻松地计算数据集属性的相关矩阵。
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()函数轻松地计算每个属性的偏斜度。
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
从以上输出可以看到正偏或负偏。如果该值更接近于零,则显示较少的偏斜。
机器学习 - 数据统计 - 无涯教程网无涯教程网提供在进行机器学习项目时,通常无涯教程会忽略两个最重要的部分,分别是 数学 和 数据 。...https://www.learnfk.com/python-machine-learning/machine-learning-with-python-understanding-data-with-statistics.html