我正在尝试将一组评论数据集分类为两个类别,假设为类别A和类别B。我使用LightGBM
进行分类。
我多次更改了分类器的参数,但结果没有显著差异。
我认为问题出在预处理步骤上。我定义了一个函数来处理预处理,如下所示。我使用了Stemming
并移除了stopwords
。我不知道还缺少什么。我尝试过LancasterStemmer
和PorterStemmer
。
stops = set(stopwords.words("english"))def cleanData(text, lowercase = False, remove_stops = False, stemming = False, lemm = False): txt = str(text) txt = re.sub(r'[^A-Za-z0-9\s]',r'',txt) txt = re.sub(r'\n',r' ',txt) if lowercase: txt = " ".join([w.lower() for w in txt.split()]) if remove_stops: txt = " ".join([w for w in txt.split() if w not in stops]) if stemming: st = PorterStemmer() txt = " ".join([st.stem(w) for w in txt.split()]) if lemm: wordnet_lemmatizer = WordNetLemmatizer() txt = " ".join([wordnet_lemmatizer.lemmatize(w) for w in txt.split()]) return txt
还有哪些预处理步骤可以提高准确性?
数据集的URL:数据集
编辑:
我使用的参数如下所示。
params = {'task': 'train', 'boosting_type': 'gbdt', 'objective': 'binary', 'metric': 'binary_logloss', 'learning_rate': 0.01, 'max_depth': 22, 'num_leaves': 78, 'feature_fraction': 0.1, 'bagging_fraction': 0.4, 'bagging_freq': 1}
我调整了depth
和num_leaves
参数以及其他参数。但准确率似乎卡在某个水平上…
回答:
需要考虑几件事。首先,您的训练集不平衡 – 类别分布大约是70%/30%。您需要在训练时考虑到这一事实。您使用的是什么类型的特征?使用正确的特征集可能会提高您的性能。