python特征工程之特征抽取

特征抽取(Feature extraction):特征抽取则是将任意数据格式(例如文本和图像)转换为机器学习的数字特征。

  • 特征抽取在python scikit-learn中的API是:sklearn.feature_extraction

1. 分类特征提取变量

说明:DictVectorizer的处理对象是符号化(非数字化)的但是具有一定结构的特征数据,如字典等,将符号转成数字0/1表示

# 定义一组字典列表,用来表示多个数据样本(每个字典代表一个数据样本)
instance = [{'city':'beijin','temperature':30},{'city':'shenzhen','temperature':40},{'city':'guangzhou','temperature':50}]
# 从sklearn.feature_extraction导入DictVectorizer
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
# 输出转化后的特征矩阵
print(vec.fit_transform(instance).toarray())
# 输出各个维度的特征含义
print(vec.get_feature_names())

输出结果:

[[ 1.  0.  0. 30.]
 [ 0.  0.  1. 40.]
 [ 0.  1.  0. 50.]]
['city=beijin', 'city=guangzhou', 'city=shenzhen', 'temperature']

DictVectorizer对非数字化的处理方式是,借助原特征的名称,组合成新的特征,并采用0/1的方式进行量化,而数值型的特征转化比较方便,一般情况维持原值即可。
我们在字典结构中再增加一个特征"country",结果如下:

# 定义一组字典列表,用来表示多个数据样本(每个字典代表一个数据样本)
instance = [{'city':'beijin','country':'CN','temperature':30},{'city':'shenzhen','country':'MA','temperature':40},{'city':'guangzhou','country':'EG','temperature':50}]
# 从sklearn.feature_extraction导入DictVectorizer
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
# 输出转化后的特征矩阵
print(vec.fit_transform(instance).toarray())
# 输出各个维度的特征含义
print(vec.get_feature_names())

输出结果:

[[ 1.  0.  0.  1.  0.  0. 30.]
 [ 0.  0.  1.  0.  0.  1. 40.]
 [ 0.  1.  0.  0.  1.  0. 50.]]
['city=beijin', 'city=guangzhou', 'city=shenzhen', 'country=CN', 'country=EG', 'country=MA', 'temperature']

2. 文本特征处理(只限英文)

词频统计的API是CountVectorizer,对于每一个训练文本,它只考虑每种词汇在该训练文本中出现的频率,注意单个字符不进行统计,因为没有分类意义。

from sklearn.feature_extraction.text import CountVectorizer
# 构建文章【英文】
content = ['This is the first document.', 'This is the second second document.', 'And the third one.', 'Is this the first document? i x y']

#构建实例
con_vet = CountVectorizer()
#进行提取词语
x = con_vet.fit_transform(content)

print(x)   # (0, 1) 1 (文章下标,分词下标) 词在文章中出现的次数  sparse矩阵
print(x.toarray()) # 将 sparse矩阵 转化为 数组

# 使用 get_feature_names 获取全部的特征值,即所有文本的关键字 
names = con_vet.get_feature_names()
print(names) # 提取到的词

输出结果:

  (0, 8)	1
  (0, 3)	1
  (0, 6)	1
  (0, 2)	1
  (0, 1)	1
  (1, 8)	1
  (1, 3)	1
  (1, 6)	1
  (1, 1)	1
  (1, 5)	2
  (2, 6)	1
  (2, 0)	1
  (2, 7)	1
  (2, 4)	1
  (3, 8)	1
  (3, 3)	1
  (3, 6)	1
  (3, 2)	1
  (3, 1)	1
[[0 1 1 1 0 0 1 0 1]
 [0 1 0 1 0 2 1 0 1]
 [1 0 0 0 1 0 1 1 0]
 [0 1 1 1 0 0 1 0 1]]
['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']

处理中文,我们可以使用jieba分词,进行分词之后,进行处理

# pip install jieba

import jieba
from sklearn.feature_extraction.text import CountVectorizer

# 构建文章【中文】

content = ["今天阳光真好","我要去看北京天安门","逛完天安门之后我要去王府井","吃烤蝎子与烤蜈蚣","晚上去后海蹦个迪"]

content_list = []

for tmp in content:
    # jieba分词返回的是一个生成器
    res = jieba.cut(tmp)
    res_str = ','.join(res)
    content_list.append(res_str)

#构建实例
con_vet = CountVectorizer()

#进行提取词语
x = con_vet.fit_transform(content_list)

print(x)   # (0, 1) 1 (文章下标,分词下标) 词在文章中出现的次数  sparse矩阵
print(x.toarray()) # 将 sparse矩阵 转化为 数组

# 获取提取到词语
names = con_vet.get_feature_names()
print(names) # 提取到的词

输出结果:

  (0, 1)	1
  (0, 10)	1
  (1, 4)	1
  (1, 2)	1
  (1, 3)	1
  (2, 4)	1
  (2, 3)	1
  (2, 0)	1
  (2, 7)	1
  (3, 9)	1
  (3, 8)	1
  (4, 5)	1
  (4, 6)	1
[[0 1 0 0 0 0 0 0 0 0 1]
 [0 0 1 1 1 0 0 0 0 0 0]
 [1 0 0 1 1 0 0 1 0 0 0]
 [0 0 0 0 0 0 0 0 1 1 0]
 [0 0 0 0 0 1 1 0 0 0 0]]
['之后', '今天', '北京', '天安门', '我要', '晚上', '海蹦个', '王府井', '蜈蚣', '蝎子', '阳光']
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
特工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。它包括特征抽取特征预处理和特征降维等内容。特征工程对于机器学习的效果具有直接影响。 在Python中进行机器学习特征工程,可以使用多个库和工具来完成。下面是一些常用的Python库和工具: 1. Scikit-learn:Scikit-learn是一个功能丰富的机器学习库,提供了许多特征工程的方法,包括特征抽取特征预处理和特征降维等。你可以使用Scikit-learn来进行特征选择、标准化、缺失值处理等操作。 2. Pandas:Pandas是一个用于数据分析和处理的库,提供了丰富的数据操作功能。你可以使用Pandas来加载和清洗数据,进行数据预处理和特征选择。 3. Numpy:Numpy是Python中一个强大的数值计算库,提供了高效的数组操作功能。你可以使用Numpy来进行数值特征的处理,如归一化、标准化和缩放等。 4. Featuretools:Featuretools是一个用于自动特征工程的库,它可以根据数据的结构和关系自动生成特征。你可以使用Featuretools来创建新的特征,通过组合和聚合现有特征。 5. Feature-Engine:Feature-Engine是一个专注于特征工程的库,提供了多个特征处理方法。你可以使用Feature-Engine来处理缺失值、离群值、编码分类变量等。 在进行机器学习特征工程时,你需要根据具体的问题和数据集选择适合的方法和工具。通过合理的特征工程处理,可以提高机器学习模型的性能和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值