python - 树分类器的极高准确度指标

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

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

我拥有的数据采用词袋模型的形式。词汇表中的每个单词都用 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

最佳答案

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

另请查看 documentation for decision trees on scikit-learn ,具体来说:

"Decision trees tend to overfit on data with a large number of features."

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

顺便说一句,您可以使用 sklearn.model_selection.train_test_split创建训练和测试集。

关于python - 树分类器的极高准确度指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40348137/

相关文章:

python - 如何将现有字符串的一部分保存在新列中

ios - 使用 iOS SLRequest 更新 Twitter 个人资料图片导致错误 215 错误的身份验证数据

twitter - 在 Twitter 中撤消转发 (unretweet) 的 API 是什么?

machine-learning - 什么是LDA(线性判别分析)的正确实现?

python - 在 SQLite 中关闭游标或连接之间有什么区别吗?

python - IPython 名称错误 : name 'pkg_resources' is not defined

python - 在突变中传递链接数组 [graphene/python/graphql]

php - 使用 Twitter 的 REST API 检索速率限制状态

python - TensorFlow:SparseSoftmaxCrossEntropyWithLogits 错误?

image-processing - convert_imageset.cpp 指南