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

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

时间:2017-06-06 03:41来源:香港现场开奖 作者:118KJ 点击:
有一个测试集有助于验证模型,并可以检查模型无法从训练数据中泛化的过度拟合,而不是只是记住答案;如果我们希望在未知数据上做得很好的话,其实

有一个测试集有助于验证模型,并可以检查模型无法从训练数据中泛化的过度拟合,而不是只是记住答案;如果我们希望在未知数据上做得很好的话,其实这不并是理想的做法。测试集的目的是模拟模型即将在现实世界中呈现的未知数据。因此,不使用测试集进行训练非常重要。

有时候,在使用特别容易过度拟合的算法时,你还可以使用一个验证集,这是你想要避免甚至在考虑的,因为有时在优化模型时,有关测试集的信息可能会从调整模型参数(通常称为超参数)缺失,从而导致测试集以及训练集过度拟合。

但是,对于本教程来说,我们将只使用一个测试集和一个训练集。

Sklearn有一个工具可以帮助将数据分成测试集和训练集。

from sklearn.model_selection import train_test_split features_train, features_test, labels_train, labels_test = train_test_split( features, labels, test_size=0.20, random_state=42)

有趣的是test_size和random_state这两个参数。测试大小参数是将保留用于测试的总数据集的数字分数。一个80/20的分配通常被认为是一个很好的经验法则,但可能需要在后来做些调整。

另一个值得注意的变量是random_state。它的值并不是很重要,因为它只是一个种子数,但随机数据的行为是重要的。

为什么?

数据集是按类型进行排序的,因此,如果我们只使用前两种进行训练的话,那么在使用以前从未见过的第三种进行测试时,该模型就不会发挥作用了。

如果你以前从未见过某种事物,那么很难对它进行正确分类。

选择分类器

既然我们已经将数据分成了测试集和训练集,那么我们可以开始选择一个分类器了。

当考虑我们的数据时,随机森林(Random Forest)分类器是一个很好的起点。随机森林是简单、灵活的,因为它们与各种数据都可以进行很好的执行操作,而且很少出现过度拟合。因此,它们往往是一个很好的起点。

随机森林的一个显著的缺点是它们在本质上是非确定性的,所以每次训练它们时都不一定会产生相同的结果。

虽然随机森林是一个很好的起点,但在实际操作中,你将经常使用多个分类器,并查看哪些会获得良好的结果。

你可以培养一种感觉,哪些算法通常在什么问题表现得出色,从而来限制猜测;当然,从数学表达式出发做第一原则分析也是有助于这一点的实现的。

训练分类器

既然我们已经选择好一个分类器了,那现在就可以去实现它了。

在sklearn中实现一个分类器,需要遵循三个步骤。

·导入

·初始化

·训练

在代码中,直播,看起来像下图这样:

# import from sklearn.ensemble import RandomForestClassifier # initialize clf = RandomForestClassifier() # train the classifier using the training data clf.fit(features_train, labels_train)

如果我们不知道一个分类器的准确度,即使它训练有素也是没有太多用处的。

我们可以通过在分类器上使用score()方法,从而快速了解该模型对数据的有效性。

# compute accuracy using test data acc_test = clf.score(features_test, labels_test) print ("Test Accuracy:", acc_test) # Test Accuracy: 0.98

嗯,结果是98%!

这个结果对于三行代码来说还是不错的。当然这不是最难的问题,但考虑到这是我们的第一次尝试,98%的结果还是很好的。

注意:如果得到一个稍微不同的结果,你不必担心,它可以通过生成一个随机决策树,并对其预测进行平均,从而预期这个分类器是可以起作用的。

我们还可以计算训练数据的准确性,并比较两者以了解模型过度拟合的程度。该方法类似于我们如何计算测试精度,只有这次我们使用训练数据作为评估。

# compute accuracy using training data acc_train = clf.score(features_train, labels_train) print ("Train Accuracy:", acc_train) # Train Accuracy: 0.98

我们看到,我们训练数据的准确性是98%,表明模型不是过度拟合的。

但对于那些完全崭新的数据来说又是怎样的呢?

假设我们已经找到了一个新的、独特的鸢尾花,我们测量它花瓣的长度和宽度。

假设我们测量长度为5.2cm,宽度为0.9cm,我们怎样才能找出哪种才是使用我们的新训练模型的呢?

答案是利用predict()方法,如下图所示。

flower = [5.2,0.9] class_code = clf.predict(flower) # [1]

结果显示,这个方法很棒。

我们现在知道分类物种。然而,其有用性是有限的,因为它不容易被人理解。

如果它返回的结果是物种标签,那就容易得多了。

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