请看一下这个链接。这是我几个月前提出的一个问题,经过一些建议和探索后,我能够成功地使用 TFIDF 和 MultinomialNB 分类器来非常准确地根据Composition列预测“项目”。我自己写了答案来告诉我如何解决它。但这一次,同样的逻辑对类似的数据集并没有帮助。
旧数据:(在上面的链接中引用我之前的示例)
UID Item Composition
1 Water Hydrogen,Oxygen
2 Sulfuric acid Hydrogen,Sulfur,Oxygen
3 Alcohol Spirit
4 Hydrochloric acid Hydrogen,Chloride
5 Citric Acid Hydrogen,Carbon, Oxygen
新数据示例:
UID Item Composition
1 [Sweater] [Wool, knitting, handmade, knitting needle]
2 [Jeans] [Denim, cotton, orange thread, stonewash, blue dye]
3 [CottonTrouser] [Cotton, littlepolyster, weaving, handstitch, vcut]
4 [SilkShirt] [wormsilk, artificialsilk, weaving, hand looming, color dying, coating]
5 [Carpet] [Wool, cotton, organic cotton, knitting, sewing]
这次我有很多这样的数据。该Item列中大约有 4200 个此类项目。我正在尝试将 TFIDF 与二元组和三元组一起使用,并使用 MultinomialNB 使算法学习其中的所有项目并准确Composition预测。Item
1)我希望 TF-IDF 在单词级别上使用 n-gram,以便它可以对单词进行矢量化。
2)我希望分类器根据不同的成分对项目进行分类,以便它可以了解哪些成分组合在一起。
对于列中的某些项目Item,它们在列中包含大约 10 个值Composition。所以我使用了 min_df=8 和 ngram_range=(1,8),希望它可以尝试构建每个作文大约 8 个单词的词汇表。
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(sublinear_tf=True, min_df=8, norm='l2', encoding='latin-1', ngram_range=(1,8), analyzer='word',lowercase=True,stop_words='english')
features = tfidf.fit_transform(dftest.Composition.values.astype('U')).toarray()
labels = dftest.Indexer
features.shape
无论我尝试哪种组合,预测都会出错,并且我注意到 ngram 并没有真正查看Composition列中的单词级别。
我需要关于如何更好地解决这个问题和我的方法中的错误的专家建议。把我当作这个领域的新手。