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?
2 个回答
0
Tf-idf是文档中最常用的向量表示方法。它考虑了文本中单词的出现频率,以及在整个文档集合中的频率。
显然,这种方法并没有科学依据,也就是说,它在很多情况下效果不错,比如用余弦距离来判断文档相似性或其他类型的度量,但并不是通过数学证明得出的。
4
我想你可能是对idf感到困惑,因为“词袋模型”是指一个词在文档中出现的频率(tf),那么idf又是什么呢?idf是一种用来估计一个词重要性的方法。通常来说,文档频率(df)是评估一个词在分类中重要性的好方法。因为当一个词出现在较少的文档中时(比如“nba”这个词通常只出现在体育相关的文档里),它就能更好地区分不同的内容。所以,idf和一个词的重要性是正相关的,也就是说idf越高,说明这个词越重要。