【发布时间】:2018-04-12 22:09:43
【问题描述】:
我正在尝试将评论数据集分为两类,即 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
是否需要进行更多的预处理步骤才能获得更高的准确性?
数据集的网址:Dataset
编辑:
我使用的参数如下所述。
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 参数以及其他参数。但是准确率有点卡在某个水平..
【问题讨论】:
-
您的停用词列表中是否有任何带有负面含义的术语(例如“not”)?
-
你确定这是关于预处理的,我觉得没问题吗?你用多少个词来构建你的输入向量,1 个词向量,2 个词向量,3...,?什么是数据集和标签?如果数据集是公开的,您是否将您的结果与其他尝试进行了比较?
-
参加比赛。数据集是公开的。我将使用数据集的 URL 编辑问题。就目前最好结果的准确性而言,我的结果大约低了 2%。
-
我认为它与预处理有关。我已经运行了几乎所有的参数组合。!!
-
现在我尝试了
WordNetLemmatizer,准确率提高了1%。!!我会再次尝试调参,让你知道结果!!
标签: machine-learning nlp sentiment-analysis lightgbm