独热编码即 One-Hot 编码,又称一位有效编码。其方法是使用 N位状态寄存器来对 N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效

One-Hot 编码是分类变量作为二进制向量的表示。(1) 将分类值映射到整数值。(2) 然后,每个整数值被表示为二进制向量,除了数的索引之外,它都是零值,它被标记为1。是一种十分常用的类别处理手段,当特征是离散的,无序的,就可以通过one hot 进行特征数字化,比如一个特征有高、中、低三个值,通过独热编码,就可以分别编码为001,010,100。

一、one-hot 编码优缺点

优点:

(1) 解决了分类器不好处理离散数据 的问题。

a. 欧式空间。在回归,分类,聚类等机器学习算法中,特征之间距离计算 或 相似度计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。

b. one-hot 编码。使用 one-hot 编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值 就 对应欧式空间的某个点。将离散型特征使用 one-hot 编码,确实会让 特征之间的距离计算 更加合理。

(2) 在一定程度上也起到了 扩充特征 的作用。

缺点:

在文本特征表示上有些缺点就非常突出了。

(1) 它是一个词袋模型,不考虑 词与词之间的顺序(文本中词的顺序信息也是很重要的);

(2) 它 假设词与词相互独立(在大多数情况下,词与词是相互影响的);

(3) 它得到的 特征是离散稀疏 的 (这个问题最严重)。

ps:One-Hot在分类器变量中的应用

类似 SVM中,原本线性不可分的特征,经过project之后到高维之后变得可分了 GBDT处理高维稀疏矩阵的时候效果并不好,即使是低维的稀疏矩阵也未必比SVM好

import numpy as np#分词过的语料
corpus=['这 是 第一个 文档','这是 第二个 文档','这是 最后 一个 文档'
]#手动实现
words=[]
for corpu in corpus:words.extends(corpu.split())
words=list(set(words))#构建词表  编码
word_dict={word:index for index, word in enumerate(words)}
print(word_sict)
vocab_size=len(word_dict(def get_one_hot(index):获得一个one_hot编码#全零矩阵one_hot=[0 for _in range(vocab_size)]#指定位置1one_hot[index]=1return np.array(one_hot)#原始句子
print(corpus[0])
#转换成index
indexs=[word_dict[word] for word in corpus[0].split()]#转换成one_hot
one_hot_np=np.array([get_one_hot(index) for index in indexs])
print(one_hot_np)##Sklearn实现
from sklearn.preprocessing import LabelBinarizer#初始化编码器
lb=LabelBinarizer()
lb.fit_transform(words)
print(lb.classes_)#所有句子
sentence=corpus[0].split()
print(sentence)
one_hot_np2=lb.transform(sentence)
print(one_hot_np2)#解码
print(lb.inverse_transform(one_hot_np2))

Q3:指定位置

Q1:.extend(),.split(),list(),set()

Q1.1:list(set())

Q2:wordL index for index

Q4:for xx in xx

Q6:师出同门,有很多for  in  的构造

不用enumerate就不行吗?

range里边一定要加上len吗?

python中for循环输出(index,value)的两种方法

index索引

value索引值

方法一、利用enumerate()

如果是实例数组应该是没有问题的吧

不能直接for i in range?

内部必须加个数字,外边套上个range?

方法二:

Q3:jion()以需求为导向,确定哪几个种类的函数能够满足这种操作

from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
import seaborn as sns
import matplotlib.pyplot as plt
import jieba
import jieba,analyse#独热表示从一个0向量开始,若单词出现在句子或文档中,则将向量相应的条目设置为1
#英文的处理和展示corpus=['xxx'.'xxx']
one_hot_vectorizer=CountVectorizer(binary=True)
one_hot=one_hot_vectorizer.fit_transform(corpus).toarray()
sns.heatmap(one_hot, annot=True, char=False, yticklabels=['Sentence 1','Sentence 2'])
plt.show()
# 中文的处理和展示
# 获取停用词列表
def get_stopwords_list(stopwordfile):stopwords = [line.strip() for line in open(stopwordfile, encoding='UTF-8').readlines()]return stopwords# 移除停用词
def movestopwords(sentence):stopwords = get_stopwords_list('stopwords.txt')  # 这里加载停用词的路径santi_words = [x for x in sentence if len(x) > 1 and x not in stopwords]return santi_words# 语料
corpus = ["小明硕士毕业于中国科学院计算所,后在日本京都大学深造。","小王本科在清华大学,后在南京计算所工作和深造,后在日本早稻田大学深造","小李本科在清华大学,硕士毕业于中国科学院计算所,博士在南京大学"]
newcorpus = []
for str in corpus:orgwordlist = jieba.lcut(str)  # jieba分词wordlist = movestopwords(orgwordlist)  # 移除停用词newword = " ".join(wordlist)  # 按照语料库要求进行空格分隔newcorpus.append(newword)  # 按照语料库要求转换成列表
# newcorpus
# ['小明 硕士 毕业 中国科学院 计算所 日本京都大学 深造',
# '小王 本科 清华大学 南京 计算所 工作 深造 日本早稻田大学 深造',
# '小李 本科 清华大学 硕士 毕业 中国科学院 计算所 博士 南京大学']
one_hot_vectorizer = CountVectorizer(binary=True)  # 创建词袋数据结构
one_hot = one_hot_vectorizer.fit_transform(newcorpus).toarray()  # 转换语料,并矩阵化
# 下面为热词的输出结果
# one_hot_vectorizer.vocabulary_
# {'小明': 4, '硕士': 14, '毕业': 11, '中国科学院': 0, '计算所': 15, '日本京都大学': 8, '深造': 12, '小王': 6, '本科': 10, '清华大学': 13, '南京': 1, '工作': 7, '日本早稻田大学': 9, '小李': 5, '博士': 3, '南京大学': 2}
# one_hot_vectorizer.get_feature_names()
# ['中国科学院', '南京', '南京大学', '博士', '小明', '小李', '小王', '工作', '日本京都大学', '日本早稻田大学', '本科', '毕业', '深造', '清华大学', '硕士', '计算所']
# one_hot
# [[1 0 0 0 1 0 0 0 1 0 0 1 1 0 1 1]
#  [0 1 0 0 0 0 1 1 0 1 1 0 1 1 0 1]
#  [1 0 1 1 0 1 0 0 0 0 1 1 0 1 1 1]]
sns.set_style({'font.sans-serif': ['SimHei', 'Arial']})
sns.heatmap(one_hot, annot=True, cbar=False, xticklabels=one_hot_vectorizer.get_feature_names(),yticklabels=['语句1', '语句2', '语句3'])
plt.show()
tfidf_vectorizer = TfidfVectorizer()  # 创建词袋数据结构
tfidf = tfidf_vectorizer.fit_transform(newcorpus).toarray()  # 转换语料,并矩阵化
# 下面为热词的输出结果
# tfidf_vectorizer.vocabulary_
# '小明': 4, '硕士': 14, '毕业': 11, '中国科学院': 0, '计算所': 15, '日本京都大学': 8, '深造': 12, '小王': 6, '本科': 10, '清华大学': 13, '南京': 1, '工作': 7, '日本早稻田大学': 9, '小李': 5, '博士': 3, '南京大学': 2}
# tfidf_vectorizer.get_feature_names()
# ['中国科学院', '南京', '南京大学', '博士', '小明', '小李', '小王', '工作', '日本京都大学', '日本早稻田大学', '本科', '毕业', '深造', '清华大学', '硕士', '计算所']
# tfidf
# [[0.35221512 0.         0.         0.         0.46312056 0.  0.         0.         0.46312056 0.         0.        0.35221512  0.35221512 0.         0.35221512 0.27352646]
#  [0.         0.35761701 0.         0.         0.         0.  0.35761701 0.35761701 0.         0.35761701 0.27197695 0.  0.54395391 0.27197695 0.         0.21121437]
#  [0.30443385 0.         0.40029393 0.40029393 0.         0.40029393  0.         0.         0.         0.         0.30443385 0.30443385  0.         0.30443385 0.30443385 0.23642005]]
sns.heatmap(tfidf, annot=True, cbar=False, xticklabels=tfidf_vectorizer.get_feature_names(),yticklabels=['语句1', '语句2', '语句3'], vmin=0, vmax=1, cmap="YlGnBu")
plt.show()

Q1:CountVectorizer(binary=True)

.fit_transform(xx)

.toarray()

.heatmap(one_hot, xxx)

数据预处理中,fit(),transform(),fit_transform()

Q2:停用词的什么诡异操作?

xx  后面的  for  相当于做一步筛选

文本特征提取——one-hot相关推荐

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

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

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

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

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

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

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

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

  5. Python 文本特征提取

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

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

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

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

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

  8. 网络挖掘技术——微博文本特征提取

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

  9. NLP基础--文本特征提取中文分词word2vec原理

    文章目录 1. 文本特征提取 1.1 词集模型 1.2 BOW(Bag of Words)词袋模型 1.3 TF-IDF 2. 中文分词 2.1 基于词典匹配的分词方法 2.1.1 正向最大匹配(MM ...

  10. NLP中的语言模型及文本特征提取算法

    本文以基本语言模型为逻辑主线,漫谈NLP中两个核心问题,即文本表示(Text Representation)与文本特征提取(Feature Engineering).通过本文你会发现,NLP的一部分经 ...

最新文章

  1. Magento 如何在注册页面调出Address Information
  2. 虚拟机中的黑苹果系统经常卡死_程序员吐槽macOS 10.15系统:破坏SSH默认规则
  3. linux编译动态库未定义,linux 编译动态链接库 so,避免运行时才发现函数未 ......
  4. 让Elasticsearch飞起来!百亿级实时查询优化实战
  5. 《统计学习方法》P74勘误
  6. Spring Data Couchbase 1.0 GA发布
  7. 企业实战_20_MyCat使用HAPpoxy对Mycat负载均衡
  8. Vue基本使用---vue工作笔记0002
  9. Detailed Full-Body Reconstructions of Moving People from Monocular RGB-D Sequences
  10. win10计算机系统优化设置,有效提升Win10运行速度的基本优化设置方案
  11. 硬盘检测工具哪个好?5款硬盘工具对比测试
  12. Idea终端中无法使用maven命令问题解决
  13. 计算机无法读取移动光驱,外置光驱无法读取光盘怎么解决
  14. WPS表格插入制作折线图表教程
  15. 工厂模式与抽象工厂模式
  16. 想学IT的必看!黑马培训javaee
  17. 排列组合问题 “n个球放入m个盒子(8种)”
  18. html5 video js控制摄像头的焦距,H5中使用video标签实现选择摄像头功能的示例
  19. 伦敦经济学院开设加密货币相关课程
  20. Jackson对泛型的序列化和反序列化方法汇总

热门文章

  1. Crow:hello world
  2. div水平垂直居中问题以及解决方法的兼容性
  3. MPLS基础概述MP-BGP实验(华为 DataCome)
  4. Amazon 4.7 星评,领域新经典,了解服务设计就读它
  5. 2022-2027年中国房产网络服务行业市场全景评估及发展战略规划报告
  6. 从SQLserver中导出表数据到Access
  7. linux中sh脚本的写法
  8. 暗影精灵4适合计算机专业,暗影精灵4什么时候出?今日发布,为专业电竞而生...
  9. 智慧城市水质在线COD监测传感器
  10. C语言实现简单的五子棋代码