×

Part 2.5 特征工程

minsx minsx 发表于2021-10-13 00:00:00 浏览117 评论0

抢沙发发表评论

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.5 特征工程       

Part 2.5: Feature Engineering

特征工程是机器学习的重要组成部分。现在,我们将手工设计特征。然而,在本课程的后面,我们将看到一些自动特征工程的技术。

计算字段

calculated fields

可以向程序从其他字段计算的数据帧中添加新的字段。我们可以创建一个新的列来给出重量单位是千克。给定单位为磅的重量,计算公制重量的公式为:

?(??)=?(??)×0.45359237

下面的Python代码执行此转换:

import osimport pandas as pd
df = pd.read_csv( "https://data.heatonresearch.com/data/t81-558/auto-mpg.csv", na_values=['NA', '?'])
df.insert(1, 'weight_kg', (df['weight'] * 0.45359237).astype(int))pd.set_option('display.max_columns', 6)pd.set_option('display.max_rows', 5)df

地址很难编码到神经网络中。有许多不同的方法,您必须考虑如何将地址转换为更有意义的内容。地图坐标是一个很好的方法。纬度和经度可以是一种有用的编码。由于互联网的强大功能,将地址转换成经纬度值相对容易。下面的代码确定了华盛顿大学的坐标:

import requests
address = "1 Brookings Dr, St. Louis, MO 63130"
response = requests.get( 'https://maps.googleapis.com/maps/api/geocode/json?key={}&address={}' \ .format(GOOGLE_KEY,address))
resp_json_payload = response.json()
if 'error_message' in resp_json_payload: print(resp_json_payload['error_message'])else: print(resp_json_payload['results'][0]['geometry']['location'])

输出

{'lat': 38.648238, 'lng': -90.30487459999999}


如果把纬度和经度作为两个特征输入神经网络,它们可能不会有太大帮助。这两个值可以让你的神经网络将地图上的位置聚类。有时地图上的群集位置是有用的。图2。SMK显示了美国各州吸烟人口的百分比。

图2。SMK:按州划分的吸烟者

上面的地图显示,某些行为,比如吸烟,可以在全球范围内聚集。

然而,您经常想要将坐标转换为距离。用球面上任意两点之间的大圆距离来估计地球上任意两点之间的距离是相当容易的:

下面的代码实现了这个公式:

Δ?=arccos(sin?1⋅sin?2+cos?1⋅cos?2⋅cos(Δ?))

?=?Δ?


from math import sin, cos, sqrt, atan2, radians
URL='https://maps.googleapis.com' + \ '/maps/api/geocode/json?key={}&address={}'
# Distance functiondef distance_lat_lng(lat1,lng1,lat2,lng2): # approximate radius of earth in km R = 6373.0
# degrees to radians (lat/lon are in degrees) lat1 = radians(lat1) lng1 = radians(lng1) lat2 = radians(lat2) lng2 = radians(lng2)
dlng = lng2 - lng1 dlat = lat2 - lat1
a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlng / 2)**2 c = 2 * atan2(sqrt(a), sqrt(1 - a))
return R * c
# Find lat lon for addressdef lookup_lat_lng(address): response = requests.get( \ URL) \ .format(GOOGLE_KEY,address)) json = response.json() if len(json['results']) == 0: print("Can't find: {}".format(address)) return 0,0 map = json['results'][0]['geometry']['location'] return map['lat'],map['lng']

# Distance between two locations
import requests
address1 = "1 Brookings Dr, St. Louis, MO 63130" address2 = "3301 College Ave, Fort Lauderdale, FL 33314"
lat1, lng1 = lookup_lat_lng(address1)lat2, lng2 = lookup_lat_lng(address2)
print("Distance, St. Louis, MO to Ft. Lauderdale, FL: {} km".format( distance_lat_lng(lat1,lng1,lat2,lng2)))

输出

Distance, St. Louis, MO to Ft. Lauderdale, FL: 1685.530517973114 km



距离是编码地址的一种有用方法。如果您考虑到什么距离可能对您的数据集有帮助,这将是有帮助的。考虑:

1.到大城市的距离
2.与竞争对手的距离
3.到配送中心的距离
4到零售店的距离

下面的代码计算了10所大学到圣路易斯华盛顿大学的距离:

# Encoding other universities by their distance to Washington University
schools = [    ["Princeton University, Princeton, NJ 08544", 'Princeton'],    ["Massachusetts Hall, Cambridge, MA 02138", 'Harvard'],    ["5801 S Ellis Ave, Chicago, IL 60637", 'University of Chicago'],    ["Yale, New Haven, CT 06520", 'Yale'],    ["116th St & Broadway, New York, NY 10027", 'Columbia University'],    ["450 Serra Mall, Stanford, CA 94305", 'Stanford'],    ["77 Massachusetts Ave, Cambridge, MA 02139", 'MIT'],    ["Duke University, Durham, NC 27708", 'Duke University'],    ["University of Pennsylvania, Philadelphia, PA 19104",         'University of Pennsylvania'],    ["Johns Hopkins University, Baltimore, MD 21218", 'Johns Hopkins']]
lat1, lng1 = lookup_lat_lng("1 Brookings Dr, St. Louis, MO 63130")
for address, name in schools:    lat2,lng2 = lookup_lat_lng(address)    dist = distance_lat_lng(lat1,lng1,lat2,lng2)    print("School '{}', distance to wustl is: {}".format(name,dist))

输出

School 'Princeton', distance to wustl is: 1354.4748428037537 

School 'Harvard', distance to wustl is: 1670.6358699966058 

School 'University of Chicago', distance to wustl is: 418.07123096093096 

School 'Yale', distance to wustl is: 1508.209168740192 

School 'Columbia University', distance to wustl is: 1418.2512902029155 

School 'Stanford', distance to wustl is: 2780.7830466634337 

School 'MIT', distance to wustl is: 1672.4354422735219 

School 'Duke University', distance to wustl is: 1046.7924543575177 

School 'University of Pennsylvania', distance to wustl is: 1307.1873732319766 

School 'Johns Hopkins', distance to wustl is: 1184.3754484499111



扫码关注我们

微信号 :AI_Frontiers

qq群:966308496

今日头条:人工智能学术前沿

知乎:人工智能学术前沿

米斯云

访客