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.4 Apply 函数和 Map函数
Part 2.4: Apply and Map
如果你以前接触过大数据或函数式编程语言,你可能听说过map/reduce。Map和reduce是将创建的任务应用到数据帧(dataframe)的两个函数。Pandas支持函数式编程技术,允许您跨整个数据帧使用函数。除了您编写的函数外,Pandas还提供了几个用于数据帧的标准函数。
数据帧中Map函数的使用
Using Map with Dataframes
map函数允许您通过将列中的某些值映射到其他值来转换列。考虑Auto MPG数据集,其中包含一个字段origin_name,该字段包含一个介于1到3之间的值,该值指示每一辆汽车的地理来源。我们可以看到如何使用map函数将这个数字原点转换为每个原点的文本名称。
我们将开始加载自动MPG数据集。
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, ?])
pd.set_option(display.max_columns, 7)
pd.set_option(display.max_rows, 5)
display(df)
Pandas中的map方法操作单个列。为map提供一个值字典,用于转换目标列。映射键指定目标列中的哪些值应该转换为这些键指定的值。下面的代码展示了map函数如何将1、2和3的数值转换为北美、欧洲和亚洲的字符串值。Pandas中的map方法操作单个列。为map提供一个值字典,用于转换目标列。映射键指定目标列中的哪些值应该转换为这些键指定的值。下面的代码展示了map函数如何将1、2和3的数值转换为北美、欧洲和亚洲的字符串值。
# Apply the map
df[origin_name] = df[origin].map(
{1: North America, 2: Europe, 3: Asia})
# Shuffle the data, so that we hopefully see
# more regions.
df = df.reindex(np.random.permutation(df.index))
# Display
pd.set_option(display.max_columns, 7)
pd.set_option(display.max_rows, 10)
display(df)
数据帧中Apply函数的使用
Using Apply with Dataframes
数据帧的apply函数可以在整个数据帧上运行一个函数。您可以使用传统的命名函数或lambda函数。Python将针对数据帧中的每一行或每一列执行所提供的函数。函数的轴参数指定是跨行或列运行的。对于axis = 1,使用行。下面的代码计算一个称为efficiency 的级数,它是displacement除以horsepower。
efficiency = df.apply(lambda x: x[displacement]/x[horsepower], axis=1)
display(efficiency[0:10])
输出
45 2.345455
290 2.471831
313 1.677778
82 1.237113
33 2.320000
249 2.363636
27 1.514286
7 2.046512
302 1.500000
179 1.234694
dtype: float64
现在,您可以将该系列插入到数据框架中,作为新列或替换现有列。下面的代码将这个新系列插入到数据帧中。
df[efficiency] = efficiency
使用Apply和Map函数的特征工程
Feature Engineering with Apply and Map
在本节中,我们将看到如何使用map、apply和分组来计算复杂的特性。数据集为CSV格式:
https://www.irs.gov/pub/irs-soi/16zpallagi.csv
此URL包含美国政府“SOI税收统计-个人所得税统计”的公共数据。该网站的入口点在这里:
https://www.irs.gov/statistics/soi-tax-stats-inpidual-income-tax-statistics-2016-zip-code-data-soi
描述该数据的文档位于上面的链接。
对于这个特性,我们将尝试估计每个邮政编码的调整后总收入(AGI)。数据文件包含许多列;但是,您将只使用以下内容:
STATE - 国家(e.g., MO)
zipcode - 邮编 (e.g. 63017)
agi_stub - 年收入的六个不同等级 (1 through 6)
N1 - 每个agi_stub的纳税申报单的数量
注意,对于agi_stub括号中的每个邮政编码,该文件将有六行。您可以跳过邮政编码0或99999。
我们将用这些列创建一个输出CSV;但是,每个邮政编码只有一行。计算收入等级的加权平均值。例如,63017有以下6行:
我们必须把这六行合并成一行。出于隐私考虑,AGI被分成6个部分。我们需要将这些桶组合起来,并估计一个邮政编码的实际AGI。为此,考虑N1的值:
1 = 1 to 25,000
2 = 25,000 to 50,000
3 = 50,000 to 75,000
4 = 75,000 to 100,000
5 = 100,000 to 200,000
6 = 200,000 or more
这些范围的中位数约为:
1 = 12,500
2 = 37,500
3 = 62,500
4 = 87,500
5 = 112,500
6 = 212,500
使用这个你可以估计63017的平均AGI如下:
>>> totalCount = 4710 2780 2130 2010 5240 3510
>>> totalAGI = 4710 * 12500 2780 * 37500 2130 * 62500 2010 * 87500 5240 * 112500 3510 * 212500
>>> print(totalAGI / totalCount)
88689.89205103042
我们从读取政府数据开始。
import pandas as pd
df=pd.read_csv(https://www.irs.gov/pub/irs-soi/16zpallagi.csv)
首先,我们修剪所有邮政编码0或99999。我们还选择了我们需要的三个字段。
df=df.loc[(df[zipcode]!=0) & (df[zipcode]!=99999),
[STATE,zipcode,agi_stub,N1]]
pd.set_option(display.max_columns, 0)
pd.set_option(display.max_rows, 10)
display(df)
我们使用map函数将所有agi_stub值替换为正确的中值。
medians = {1:12500,2:37500,3:62500,4:87500,5:112500,6:212500}
df[agi_stub]=df.agi_stub.map(medians)
pd.set_option(display.max_columns, 0)
pd.set_option(display.max_rows, 10)
display(df)
接下来,我们将数据帧按邮政编码分组。
groups = df.groupby(by=zipcode)
该程序应用一个lambda在组中应用,然后计算AGI估计。
df = pd.DataFrame(groups.apply(
lambda x:sum(x[N1]*x[agi_stub])/sum(x[N1])))
.reset_index()
pd.set_option(display.max_columns, 0)
pd.set_option(display.max_rows, 10)
display(df)
现在可以重命名新的agi_estimate列。
df.clumns = [zipcode,agi_estimate]
pd.set_option(display.max_columns, 0)
pd.set_option(display.max_rows, 10)
display(df)
最后,我们检查63017的邮政编码是否得到了正确的值。
df[ df[zipcode]==63017 ]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至123456@qq.com 举报,一经查实,本站将立刻删除。