奇书网

奇书网>人工智能训练师 > 第三节 识别毒蘑菇(第5页)

第三节 识别毒蘑菇(第5页)

使用决策树用于新数据的分类,可以看到对下列4个新的蘑菇数据进行分类后,输出结果表明其中有3种是可食用的,1种是有毒的。

I=np。anay([[…],[…],[…],[…]])

np。anay([[120,115,121,。。。,110,110,103],

[98,115,119,。。。,110,110,109],

[120,121,119,。。。,107,115,117],

[120,115,103,。。。,110,97,103]])

In[26]:clf。predict(test)

Out[26]:array([1,1,0,1])

这个决策树的准确率如何呢?一种简单的方法是使用训练数据中的X,用决策树获得对应的类别标记,也就是预测分类结果(这里用Y_predict表示),然后把它和实际的类别标记Y进行比较。scikit-learn支持这样的比较,使用的方法是accuracy_score。

In[27]:fromsklearricsimportaccuracy_score

In[28]:Y_predict=clf。predict(X)

#这里使用前面训练好的决策树,输入训练样本的X,给出对应的predict

In[29]:accuracy_score(Y,Y_predict)

#这里利用accuracy_score来比较预测值和真实值。

Out[29]:1。0

可以看到这个决策树在训练数据上的准确率是100%(1。0)。这表明使用上述算法构建的决策树完全捕捉了训练数据的分类信息。这也许是因为训练出的决策树确实具有很好的分类效果,但也有可能并不是真正的分类准确率,而是发生了过拟合现象。

为了更好地评估分类准确率,需要使用与训练数据不同的测试数据。可以抽取全部数据中的一部分作为训练数据,另一部分作为测试数据,使用抽取出的训练数据来构建决策树,然后使用测试数据评估准确率。这可以通过如下方式来实现。

In[30]fromsklearionimporttrai

In[31]:X_trairairai

(X,Y,test_size=0。2)

#这里将全部样本分成两部分,其中训练样本占80%,测试样本占20%,这

#里采用了随机分割样本的方法,所以读者的输出可能与下面的结果不同

Iree。DeTreeClassifier()

I(X_train,Y_train)

#利用训练数据来构建决策树

Out[33]:

&reeClassifier(class_weight=erion='gini',

max_depth=None,

max_features=None,max_leaf_nodes=None,

min_impurity_split=1e-07,min_samples_leaf=1,

mi=2,mi_fra_leaf=0。0,

&=False,random_state=er='best')

#返回新的决策树的参数

In[34]:Y_prediewclf。predict(X_test)

#注意,这里是将新训练的决策树用在测试样本的X上,并预测出对应Y

In[35]:accuracy_score(Y_test,Y_predict)

Out[35]:1。0

可以看到在测试集上的准确率仍然是100%,这说明这个分类器确实具有很高的准确率。因为测试数据和训练数据是采用随机划分的方式获得的,读者最后获得的输出结果可能会与此不同。

从上述内容可以看出,决策树实现起来简单并且效果很好。本书采用最简单的形式实现这个算法,scikit-learn的决策树有很多参数可以调整,读者可以尝试调整决策树的参数,观察分类性能会发生什么改变。

热门小说推荐

最新标签