0

我在个性化数据集上应用了 Sklearn DecisionTreeClassifier() 来执行二进制分类(0 类和 1 类)。

最初课程不平衡,我尝试使用以下方法平衡它们:

rus = RandomUnderSampler(random_state=42, replacement=True)
data_rus, target_rus = rus.fit_resample(X, y) 

因此,我的数据集与第 1 类的 186404 个样本和第 2 类的 186404 个样本平衡。训练样本为:260965,测试样本为:111843 我计算了使用的准确度sklearn.metrics,得到了下一个结果:

clf=tree.DecisionTreeClassifier("entropy",random_state = 0)
clf.fit(data_rus, target_rus)
accuracy_score(y_test,clf.predict(X_test)) # I got 100% for both training and testing 
clf.score(X_test, y_test) # I got 100% for both training and testing 

因此,我在测试和训练阶段都获得了 100% 的准确率,我确信结果是异常的,尽管我在拆分数据之前已经对数据进行了洗牌,但我无法理解这是过度拟合还是数据泄漏。然后我决定使用

sklearn.model_selection.validation_curve

我得到了下一个数字,但我无法解释:

在此处输入图像描述

我尝试了另外两种分类算法:Logistic Regression 和 SVM,我得到了下一个测试准确率:分别为 99,84 和 99,94%。

更新 在我的原始数据集中,我映射了 4 个分类列,然后使用下一个代码:

DataFrame['Color'] = pd.Categorical(DataFrame['Color'])
DataFrame['code_Color'] = DataFrame.Color.cat.codes

在使用 RandomUnderSampler 对我的原始数据进行欠采样以获得类平衡后,我将数据拆分为训练和测试数据集 train_test_split 的 sklearn

任何想法都可能对我有帮助!

4

0 回答 0