2次发布
0.2.1 | 2020年4月2日 |
---|---|
0.2.0 | 2020年3月20日 |
#847 in Machine learning
14KB
139 代码行(不包括注释)
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, R.C. (1993) Very Simple Classification Rules Perform Well on Most Commonly Used Datasets. Machine Learning 11: 63. https://doi.org/10.1023/A:1022631118932.
- Molnar, C, (2019) Interpretable Machine Learning. In particular: Learn Rules from a Single Feature (OneR).
术语
我遵循Holte (1993) 的术语
- 属性(也称为特征)
- 值(属性或类别的值)
- 类别(分类,预测)
- 示例(实例)
在泛型参数中,A
表示属性,C
表示类别。
限制
该软件包假设数值数据已转换为分类数据。
有关1R量化算法的实现,请参阅https://docs.rs/oner_quantize。
依赖项
约2MB
约34K SLoC