特征工程系列:空间特征构造以及文本特征构造

本文详细介绍了特征工程中的空间特征构造和文本特征构造方法,包括按经纬度划分空间、使用坐标拾取系统获取行政区域信息、计算距离等空间特征;以及文本统计特征、字典映射、标签二值化、特征哈希、词袋模型、TF-IDF、LDA主题模型和词嵌入向量等文本特征。特征构造是机器学习成功的关键,需要深入理解和实践。
摘要由CSDN通过智能技术生成

特征工程系列:空间特征构造以及文本特征构造

本文为数据茶水间群友原创,经授权在本公众号发表。

关于作者:JunLiang,一个热爱挖掘的数据从业者,勤学好问、动手达人,期待与大家一起交流探讨机器学习相关内容~

0x00 前言

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。

那特征工程是什么?

特征工程是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程。

特征工程又包含了 Data PreProcessing(数据预处理)、Feature Extraction(特征提取)、Feature Selection(特征选择)和 Feature construction(特征构造)等子问题,本章内容主要讨论特征构造的方法。

创造新的特征是一件十分困难的事情,需要丰富的专业知识和大量的时间。机器学习应用的本质基本上就是特征工程。
——Andrew Ng

0x01 特征构造介绍

空间特征构造以及文本特征构造具体方法:

0x02 空间特征构造

1.按经纬度对空间进行划分

划分流程:
1)对经纬度进行特征分桶,得到类别特征
binned_latitude(lat) = [
0 < lat <= 10
10 < lat <= 20
]
binned_longitude(lon) = [
0 < lon <= 15
15 < lon <= 30
]
2)使用笛卡尔乘积生成空间划分后的特征
样本 0<lat<=10& 0<lon<=15 0<lat<=10& 15<lon<=30 10<lat<=20& 0<lon<=15 10<lat<=20& 15<lon<=30
1 1 0 0 0
2 ... ... ... ...
3)对每块子空间进行编码,得到类别特征

效果类似下图,把空间划分为多块子空间。

2.使用坐标拾取系统获取行政区域信息(类别特征)

  • 省份ID/名字
  • 城市ID/名字
  • 市辖区ID/名字
  • 街道ID/名字

3.结合其他地址计算距离

例如:计算每个地点至某商业中心的距离。

距离类型:

  • 欧式距离
  • 球面距离
  • 曼哈顿距离
  • 真实距离

0x03 文本特征构造

1.文本统计特征

  • 文本长度;
  • 单词个数;
  • 数字个数;
  • 字母个数;
  • 大小写单词个数;
  • 大小写字母个数;
  • 标点符号个数;
  • 特殊字符个数;
  • 数字占比;
  • 字母占比;
  • 特殊字符占比;
  • 名词个数;
  • 动词个数;

适用范围:所有文本特征。

统计单词的个数作为特征的程序实现

import pandas as pd

# 构造数据集
df = pd.DataFrame({'兴趣': ['健身 电影 音乐', '电影 音乐', '电影 篮球', '篮球 羽毛球', ]})
# 统计兴趣爱好的数量
df['兴趣数量'] = df['兴趣'].apply(lambda x: len(x.split()))
display(df.head())
# 输出:
兴趣 兴趣数量
0 健身 电影 音乐 3
1 电影 音乐 2
2 电影 篮球 2
3 篮球 羽毛球 2

2.字典映射

有序特征的映射,使用的方法是先构建一个映射字典 mapping,再用 pandas 的 map() 或者 replace() 函数进行映射转换。

适用范围:只有一个词语的有序特征。

程序实现:

import pandas as pd
df = pd.DataFrame({'edu_level': ['博士', '硕士', '大学', '大专及以下']})
#构建学历字典
mapping_dict={'博士':4,'硕士':3,'大学':2,'大专及以下':1}
#调用map方法进行转换
df['edu_level_map']=df['edu_level'].map(mapping_dict)
display(df.head())
# 输出
edu_level edu_level_map
0 博士 4
1 硕士 3
2 大学 2
3 大专及以下 1

3.标签二值化(LabelBinarizer)

功能与 OneHotEncoder 一样,但是 OneHotEncode 只能对数值型变量二值化,无法直接对字符串型的类别变量编码,而 LabelBinarizer 可以直接对字符型变量二值化。

适用范围:只有一个词语或者包含多个词语的特征。例子:
只有一个词语的特征:职业。
有多个词语的特征:用户兴趣特征为“健身 电影 音乐”。

程序实现:

import pandas as pd
from sklearn.preprocessing import LabelBinarizer
df = pd.DataFrame({'职业': ['老师', '程序员', '警察', '销售', '销售', ]})

lb = LabelBinarizer()
lb.fit(df['职业'])
print('类别:{}'.format(lb.classes_))
# 输出:类别:['程序员' '老师' '警察' '销售']

display(lb.fit_transform(df['职业']))
# 输出:
array([[0, 1, 0, 0],
[1, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1],
[0, 0, 0, 1]])

4.多标签二值化(MultiLabelBinarizer)

把有多个单词的文本转换01特征向量,转换后的结果可能会有多个为1的值。

适用范围:包含多个词语的特征。

程序实现:

import pandas as pd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值