TF-IDF如何为机器学习生成特征?与词袋模型有何不同?

我希望能简要了解TF-IDF如何生成可用于机器学习的特征。词袋模型和TF-IDF之间有何区别?我理解TF-IDF的工作原理,但不明白如何用它生成特征,以及这些特征如何在分类/回归中使用。

我正在使用scikit-learn;以下代码在理论上和实践中实际做了什么?我已经根据我的理解进行了注释,并提出了一些问题,任何帮助都将非常感激:

  traindata = list(np.array(p.read_table('data/train.tsv'))[:,2]) #获取用于TF-IDF的数据,我得到了这个
  testdata = list(np.array(p.read_table('data/test.tsv'))[:,2]) #获取用于TF-IDF的数据,我得到了这个
  y = np.array(p.read_table('data/train.tsv'))[:,-1] #我们的数据标签
  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) #创建带有参数的TF-IDF对象,以规定其行为方式
  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 #将数据合并
  lentrain = len(traindata) #这是什么?
  tfv.fit(X_all) #特征是在这里创建的吗?所有单词都被用作特征吗?这里发生了什么?
  X_all = tfv.transform(X_all)#将我们的文本numpy数组转换为TF-IDF
  X = X_all[:lentrain] 
  X_test = X_all[lentrain:] 
  rd.fit(X,y) #在新生成的特征集上训练逻辑回归,每个单词一个特征?

回答:

我想这里让你困惑的是idf,因为词袋模型是文档中单词的tf,那么为什么要用idf呢?idf是一种估计单词重要性的方法,通常,文档频率(df)是估计单词在分类中的重要性的好方法,因为当一个单词出现在较少的文档中时(例如,nba总是出现在属于体育的文档中),显示出更好的区分性,所以idf与单词的重要性呈正相关。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注