我在个性化数据集上应用了 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
任何想法都可能对我有帮助!