我希望能够简要解释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?
答案 0 :(得分:4)
我想idf是让你在这里迷茫的原因,因为文字袋是文字中的单词,所以为什么是idf? idf是一种估计单词重要程度的方法,通常,文档频率(df)是评估单词在分类中有多重要的一种好方法,因为当一个单词出现在较少的文档中时(nba将始终出现在文档中属于运动) )表现出更好的解释,因此idf与词的重要性正相关。
答案 1 :(得分:0)
Tf-idf是文档最常用的矢量表示。它考虑了文本中的单词的频率以及整个文档语料库中的单词的频率。 显然,这种方法没有得到科学支持,这意味着它在一系列上下文中实际运行良好,例如使用余弦距离或其他类型度量的文档相似性,但不是从数学证明中得出的。