树分类器的极高准确度指标
Extremely high accuracy metrics for tree classifiers
我正在进行一个项目,将总统辩论的推文分类为每个候选人的中立、正面和负面。 (不是当前的辩论数据集)。我正在使用 Decision trees
、Decision tree ensemble
和 AdaBoost
进行训练。问题是我得到了 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.]
我就是想不通为什么会这样?指标这么高是有原因的吗?我也试过不同的train-test split ratio,结果似乎没什么不同。
注意:
这是数据信息:
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."
您可能想尝试减少功能 space(查看 scikit-learn 的 documentation on feature selection)。
附带说明,您可以使用 sklearn.model_selection.train_test_split
创建训练集和测试集。
我正在进行一个项目,将总统辩论的推文分类为每个候选人的中立、正面和负面。 (不是当前的辩论数据集)。我正在使用 Decision trees
、Decision tree ensemble
和 AdaBoost
进行训练。问题是我得到了 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.]
我就是想不通为什么会这样?指标这么高是有原因的吗?我也试过不同的train-test split ratio,结果似乎没什么不同。
注意: 这是数据信息:
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."
您可能想尝试减少功能 space(查看 scikit-learn 的 documentation on feature selection)。
附带说明,您可以使用 sklearn.model_selection.train_test_split
创建训练集和测试集。