2次发布

0.2.1 2020年4月2日
0.2.0 2020年3月20日

#847 in Machine learning

MPL-2.0+

14KB
139 代码行(不包括注释)

Rust

Rust语言中的1R实现

重新实现Holte (1993) 中描述的1R算法。

1R根据数据库中的一个属性(特征)学习一条规则(IF...THEN...ELSE),这为与其他算法比较提供了一个基准性能。

此crate是https://crates.io/crates/oner_quantize的补充,后者是1R规则归纳的实现。

文档和示例

许可证

版权所有 2020 Richard Dallaway

此源代码形式受Mozilla公共许可证第2.0版的条款约束。如果未与此文件一起分发MPL副本,您可以在https://mozilla.org/MPL/2.0/获取一份。


lib.rs:

1R(Holt,1993)规则学习算法。

1R是一种基准规则学习算法

该算法为数据集中的每个属性生成一个规则,然后选择“一个规则”具有最佳的准确率。

每个规则(假设)是一组案例:对于属性的每个值,预测(then部分)是该属性值示例中最频繁的类别。

这是一个基准学习器,用于与其他更复杂的算法进行比较。相关的一个想法是“0R”(零规则),即数据集中最频繁的类别。

示例

此crate使用ndarray来表示属性和类别。

use ndarray::prelude::*;
use oner_induction::{Rule, Case, Accuracy, discover};

let examples = array![
   ["sunny", "summer"],
   ["sunny", "summer"],
   ["cloudy", "winter"],
   ["sunny", "winter"]
];

let classes = array![
    "hot",
    "hot",
    "cold",
    "cold"
];

// Discover the best rule, and the column it applies to:
let rule: Option<(usize, Rule<&str, &str>)> =
  discover(&examples.view(), &classes.view());

// Expected accuracy is 100%
let accuracy = Accuracy(1.0);

// The "rule" is a set of cases (conditions, or "IF...THENs"):
let cases = vec![
    Case { attribute_value: "summer", predicted_class: "hot" },
    Case { attribute_value: "winter", predicted_class: "cold" }
];

// Column 1 is the Season (winter or summer)
assert_eq!(rule, Some( (1, Rule { cases, accuracy }) ));

参考文献

术语

我遵循Holte (1993) 的术语

  • 属性(也称为特征)
  • 值(属性或类别的值)
  • 类别(分类,预测)
  • 示例(实例)

在泛型参数中,A表示属性,C表示类别。

限制

该软件包假设数值数据已转换为分类数据。

有关1R量化算法的实现,请参阅https://docs.rs/oner_quantize

依赖项

约2MB
约34K SLoC