记得之前标签编码器上的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 文章做了不改变原意的修改 (责任编辑:本港台直播) |