Applications of Deep Neural Networks with Keras
基于Keras的深度神经网络应用
著:Jeff Heaton 译:人工智能学术前沿
目录
1.Python基础
2.机器学习Python
3.TensorFlow简介
4.表格类数据的训练
5.正则化和Dropout
6.用于计算机视觉的卷积神经网络
7.生成对抗网络
8.Kaggle数据集
9.迁移学习
10.Keras的时间序列
11.自然语言处理与语音识别
12.强化学习
13.Advanced/Other Topics
14.其他神经网络技术
2.3 分组、排序和变换
Part 2.3: Grouping, Sorting, and Shuffling
现在我们来看看影响整个Pandas数据帧的几种方法。这些技术将允许我们对数据集进行分组、排序和变换。这些都是数据预处理和评估的基本操作。
变换数据集
Shuffling a Dataset
数据集的行顺序中可能隐藏着信息。除非您处理的是时间序列数据,否则行顺序不应该很重要。考虑一下你的训练集是否包括某家公司的员工。也许这个数据集是按员工在公司的年数排序的。可以使用单独的列来指定服务年限。但是,按照这个顺序保存数据可能会有问题。
考虑是否要将数据分割为训练和验证。最终,验证集可能只包含较新的员工,而训练集只包含较长期的员工。将数据分割成k折交叉验证可能会有类似的问题。由于这些问题,对数据集进行洗牌是很重要的。
通常,混批和重建索引是一起进行的。混排使数据集的顺序随机化。但是,它并没有改变Pandas的行号。下面的代码演示了重新混排。注意,第一列,即行索引,没有被重置。通常,这不会导致任何问题,并允许追溯到数据的原始顺序。然而,我通常更喜欢重置这个索引。我的理由是,我通常不关心初始位置,在一些实例中,这种无序索引可能会导致问题。
import os
import pandas as pd
import numpy as np
df = pd.read_csv(
"https://data.heatonresearch.com/data/t81-558/auto-mpg.csv",
na_values=['NA', '?'])
#np.random.seed(42) # Uncomment this line to get the same shuffle each time
df = df.reindex(np.random.permutation(df.index))
pd.set_option('display.max_columns', 7)
pd.set_option('display.max_rows', 5)
display(df)
下面的代码演示了一个重索引。请注意reindex如何对行索引进行排序。
pd.set_option('display.max_columns', 7)
pd.set_option('display.max_rows', 5)
df.reset_index(inplace=True, drop=True)
display(df)
数据集排序
Sorting a Data Set
虽然在训练前洗选数据集总是一个好主意,但在训练和预处理期间,您可能还希望对数据集进行排序。对数据集进行排序允许您对一个或多个列按升序或降序排列行。下面的代码按名称对MPG数据集进行排序,并显示第一辆汽车。
import os
import pandas as pd
df = pd.read_csv(
"https://data.heatonresearch.com/data/t81-558/auto-mpg.csv",
na_values=['NA', '?'])
df = df.sort_values(by='name', ascending=True)
print(f"The first car is: {df['name'].iloc[0]}")
pd.set_option('display.max_columns', 7)
pd.set_option('display.max_rows', 5)
display(df)
The first car is: amc ambassador brougham
数据集分组
Grouping a Data Set
分组是对数据集的典型操作。结构化查询语言(SQL)将此操作称为“GROUP BY”。程序员使用分组来总结数据。因此,汇总行数通常会收缩,而且无法撤消分组。由于这种信息的丢失,在分组之前保留原始数据是非常重要的。
Auto MPG数据集用于演示分组。
import os
import pandas as pd
df = pd.read_csv(
"https://data.heatonresearch.com/data/t81-558/auto-mpg.csv",
na_values=['NA', '?'])
pd.set_option('display.max_columns', 7)
pd.set_option('display.max_rows', 5)
display(df)
上面的数据集可以用于表现组摘要。例如,下面的代码将按平均值对cylinders进行分组。此代码将提供分组。除了mean之外,还可以使用其他聚合函数,如sum或count。
g = df.groupby('cylinders')['mpg'].mean()
g
输出
cylinders
3 20.550000
4 29.286765
5 27.366667
6 19.985714
8 14.963107
Name: mpg, dtype: float64
将这些平均值作为字典可能是有用的。
d = g.to_dict()
d
输出
{3: 20.55,
4: 29.28676470588236,
5: 27.366666666666664,
6: 19.985714285714284,
8: 14.963106796116508}
字典允许您快速访问单个元素。例如,你可以快速查找六缸汽车的平均值。您将看到,本模块后面介绍的目标编码使用了这种技术。
d[6]
输出
19.985714285714284
下面的代码显示了如何计算与每个cylinder计数匹配的行数。
df.groupby('cylinders')['mpg'].count().to_dict()
输出
{3: 4, 4: 204, 5: 3, 6: 84, 8: 103}
举报