我在以下数据集上拟合决策树:
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.有可能唯一的问题出在输出显示中吗?
答案 0 :(得分:4)
您的数据如下所示:
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]
。
启动新的机器学习项目时,您需要做的主要任务之一是检查数据集是否不平衡,您可以按如下方式执行此操作:
In [46]: balance_data.iloc[:,6].value_counts()
Out[46]:
unacc 1210
acc 384
good 69
vgood 65
Name: 6, dtype: int64
如您所见,数据集主要包含70.02%的准确度,目标值为unacc
的观察值:
In [49]: 1210/1728.
Out[49]: 0.7002314814814815
如您所述,模型的准确率约为71%,相当于整个数据集中目标值unacc
的百分比。
有几种方法可以尝试克服这个问题,请查看以下教程以获取详细的教程: