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

教程 | 从头开始:用Python实现基线机器学习算法(2)

时间:2017-02-03 21:04来源:本港台现场报码 作者:118开奖 点击:
零规则算法是比随机预测算法更好的基线预测算法。对于给定问题,它运用更多相关的信息来建立规则以进行预测。此规则根据问题类型而有所不同。 让

零规则算法是比随机预测算法更好的基线预测算法。对于给定问题,它运用更多相关的信息来建立规则以进行预测。此规则根据问题类型而有所不同。

让我们从分类问题开始,预测每一类的标签。

分类

对于分类问题,一个规则是预测训练集中最常见类的取值。这意味着如果训练集有 90 个类为 0 的实例和 10 个类为 1 的实例,那么输出值将都预测为 0,此时的基线精度为 90/100 或 90%。

这比平均只能达到 82% 准确率的随机预测算法要好得多。如何计算随机预测算法准确率估计值的细节如下:

  = ((0.9 * 0.9) + (0.1 * 0.1)) * 100

  = 82%

下面是一个基于分类问题的名为 zero_rule_algorithm_classification() 的零规则算法函数。

  # zero rule algorithm for classification

  def zero_rule_algorithm_classification(train, test):

  output_values = [row[-1] for row in train]

  prediction = max(set(output_values), key=output_values.count)

  predicted = [prediction for i in range(len(test))]

  return predicted

该函数使用带有 key 属性的 max() 函数,这是一个聪明的做法。给定训练集中观察到的所有类的取值,max() 函数将通过调用计数函数统计每一类数值的数量,采用数量最多的一组类值。

结果是它返回训练集中观察到的具有最高计数类值的数值。

如果所有类值具有相同的计数,则选择在数据集中观察到的第一个类值。

一旦我们选择好计数最大的类值,它将用于每一行测试集数据的预测。

下面是一个例子,这个构造的数据集包含 4 个类为 0 的实例和 2 个类为 1 的实例。算法将选择类值 0 作为测试集中每一行的预测。

  from random import seed

  from random import randrange

  # zero rule algorithm for classification

  def zero_rule_algorithm_classification(train, test):

  output_values = [row[-1] for row in train]

  prediction = max(set(output_values), key=output_values.count)

  predicted = [prediction for i in range(len(train))]

  return predicted

  seed(1)

  train = [['0'], ['0'], ['0'], ['0'], ['1'], ['1']]

  test = [[None], [None], [None], [None]]

  predictions = zero_rule_algorithm_classification(train, test)

  print(predictions)

运行此代码将进行预测并将其 print 到屏幕。如预期,类值 0 被选择并用来预测。

  ['0', '0', '0', '0', '0', '0']

现在,让我们看看回归问题的零规则算法。

回归

回归问题需要预测非离散型值。一个默认的好的预测方法是预测数据的集中趋势(central tendency)。这可以是平均值或中值。使用训练集观察到的因变量的平均值是一个很不错的默认方法。它的误差可能比随机预测低,因为后者将返回任何观察到的因变量值。

下面是一个名为 zero_rule_algorithm_regression()的函数。它的原理是计算观察到的因变量的平均值。

  mean = sum(value) / total values

一旦计算出平均值,它将用于每一行训练数据的预测。

  from random import randrange

  # zero rule algorithm for regression

  def zero_rule_algorithm_regression(train, test):

  output_values = [row[-1] for row in train]

  prediction = sum(output_values) / float(len(output_values))

  predicted = [prediction for i in range(len(test))]

  return predicted

这个函数可以用一个简单的例子来测试。

我们可以构造一个小数据集,其中平均值已知为 15。

  10

  15

  12

  15

  18

  20

  mean = (10 + 15 + 12 + 15 + 18 + 20) / 6

  mean = 90 / 6

  mean = 15

下面是完整的例子。我们期望 4 行测试集的预测值为平均值 15。

  from random import seed

  from random import randrange

  # zero rule algorithm for regression

  def zero_rule_algorithm_regression(train, test):

  output_values = [row[-1] for row in train]

  prediction = sum(output_values) / float(len(output_values))

  predicted = [prediction for i in range(len(test))]

  return predicted

  seed(1)

  train = [[10], [15], [12], [15], [18], [20]]

  test = [[None], [None], [None], [None]]

  predictions = zero_rule_algorithm_regression(train, test)

  print(predictions)

运行示例代码,计算测试集的预测值,并 print 预测结果。如预期,每一行测试集的预测值为平均值 15。

  [15.0, 15.0, 15.0, 15.0, 15.0, 15.0]

扩展

以下是基线预测算法的一些扩展,你可以自己来实现这些算法。

用中位数值、众数等其它中心趋势统计量预测,而不是平均值

对于时间序列问题,当最后 n 条记录的平均值已经预测出来时,使用滑动平均值(Moving Average)用于预测

回顾

在本教程中,你了解了计算机器学习问题的基线性能的重要性。

你现在知道了:

如何实现分类和回归问题的随机预测算法

如何实现分类和回归问题的零规则算法

©本文为机器之心编译,转载请联系本公众号获得授权

  ?------------------------------------------------

加入机器之心(全职记者/实习生):[email protected]

投稿或寻求报道:[email protected]

广告&商务合作:[email protected]

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