MATLAB 和 scikit-learn 对决策树的准确度不同

数据挖掘 Python scikit-学习 决策树 准确性 matlab
2022-02-24 05:00:57

是否有可能通过使用 python 代码来改变 matlab 和 jupyter notebook 中相同数据集的准确性?

对于相同的数据集,首先我在 matlab 中应用它并获得 96% 的决策树方法准确率,然后我通过使用 python 代码在 jupyter notebook 中应用相同的数据集,我在 C4.5(决策树)中获得 53% 的准确率通过使用 k 折交叉验证。

我不明白为相同的数据集和相同的方法获得不同的准确性的问题出在哪里。

我在python代码中的过程如下:

import pandas as pd
import numpy as np
from sklearn import tree
from sklearn.model_selection import KFold 

train=pd.read_csv('E://New.csv')
train.head()

在此处输入图像描述

# define X and y
feature_cols = ['Past','Family_History','Current','current or previous 
               workplace','diagnosed with a mental health condition by a 
               medical professional?','do you feel that it interferes with 
               your work when being treated effectively?','Gender']
X = train[feature_cols]

# y is a vector, hence we use dot to access 'label'
y = train['Diagonised condition']

kfold = KFold(n_splits=10,random_state=None)
model = tree.DecisionTreeClassifier(criterion='gini')

results = cross_val_score(model, X, y, cv=kfold,scoring = 'accuracy')
result = results.mean()*100

std = results.std()*100
print (result)

在此处输入图像描述

2个回答

很难在白盒实现 (scikit-learn) 和黑盒实现 (MATLAB) 之间进行直接比较。

一种猜测是他们使用不同的算法。scikit-learn 使用 CART 算法的优化版本。也许 MATLAB 使用 ID3、C4.5 或其他东西。另一种猜测是两种实现使用不同的超参数(例如,不同的分割标准、最大深度、最小节点大小……)。

由于决策树是白盒模型,您可以检查它们的内部结构。绘制两棵经过训练的树。看看他们每个人是如何进行拆分的,以及进行了多少次拆分。

虽然不同的分割算法和超参数确实会导致不同的模型性能,但我觉得这里的差异还是太大了。我觉得您可以尝试对一些多类分类数据进行一次热编码,看看是否会有任何差异。