1.特征工程直接影响模型预测结果。python用sklearn库做特征工程

两种文本特征抽取方法(Count,  tf-idf)

(1)特征抽取API(统计单词次数)

sklearn.feature_extraction

python调用sklearn.feature_extraction 的DictVectorizer实现字典特征抽取

# 字典特征抽取
def dictvec():# 特征数据是字符串的话不能输入到算法里面,是要进行特征,转换的转换成OneHot编码。有利于机器学习算法分析。# 字典数据抽取,把字典中的一些类别特征,转换乘特征(数字),但是字典里面的数字不会进行转换,因为本来就是数据。# 如果是数组形式,有类别的这些特征,我们要先转换成字典,再进行数据抽取。# 实例化dict = DictVectorizer()# 返回的data是一个sparse矩阵格式# sparse节约内存,方便数据处理data = dict.fit_transform([{"city": "北京", 'temperature': 100}, {"city": "上海", 'temperature': 60}, {"city": "深圳", 'temperature': 30}])print(dict.inverse_transform(data))print(data)# 返回内容列表print(dict.get_feature_names())

#文本数据特种抽取

python调用sklearn.feature_extraction.text 的 CountVectorizer实现文本特征抽取

# 文本特征抽取
def countvec():test = CountVectorizer()        # 统计次数data = test.fit_transform(["life is is short I like python", "life is too long,I dislike python"])# 词去重,放在一个列表中print(test.get_feature_names())# 返回的是sparse格式,toarray手动转成二元组形式,对每篇文章在词的列表里面统计每个词出现的次数(单个字母不统计)print(data.toarray())# ['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']# [[0 1 1 1 0 1 1 0]#  [1 1 1 0 1 1 0 1]]# 中文特征抽取
# 中文因为没有像英文一样进行分词,所以在做特征抽取前要先用jieba进行分词
def cutword():# 用jieba分词cont1 = jieba.cut("今天很残酷,明天很残酷,后天很美好")cont2 = jieba.cut("我们看到的从很远星系来的光是几百万年前发出的")cont3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解他")# 转换成列表content1 = list(cont1)content2 = list(cont2)content3 = list(cont3)# print(content3)# ['如果', '只用', '一种', '方式', '了解', '某样', '事物', ',', '你', '就', '不会', '真正', '了解', '他']# 把列表转换成字符串c1 = ' '.join(content1)c2 = ' '.join(content2)c3 = ' '.join(content3)# print(c1)# 今天 很 残酷 , 明天 很 残酷 , 后天 很 美好return c1, c2, c3def hanzivec():test = CountVectorizer()c1, c2 ,c3 = cutword()data = test.fit_transform([c1, c2, c3])print(test.get_feature_names())print(data.toarray())

注:对英文和中文特征抽取过程是不一样的,因为英文单词与单词之间是有空格的,所以不用进行分词。

但是对于中文,词与词之间是没有空格的,所以需要先用jieba进行分词处理,再做特征抽取。

英文特征抽取结果:

['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']
[[0 2 1 1 0 1 1 0]
 [1 1 1 0 1 1 0 1]]

中文特征抽取结果:
['一种', '不会', '了解', '事物', '今天', '光是', '几百万年', '发出', '只用', '后天', '如果', '我们', '方式', '明天', '星系', '某样', '残酷', '看到', '真正', '美好']
[[0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 2 0 0 1]
 [0 0 0 0 0 1 1 1 0 0 0 1 0 0 1 0 0 1 0 0]
 [1 1 2 1 0 0 0 0 1 0 1 0 1 0 0 1 0 0 1 0]]

(2)对于以上用统计每个单词数量的方法来做文章的比较,有一个问题就是,每篇文章假如出现了大量的中性词(所以,因为,如果,那么等等),用统计的方法就不再合适。

TF-IDF

Tf:term frequency(词的频率)

idf:inverse document frequency(逆文档频率)

统计词每篇文章出现的次数 * log(总文档数量/该词出现的文档数量)=重要性

举例:

假如有三篇文章c1, c2, c3

“所以”一词出现在两篇文章中,c1出现了5次,c2出现了2次

那么对于第一篇文档TF-IDF就是5*log(3/2)

那么对于第二篇文档TF-IDF就是2*log(3/2)

对于原本出现次数比较多的此压缩了权重

对于原本出现次数比较少的此增加了权重

可以得出每个词对于这篇文章的重要性

具体意思就是如果一些词在一篇文章出现频率较高,在其他文章出现频率较低,那么说明这些词对于这篇文章重要程度较高。而对于一些所有文章都出现的词那么重要程度较低。

from sklearn.feature_extraction.text import TfidfVectorizer

# TFIDF特征抽取
def tfidfvec():test = TfidfVectorizer()c1, c2, c3 = cutword()data = test.fit_transform([c1, c2, c3])print(test.get_feature_names())print(data.toarray())

一共三篇文章,结果是每个词在其所在的文章所占的比重。

目标值标签编码

sklearn必须导入数值型。不能是字符串(可以导入一维数组)。

所以我们需要对目标值进行处理

from sklearn.preprocessing import LabelEncoder#去除最后一列,用LabelEncoder转换成编码(0,1,2)
data.iloc[:, -1] = LabelEncoder().fit_transform(data.iloc[:, -1])

类别型特征做独热编码OneHotEncoder

例如:

有两列特征性别(男,女)、学历(初中,高中,大学)

小明是男生,大学。那么做完独热编码后小明的特征就转换成

1,0,0,0,1

# 取所有行的第一列到倒数第二列
X = data.iloc[:, 1:-1]#auto,自动识别有几类
enc = OneHotEncoder(categories='auto')# toarray,将结果转换成一个array数组
result = enc.fit_transform(X).toarray()# 将OneHot编码后的结果还原
pd.DataFrame(enc.inverse_transform(result))# 换回OneHot编码后的分类对照结果
# enc.get_feature_names()

Binarizer处理对特征做二值化处理

# 所有对列处理的方法传入的数值都不能是一维,要转成二维数组
X = data_2.ilco[:, 0].values.reshape(-1, 1)transformer = Binarizer(threshold=30).fit_transform(X)# 将转换后的0,1数值替换掉原来的列
data_2.iloc[:, 0] = transformer

KBinsDiscretizer对数值做多值化处理

from sklearn.preprocessing import KBinsDiscretizer# 分成3箱,用独热编码,等宽
est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')

机器学习文本特征提取相关推荐

  1. 机器学习---文本特征提取之词袋模型与tfidf特征

    假设有一段文本:"I have a cat, his name is Huzihu. Huzihu is really cute and friendly. We are good frie ...

  2. 机器学习 笔记05——特征工程之特征处理:字典特征提取、文本特征提取

    目录 1.类别型特征的处理-特征编码 1.1 处理少量特征 1.2 处理大量的类别特征 1.3 字典特征提取(特征离散化) ⭐ 1.4   文本特征提取(英文+中文)⭐ 1.4.1 英文数据演示 1. ...

  3. 【机器学习】特征提取

    特征提取 目标 应用DictVectorizer实现对类别特征进行数值化.离散化 应用CountVectorizer实现对文本特征进行数值化 应用TfidfVectorizer实现对文本特征进行数值化 ...

  4. 机器学习 文本分类 代码_无需担心机器学习-如何在少于10行代码中对文本进行分类

    机器学习 文本分类 代码 This article builds upon my previous two articles where I share some tips on how to get ...

  5. Python文本特征提取 DictVectorizer CountVectorizer TfidfVectorizer 附代码详解

    文章目录 DictVectorizer 对使用字典储存的数据进行特征提取与向量化 CountVectorizer / TfidfVectorizer 处理无特殊数据结构存储的数据 词袋模型(Bag o ...

  6. 字典特征提取,文本特征提取。

    文章目录 1 定义 2. 字典特征提取API 3. 字典特征提取案例: 1.实现效果: 2.实现代码 4. 文本特征提取 1. 方法 2. 英文案例 1. 实现效果 2.流程 3. 中文案例 使用到的 ...

  7. 踩实底子|每日学习|02-特征工程和文本特征提取【下】

    前文说到,特征工程是为了预测结果数据的处理步骤,也简单用了一两个实例说明了文本特征的提取,其中字典特征提取和文本特征主要是将特征数据化,也就是one-hot编码.为了不让一篇博文显得长篇大论,后面两个 ...

  8. Python 文本特征提取

    文章目录 一.字典特征抽取 二.文本特征数值的统计 英文文本 中文文本 Tf-idf 一.字典特征抽取 使用到的API DictVectorizer(sparse=True) from sklearn ...

  9. 中文文本特征提取—流程

    特征提取是机器学习的重要步骤,相对于英文文本来说,中文文本的特征提取就有些麻烦,因为英文是有空格隔开的,所以好处理.但是中文就不一样了,它是一句话,词与词之间没有分割符.所以必须先进行分割词. 中文文 ...

  10. 数据挖掘:网络挖掘技术——微博文本特征提取

    经典的向量空间模型(VSM: Vector Space Model)由Salton等人于60年代提出,并成功地应用于著名的SMART文本检索系统.VSM概念简单,把对文本内容的处理简化为向量空间中的向 ...

最新文章

  1. linux查看重传次数,TCP-聊一聊重传次数
  2. C语言编程模拟超市抹零结账,STL实践项目之用queue模拟超市结账环节
  3. WebService SOAP、Restful和HTTP(post/get)请求区别
  4. Dubbo Mesh 在闲鱼生产环境中的落地实践
  5. 考试系统试题实现(单选项)
  6. python剪刀石头布_如何用python写剪刀石头布
  7. 关于index.html被缓存问题
  8. linux多cpu运行python脚本,linux系统使用python获取cpu信息脚本分享
  9. pojo类中的布尔类型的变量为什么不能加is
  10. linux tar命令压缩_Linux tar命令来压缩和提取文件
  11. 【裴礼文数学分析】例1.2.1
  12. DSP6678 中断程序
  13. Windows_解决win7开机画面变成vista画面的方法
  14. 7z 类库解析之 Format7zF 工程
  15. java 实现双人五子棋
  16. 190种超全的解密工具任你选!!
  17. 常见端口对应服务及入侵方式
  18. 雷军—我十年的程序员生涯
  19. springboot基于Java的电影院售票与管理系统毕业设计源码011449
  20. 鸿蒙系统magic4.0,Magic UI 4.0正式版

热门文章

  1. Java技术栈思维导图
  2. 二、SSM即Spring、SpringMVC、Mybatis整合
  3. 飞行堡垒fx80g拆卸电源_集成度较高 华硕飞行堡垒FX50拆机解析
  4. 一步步教你如何实现小程序倒计时三二一后跳转页面功能,附加倒计时过渡动画
  5. html模块开发模板引擎,给开发者10款最佳的 JavaScript 模板引擎
  6. app如何添加广告位 uni_广告以及广告位的详细说明(如何在APP中添加广告)
  7. Android聊天软件的开发(一)--预备知识
  8. HC05蓝牙模块修改相关配置
  9. win7系统配置smb服务器,技术编辑为你解说win7系统打开smb服务的解决方法
  10. 达梦数据库、表字段创建索引或删除索引,增加表字段、修改字段类型或长度、修改注释sql语句