机器学习的流程

如果未达到要求,重新循环
特征工程
将原始数据转换为更好地代表预测模型的潜在问题的特征的工程,从而提高了模型对位置数据预测的准确性( 属于数据预处理阶段的工作)
以scikit-learn为例:
1 | from sklearn.feature_extraction import DictVectorizer |
DictVectorizer.fit_transform:(在训练集上)将字典数据转换为特征值数组(默认是one-hot编码)

DictVectorizer.inverse_transform:上述过程逆转换
sklearn.feature_extraction.text.CountVectorizer:对文本进行特征值化,单个汉字单个字母不统计,因为单个汉字字母没有意义
1 | def countvec(): |

TF-IDF
如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
sklearn.feature extraction.text.TfidfVectorizer
Tf:term frequency:词的频率出现的次数
idf:逆文档频率inverse document frequency:log(总文档数量/该词出现的文档数量)
tf*idf 来代表重要性程度
(1)TF是词频(Term Frequency)
词频(TF)**表示词条(关键字)在文本中出现的频率**。
这个数字通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。
公式: **即:
其中 ni,j 是该词在文件 dj 中出现的次数,分母则是文件 dj 中所有词汇出现的次数总和;
(2) IDF是逆向文件频率(Inverse Document Frequency)
逆向文件频率 (IDF) :某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到。
如果包含词条t的文档越少, IDF越大,则说明词条具有很好的类别区分能力。
公式:
其中,**|D|** 是语料库中的文件总数。 |{j:ti∈dj}| 表示包含词语 ti 的文件数目(即 ni,j≠0 的文件数目)。如果该词语不在语料库中,就会导致分母为零,因此一般情况下使用 1+|{j:ti∈dj}|
即:
*(3)TF-IDF实际上是:TF * IDF*
某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
公式:
注: TF-IDF算法非常容易理解,并且很容易实现,但是其简单结构并没有考虑词语的语义信息,无法处理一词多义与一义多词的情况。