本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

报码:用Sklearn创建ML分类器模型,不用数学公式也可以(4)

时间:2017-06-06 03:41来源:香港现场开奖 作者:118KJ 点击:
记得之前标签编码器上的inverse_transform()吗?我们可以使用它来解码ID组,如下所示: flower = [5.2,0.9] class_code = clf.predict(flower) # [1] decoded_class = le.inverse_tra

记得之前标签编码器上的inverse_transform()吗?我们可以使用它来解码ID组,如下所示:

flower = [5.2,0.9] class_code = clf.predict(flower) # [1] decoded_class = le.inverse_transform(class_code) print (decoded_class) # ['Iris-versicolor']

所以我们看到新花是变色鸢尾的一种。

评估结果

即使我们可以看到测试的准确度在98%,但模型会造成什么样的错误呢?这看起来似乎也非常有趣。

分类模型有两种方法无法预测正确的结果:假阳性(False Positive) 和假阴性(False Negative)。

假阳性是当它真的是假的时候却被猜测是真的。

假阴性是当它是真的时候却被猜测是假的。

既然我们没有运行一个二进制分类器(预测“是”或“否”),而是一个分类器,猜测一系列标签中的属于哪一个,每个错误都将是对某些标签来说是假阳性,而对其它标签来说是假阴性。

在机器学习中,我们经常使用精确率(Precision)和召回率(Recall)来代替假阳性和假阴性。

精确率试图尝试减少假阳性,而召回率尝试减少假阴性。它们都是0到1之间的十进制数或分数,越高越好。

通常,精确率和召回率如下计算:

精确率

召回率

Sklearn已经內建了计算精确率和召回率的得数功能,所以我们不必。

from sklearn.metrics import recall_score, precision_score precision = precision_score(labels_test, pred, average="weighted") recall = recall_score(labels_test, pred, average="weighted") print ("Precision:", precision) # Precision: 0.98125 print ("Recall:", recall) # Recall: 0.98

如上所述,该模型的假阴性比假阳性稍多,但是通常是均匀分裂的。

调整分类器

目前,我们的Random Forests分类器仅使用默认参数值。然而,为了增加控制,我们可以改变一些或所有的值。

一个有趣的参数是min_samples_split。 此参数表示拆分决策树所需的最小样本。

从根本上说,模型捕获的细节越少,同时也增加了过度拟合的可能性。而如果你给它一个很高的值,你将更好地记录趋势,而忽略细节。

默认情况下,它设置为2。

降低参数值没有什么意义,而且模型似乎没有过度拟合,但是我们仍然可以尝试将参数值从2提高到4。

当我们创建分类器时,我们可以指定分类器的参数:

clf = RandomForestClassifier( min_samples_split=4 )

就是这样的。

Train Accuracy: 0.98 Test Accuracy: 1.0 Precision: 1.0 Recall: 1.0

当我们重新训练模型时,我们看到测试精度已经提高到完美的100%,但训练准确率仍然在98%,表明还有更多的信息需要提取。

我们可以改变的另一个参数是标准参数,它表示如何测量分割的质量。

默认情况下,它设置为测量杂质的“gini”,但是sklearn也支持测量信息增益的熵。

我们可以使用熵来训练分类器,而不是像我们之前那样设置参数min_samples_split。

clf = RandomForestClassifier( min_samples_split=4, criterion="entropy" )

当我们用新的参数重新训练模型时,没有任何改变,这表明可能标准函数不是这种类型的数据/问题的重要影响因素。

Train Accuracy: 0.98 Test Accuracy: 1.0 Precision: 1.0 Recall: 1.0

你可以在Sklearn的文档页面上阅读Random Forest Classifier的所有调整参数。

其他分类器

改进模型的另一种方法是改变算法。

假设我们要使用支持向量机。

使用sklearn的支持向量分类器只需要我们改变两行代码:导入和初始化。你可以阅读所有调整参数为Sklearn的文档页面Random Forest Classifier。

from sklearn.svm import SVC clf = SVC()

就是这样。

使用默认设置运行此功能可以使随机森林分类器具有可比较的结果。

Train Accuracy: 0.95 Test Accuracy: 1.0 Precision: 1.0 Recall: 1.0

我们也可以使用此方法使用sklearn支持的任何其他分类器。

结论

我们已经涵盖了从数据读取到pandas数据框架中的所有内容,以使用sklearn的数据中的相关功能来训练分类器,并评估模型的精度来调整参数,如有必要,更改分类器算法。

你现在应该用必要的工具来调查未知数据集,并构建简单的分类模型,即使我们还不熟悉的算法。

来源:kasperfred.com

作者:Kasper Fredenslund

文章做了不改变原意的修改

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容