我在以下数据集上安装决策树:
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
在这两种情况下
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.是否有可能出现输出的问题?
您的数据集是不平衡的
鉴于您的数据看起来像这样:
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 DataFrame,因此获得值分布如下:
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
的百分比。
有几种克服此问题的技术,请检查以下链接以获取有关此问题的详细教程:
- https://machinelearningmastery.com/tactics-to-combat-mmpalanced-classes-in-your-machine-learning-dataset/
- https://www.analyticsvidhya.com/blog/2017/03/imbalanced-classification-problem/