监督学习范式
机器学习中的监督,或者简单的监督学习,是指将目标(被预测的内容)的ground truth用于观察(输入)的情况。
- observations:观察是想要预测的东西,用x表示观察值,观察值也叫做输入。
- targets:目标是和观察相对应的标签,通常是要被预测的事情,用y表示,也被称为ground truth。
- model:模型是一个数学表达式或者函数,受到一个观察值x,并预测其目标标签的值。
- parameters:表示权重,参数模型,用符号w表示。
- predictions:预测,也叫做估计,是模型在给定观测值的情况下所猜测的目标的值。
- loss function:损失函数,预测和训练数据里的观测目标之间的距离。给定一个目标及其预测,损失函数将分配一个损失的标量实值,损失值越低则预测效果越好。2
样本和目标编码
用数字表示观测值(文本),以便与机器学习算法一起使用。
表示文本的一种简单的方法是用数字向量进行表示。 有无数种方法可以执行这种映射/表示。
独热表示
one-hot表示是从一个零向量开始,如果单词出现在句子或文档里,则将向量里的相应条目设置为1。
对句子进行标记,忽略标点符号,并将所有的单词都用小写字母表示,就会得到一个大小为8的词汇表:{time, fruit, flies, like, a, an, arrow, banana}。所以,我们可以用一个八维的one-hot向量来表示每个单词。
短语“like a banana”的one-hot表示将是一个3×8矩阵,其中的列是8维的one-hot向量。通常还会看到“折叠”或二进制编码,其中文本/短语由词汇表长度的向量表示,用0和1表示单词的缺失或存在。“like a banana”的二进制编码是:[0,0,0,1,1,0,0,1]。
TF 词频表示
sklearn生成折叠的单热或者二进制表示
from sklearn.feature_extraction.text import CountVectorizer
import seaborn as sns
corpus =['Time flies flies like an arrow.',
'Fruit flies like a banana.']
one_hot_vectorizer =CountVectorizer(binary=True)
#binary=True则CountVectorizer不再使用术语/令牌的计数。如果文档中存在令牌,则令牌为1(如果不存在),则与令牌0的出现频率无关。因此,您将只处理二进制值。
#默认为False,一个关键词在一篇文档中可能出现n次,如果binary=True,非零的n将全部置为1,这对需要布尔值输入的离散概率模型的有用的
one_hot = one_hot_vectorizer.fit_transform(corpus).toarray()
#CountVectorizer是通过fit_transform函数将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在第i个文本下的词频。即各个词语出现的次数
x = ['a','arroe','banana','files','fruit','like','time']
sns.heatmap(one_hot, annot=True,
cbar=False, xticklabels=True,
yticklabels=['Sentence 1','Sentence 2'])
IDF
考虑一组专利文件。您可能希望它们中的大多数都有诸如claim、system、method、procedure等单词,并且经常重复多次。TF表示对更频繁的单词进行加权。然而,像“claim”这样的常用词并不能增加我们对具体专利的理解。
相反,如果“tetrafluoroethylene”这样罕见的词出现的频率较低,但很可能表明专利文件的性质,我们希望在我们的表述中赋予它更大的权重。
TF-IDF
TF-IDF = TF*IDF
TF−IDF公式表达来一次词的出现频率,并且在一定程度上降低了某些高频词的影响。
如果一个单词在所有文档里都出现,那这个单词IDF=0,则TF-IDF=0,从而可以忽略它的重要性。如果一个词在文档里出现的很少,那么其IDF值将会是最大值logN。
from sklearn.feature_extraction.text import TfidfVectorizer
import seaborn as sns
tfidf_vectorizer = TfidfVectorizer()
tfidf = tfidf_vectorizer.fit_transform(corpus).toarray()
#计算文档里的词的TF-IDF并矩阵表示
x2 = ['a','arroe','banana','files','fruit','like','time']
sns.heatmap(tfidf,annot=True,
cbar=False,xticklabels=x2