TF-IDF如何为机器学习生成特征?与一袋文字有什么不同



我希望得到TF-IDF如何产生可用于机器学习的特征的简要解释。词袋和TF-IDF有什么区别?我了解 TF-IDF 的工作原理;但不是如何用它制作特征以及如何在分类/回归中使用它们。

我正在使用scikit-learn;下面的代码在理论上和实践上实际上做了什么?我已经用我的理解和一些问题发表了评论,任何帮助将不胜感激:

  traindata = list(np.array(p.read_table('data/train.tsv'))[:,2]) #taking in data for TF-IDF, I get this
  testdata = list(np.array(p.read_table('data/test.tsv'))[:,2]) #taking in data for TF-IDF, I get this
  y = np.array(p.read_table('data/train.tsv'))[:,-1] #labels for our data
  tfv = TfidfVectorizer(min_df=3,  max_features=None, strip_accents='unicode',  
        analyzer='word',token_pattern=r'w{1,}',ngram_range=(1, 2), use_idf=1,smooth_idf=1,sublinear_tf=1) #making tf-idf object with params to dictate how it should behave
  rd = lm.LogisticRegression(penalty='l2', dual=True, tol=0.0001, 
                             C=1, fit_intercept=True, intercept_scaling=1.0, 
                             class_weight=None, random_state=None) 
  X_all = traindata + testdata #adding data together
  lentrain = len(traindata) #what is this?
  tfv.fit(X_all) #is this where features are created? Are all words used as features? What happens here ?
  X_all = tfv.transform(X_all)#transforms our numpy array of text into a TF-IDF
  X = X_all[:lentrain]
  X_test = X_all[lentrain:]
  rd.fit(X,y) #train LR on newly made feature set with a feature for each word?

我想 idf 是让你在这里感到困惑的原因,因为词袋是文档中单词的 tf,那么为什么是 idf ? IDF 是一种估计单词重要性的方法,通常,文档频率 (DF) 是估计单词在分类中的重要性的好方法,因为当一个单词出现在较少的文档中时(NBA 总是出现在属于体育的文档中)显示出更好的区分, 因此,IDF与单词的重要性呈正相关。

Tf-idf 是文档最常见的向量表示形式。它考虑了文本中单词的频率以及整个文档语料库中的单词频率。显然,这种方法没有科学依据,这意味着它在一堆上下文中务实地工作得很好,比如使用余弦距离或其他类型的度量的文档相似性,但不是从数学证明中得出的。

相关内容

  • 没有找到相关文章

最新更新