【问题标题】:Decision tree only predicts one class决策树只预测一类
【发布时间】:2020-05-09 19:25:27
【问题描述】:

我正在以下数据集上拟合决策树:

https://archive.ics.uci.edu/ml/machine-learning-databases/car/car.data

以下是我的代码:

balance_data=pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/car/car.data",
                           sep= ',', header= None)

le = preprocessing.LabelEncoder()
balance_data = balance_data.apply(le.fit_transform)
X = balance_data.values[:, 0:5]
Y = balance_data.values[:,6]
X_train, X_test, y_train, y_test = train_test_split( X, Y, test_size = 0.2, random_state = 100)

#using Gini index
clf_gini = DecisionTreeClassifier(criterion = "gini", random_state = 100,
                               max_depth=3, min_samples_leaf=5)

clf_gini.fit(X_train, y_train)

#using Information Gain
clf_entropy = DecisionTreeClassifier(criterion = "entropy", random_state = 100,
 max_depth=3, min_samples_leaf=5)
clf_entropy.fit(X_train, y_train)


#Gini prediction
y_pred = clf_gini.predict(X_test)
y_pred

#IG prediction
y_pred_en = clf_entropy.predict(X_test)
y_pred_en

在基尼指数和 IG 两种情况下,输出如下:

array([2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,])

训练有问题吗?此外,如何将此数值转换为字符串值。

Edit1:我计算了准确度,结果显示为 71。是否有可能唯一的问题在于输出的显示?

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    您的数据集不平衡

    鉴于您的数据如下所示:

           0      1  2  3      4     5      6
    0  vhigh  vhigh  2  2  small   low  unacc
    1  vhigh  vhigh  2  2  small   med  unacc
    2  vhigh  vhigh  2  2  small  high  unacc
    3  vhigh  vhigh  2  2    med   low  unacc
    4  vhigh  vhigh  2  2    med   med  unacc
    

    您的目标变量是第 6 列 Y = balance_data.values[:,6]。快速查看目标变量分布可以得出您的数据集不平衡的结论。

    事实上,当开始一个新的机器学习项目时,要做的主要任务之一就是检查你的数据集是否不平衡。这可以通过计算目标变量值的观察分布来完成。

    由于您的数据是 pandas 数据框,因此您得到的值分布如下:

    In [46]: balance_data.iloc[:,6].value_counts()
    Out[46]: 
    unacc    1210
    acc       384
    good       69
    vgood      65
    Name: 6, dtype: int64
    

    如您所见,数据集主要包含目标值unacc 的观测值,准确度为 70%:

    In [49]: 1210/1728.
    Out[49]: 0.7002314814814815
    

    正如您所提到的,您的模型的准确度约为 71%,这对应于整个数据集中目标值 unacc 的百分比。

    有几种技术可以解决这个问题,请查看以下链接以获取详细教程:

    【讨论】:

      猜你喜欢
      • 2016-07-12
      • 2013-12-21
      • 2017-04-11
      • 1970-01-01
      • 2020-08-11
      • 2018-06-29
      • 2013-07-11
      • 2017-08-22
      • 2021-07-03
      相关资源
      最近更新 更多