OneR,即”One Rule”的缩写,是一种简单但准确的分类算法,它为数据中的每个预测变量生成一条规则,然后选择总误差最小的规则作为其“一条规则”。
我在GitHub上尝试寻找代码样本,但只找到一个用R语言开发的。我如何在JavaScript中实现这个算法?
我尝试了什么?我正在尝试按照以下示例文章进行实现:https://www.saedsayad.com/oner.htm
class OneR { /** * 传递数据集,它将是一个值数组。 * 最后一个值是分类器的值。 * 所有其他值都是预测变量。 * * 示例 * * 序列值的含义: * |Outlook|Temp|Humidity|Windy|Play Golf| * * 序列的表示: * ['rainy', 'hot', 'high', 0, 0] * * True和False表示为零或一 */ constructor(data = []) { this.data = data; this.frequences = {}; } predict() { if (this.data && this.data.length > 0) { const firstRow = this.data[0]; const predictorCount = firstRow.length - 1; let classifcator; // 对于每个预测变量, for (let i = 0; i < predictorCount; i++) { // 对于该预测变量的每个值,按如下方式创建规则; for (let y = 0; y < this.data.length; y++) { // 计算目标(类别)每个值出现的频率 classifcator = this.data[y][predictorCount]; console.log(classifcator); // 找到最频繁的类别 // 使规则将该类别分配给该预测变量的值 } // 计算每个预测变量规则的总误差 } // 选择总误差最小的预测变量 } else { console.log("无法预测!"); } }}module.exports = { OneR};
我已经从csv文件中加载了数据
rainy,hot,high,0,0rainy,hot,high,1,0overcast,hot,high,0,1sunny,mild,high,0,1sunny,cool,normal,0,1sunny,cool,normal,1,0overcast,cool,normal,1,1rainy,mild,high,0,0rainy,cool,normal,0,1sunny,mild,normal,0,1rainy,mild,normal,1,1overcast,mild,high,1,1overcast,hot,normal,0,1sunny,mild,high,1,0
回答: