机器学习(1)—特征工程
1. 特征抽取
在实际的应用中,我们的数据并不是只有数字的数据,而是有各种不同的情况。可能会是一段文字,又或者会是图片、视频。把这些数据抽象成只有数字的方法,就是特征抽取。
1.1字典型数据(DictVectorizer类):
get_feature_names():data经过转换后的特征名称
inverse_transform():One-hot编码/稀疏矩阵转换为原数据形式
- 稀疏矩阵表示(DictVectorizer(),默认sparse=True):节约存储空间,方便读取
- One-Hot编码(DictVectorizer(sparse=False)):处理离散型数据
# 导库
from sklearn.feature_extraction import DictVectorizer
import pandas as pd
# 准备数据
data= [{'city':'北京','temperature':10,'weather':'阴'},{'city':'上海','temperature':20,'weather':'晴'},{'city':'南京','temperature':15,'weather':'雨'}]
print(data)
#运行结果:
#[{'city': '北京', 'temperature': 10, 'weather': '阴'},
#{'city': '上海', 'temperature': 20, 'weather': '晴'},
#{'city': '南京', 'temperature': 15, 'weather': '雨'}]
#稀疏矩阵表示:
dict1=DictVectorizer()
data_after1=dict1.fit_transform(data)
print(dict1.get_feature_names())
print(data_after1)
#运行结果:
#['city=上海', 'city=北京', 'city=南京', 'temperature', 'weather=晴', 'weather=阴', 'weather=雨']# (0, 1) 1.0 # (0, 3) 10.0# (0, 5) 1.0# (1, 0) 1.0# (1, 3) 20.0 # (1, 4) 1.0# (2, 2) 1.0# (2, 3) 15.0# (2, 6) 1.0
# One-Hot编码
dict2=DictVectorizer(sparse=False)
data_after2=dict2.fit_transform(data)
print(dict2.get_feature_names())
print(data_after2)
#运行结果:
#['city=上海', 'city=北京', 'city=南京', 'temperature', 'weather=晴', 'weather=阴', 'weather=雨']
#[[ 0. 1. 0. 10. 0. 1. 0.]
# [ 1. 0. 0. 20. 1. 0. 0.]
# [ 0. 0. 1. 15. 0. 0. 1.]]
1.2文本型数据
- 英文文本:text库中的CountVectorizer类
- 中文文本:先使用jieba进行分词
count方法:
from sklearn.feature_extraction.text import CountVectorizer
#稀疏矩阵形式
cv=CountVectorizer()
data=["Hiding from the rain and snow,Trying to forget but I won't let go.","In that misty morning when I saw your smiling face,You only looked at me and I was yours."]
print(cv.fit_transform(data))
print(cv.get_feature_names())
# 运行结果:
# (0, 7) 1 0:data中文档索引;7:词索引;1:单词在文档中的出现次数.
# (0, 5) 1 5号单词出现1次
# (0, 20) 1 20号单词出现1次
# (0, 15) 1
# (0, 0) 1
# (0, 18) 1
# (0, 22) 1
# (0, 21) 1
# (0, 4) 1
# (0, 2) 1
# (0, 25) 1
# (0, 9) 1
# (0, 6) 1
# (1, 0) 1
# (1, 8) 1
# (1, 19) 1
# (1, 12) 1
# (1, 13) 1
# (1, 24) 1
# (1, 16) 1
# (1, 27) 1
# (1, 17) 1
# (1, 3) 1
# (1, 26) 1
# (1, 14) 1
# (1, 10) 1
# (1, 1) 1
# (1, 11) 1
# (1, 23) 1
# (1, 28) 1
# ['and', 'at', 'but', 'face', 'forget', 'from', 'go', 'hiding', 'in', 'let', 'looked', 'me', 'misty', 'morning', 'only', 'rain', 'saw', 'smiling', 'snow', 'that', 'the', 'to', 'trying', 'was', 'when', 'won', 'you', 'your', 'yours']
from sklearn.feature_extraction.text import CountVectorizer
import jieba
cv=CountVectorizer()
data=["前尘往事成云烟,消散在彼此眼前。","只是因为在人群中多看了你一眼,再也没能忘掉你容颜。"]
print(cv.fit_transform(data))
#运行结果:
# (0, 1) 1
# (0, 3) 1
# (1, 2) 1
# (1, 0) 1
# ['再也没能忘掉你容颜', '前尘往事成云烟', '只是因为在人群中多看了你一眼', '消散在彼此眼前']
上述的结果,明显不符合我们的要求。原因是sklearn不会对中文进行分词。
#没处理之前文档形式 ["前尘往事成云烟,消散在彼此眼前。","只是因为在人群中多看了你一眼,再也没能忘掉你容颜。"]
#处理之后['前尘往事 成 云烟 , 消散 在 彼此 眼前 。', '只是 因为 在 人群 中多 看 了 你 一眼 , 再也 没 能 忘掉 你 容颜 。']
content=[]
for i in data:con=jieba.cut(i)con=list(con)c=' '.join(con)content.append(c)#区分extend
#类似于英文文档,每个单词之间有空格,分词的目的就在于将每个词组用空格分开
print(cv.fit_transform(content).toarray())
print(cv.get_feature_names())
# 运行结果:
# [[0 0 1 0 0 1 0 0 0 1 0 1 1]
# [1 1 0 1 1 0 1 1 1 0 1 0 0]]
# ['一眼', '中多', '云烟', '人群', '再也', '前尘往事', '只是', '因为', '容颜', '彼此', '忘掉', '消散', '眼前']
tf-idf方法:
tf—term frequency 词频
idf—inverse document frequency 逆文档频率:表示某一单词的重要性
t f = 文档中某一词语出现次数 文档的总词数 tf= \frac{\text { 文档中某一词语出现次数}}{\text { 文档的总词数 }} tf= 文档的总词数 文档中某一词语出现次数
i d f = log 10 总文本数量 该词出现的文本数量 idf=\log _{10} \frac{\text { 总文本数量 }}{\text { 该词出现的文本数量 }} idf=log10 该词出现的文本数量 总文本数量
假如有100个文档,“python”这个词在其中的10个文档中出现过, i d f = log 10 100 10 = 1 idf=\log _{10} \frac{\text { 100 }}{\text { 10 }}=1 idf=log10 10 100 =1, i d f idf idf越小,该词语就越重要
t f − i d f = t f ∗ i d f tf-idf=tf*idf tf−idf=tf∗idf
机器学习(1)—特征工程相关推荐
- 【机器学习】特征工程概述
特征工程 "数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已." 1.概念 维基百科:特征工程是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过 ...
- 面向机器学习的特征工程翻译版
前些日子推荐了一个仓库,是知名开源apachecn组织翻译的<面向机器学习的特征工程>英文版,可以说是特征工程的宝典,值得推荐. 仓库说明 知名开源apachecn组织翻译了<面向机 ...
- 面向机器学习的特征工程 六、降维:用 PCA 压缩数据集
来源:ApacheCN<面向机器学习的特征工程>翻译项目 译者:@cn-Wziv 校对:@HeYun 通过自动数据收集和特征生成技术,可以快速获得大量特征,但并非所有这些都有用.在第 3 ...
- 面向机器学习的特征工程 三、文本数据: 展开、过滤和分块
来源:ApacheCN<面向机器学习的特征工程>翻译项目 译者:@kkejili 校对:@HeYun 如果让你来设计一个算法来分析以下段落,你会怎么做? Emma knocked on t ...
- 面向机器学习的特征工程 一、引言
来源:ApacheCN<面向机器学习的特征工程>翻译项目 译者:@ZhipengYe 校对:(虚位以待) 机器学习将数据拟合到数学模型中来获得结论或者做出预测.这些模型吸纳特征作为输入.特 ...
- 面向机器学习的特征工程 八、自动化特征提取器:图像特征提取和深度学习
来源:ApacheCN<面向机器学习的特征工程>翻译项目 译者:friedhelm739 校对:(虚位以待) 视觉和声音是人类固有的感觉输入.我们的大脑是可以迅速进化我们的能力来处理视觉和 ...
- 面向机器学习的特征工程 七、非线性特征提取和模型堆叠
七.非线性特征提取和模型堆叠 来源:ApacheCN<面向机器学习的特征工程>翻译项目 译者:friedhelm739 校对:(虚位以待) 当在数据一个线性子空间像扁平饼时 PCA 是非常 ...
- 机器学习之 特征工程
之前相关文章目录: 机器学习 之线性回归 机器学习 之逻辑回归及python实现 机器学习项目实战 交易数据异常检测 机器学习之 决策树(Decision Tree) 机器学习之 决策树(Decisi ...
- 【AlgorithmStar机器学习】AS机器学习库特征工程使用说明文档
目录 Algorithm Star介绍 概述 AS库的一般处理流程 数据采集与清洗 向量生成与特征提取选择 机器学习 后续处理 Algorithm Star使用 数据类型-操作数 浮点类型操作数 整数 ...
- 【CS224W】(task2)传统图机器学习和特征工程
note 和CS224W课程对应,将图的基本表示写在task1笔记中了:传统图特征工程:将节点.边.图转为d维emb,将emb送入ML模型训练 Traditional ML Pipeline Hand ...
最新文章
- OpenCV数据结构与基本绘图(Mat 类、Point类、Scalar类等)
- QS最新世界大学排名发布,清华北大获史上最高名次
- oracle存储过程 调用java_Oracle存储过程调用Java方法
- 小米知识图谱团队斩获CCKS 2020实体链指比赛冠军
- 袁亚湘:愿为数学做更多
- 如何快速搭建yum源和成功检测第三方软件
- 什么是python基础教程-最好的Python入门教程是?
- AngularJ控制器
- python写ini文件_Python读写ini文件
- kubernetes集群pod异常状态ContainerCreating的解决
- php 费率计算_如何计算您的小时费率
- 【开源】3串锂电池充放电保护板设计参考
- NMAP Masscan python识别端口运行服务 常用命令速查表
- CATIA怎么约束快捷键_CATIA常用操作快捷键
- ubuntu安装WPS以及缺失字体
- Admin5推荐软文推广采用“链接标准化”
- siteserver/sscms 首页新闻排版及代码(二)
- 怎么制作有趣的表情包
- 面对人工智能,我们应有的态度
- fcpx插件:PremiumVFX Comic Titles(手绘漫画风格的标题和背景