【问题标题】:Extremely high accuracy metrics for tree classifiers树分类器的极高准确度指标
【发布时间】:2017-03-13 21:18:27
【问题描述】:

我正在开展一个项目,将总统辩论推文分类为针对每位候选人的中性、正面和负面。 (不是当前的辩论数据集)。我正在使用Decision treesDecision tree ensembleAdaBoost 进行培训。问题是我得到了 100% 的准确率,这是非常奇怪和不可能的。

我拥有的数据是bag-of-words 模型的形式。词汇表中的每个单词都由 0/1 表示,具体取决于该单词是否出现在每条推文中。我在问题的末尾包含了统计数据。 df_obama 是一个包含所有关于奥巴马的推文的数据框。

df_Obama = pd.DataFrame.from_csv("../data/Obama_BagOfWords.csv")
df_Obama = df_Obama.reindex(np.random.permutation(df_Obama.index)).reset_index()
dataFeatures = df_Obama[allAttribs_Obama]
targetVar = list(df_Obama['Class'])

splitRatio = 0.9
splitPoint = int(splitRatio*len(dataFeatures))
dataFeatures_train = dataFeatures[:splitPoint]
dataFeatures_test = dataFeatures[splitPoint:]

targetVar_train = targetVar[:splitPoint]
targetVar_test = targetVar[splitPoint:]

clfObj = tree.DecisionTreeClassifier()
clfObj.fit(dataFeatures_train,targetVar_train)
preds = list(clfObj.predict(dataFeatures_test))
accScore = accuracy_score(targetVar_test,preds)
labels = [1,-1,0]

precision = precision_score(targetVar_test,preds,average=None,labels=labels)
recall = recall_score(targetVar_test,preds,average=None,labels=labels)
f1Score = f1_score(targetVar_test,preds,average=None,labels=labels)

print("Overall Acurracy",accScore)
print("precision",precision)
print("recall",recall)
print("f1Score",f1Score)

Overall Acurracy 1.0
precision [ 1.  1.  1.]
recall [ 1.  1.  1.]
f1Score [ 1.  1.  1.]

我就是想不通为什么会这样?指标这么高是有原因的吗?我也尝试了不同的训练测试分割率,结果似乎没有什么不同。

注意: 这是数据信息:

df_Obama.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5465 entries, 0 to 5464
Columns: 13078 entries, level_0 to zzzzzzzzzz
dtypes: int64(13078)
memory usage: 545.3 MB

df_Obama.head(3)
0023Washington  08hayabusa  09Its   .... 09what 1000000th   
0               1           0            1       0
1               0           0            0       0
0               0           0            0       0

【问题讨论】:

    标签: python twitter machine-learning scikit-learn decision-tree


    【解决方案1】:

    分类器是否可以看到目标值? df_Obama['Class'] 是否包含在功能数组中?不清楚是因为你没有显示allAttribs_Obama的值。

    还可以查看documentation for decision trees on scikit-learn,具体来说:

    “决策树倾向于过度拟合具有大量 功能。”

    您可能想尝试减少特征空间(查看 scikit-learn 的 documentation on feature selection)。

    附带说明,您可以使用sklearn.model_selection.train_test_split 创建训练和测试集。

    【讨论】:

    • 这是一个绝妙的收获。我鲁莽地不检查class 是否在某处被捕获。非常感谢!现在这些指标更有意义了。
    猜你喜欢
    • 2018-10-09
    • 2016-01-12
    • 2018-08-18
    • 2018-04-11
    • 2021-08-02
    • 2016-06-16
    • 2021-11-02
    • 1970-01-01
    • 2020-10-29
    相关资源
    最近更新 更多