首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >限制分类器输出在"0“和"1”之间

限制分类器输出在"0“和"1”之间
EN

Stack Overflow用户
提问于 2020-11-11 01:46:42
回答 1查看 20关注 0票数 0

我尝试使用朴素贝叶斯算法按对象值对数组进行分类,但我的结果是返回负值。我想让它返回0到1之间的值(代表百分比)这是我的分类器

代码语言:javascript
复制
class Bayes{
  constructor(...categories) {
    this.categories     = {};
    this.categoryCounts = {};
    categories.forEach(category => {
      this.categories[category]     = {};
      this.categoryCounts[category] = 0;
    });
  }

  train(category, dataset) {
    this.categoryCounts[category]++;
    Object.keys(dataset).forEach(key => {
      this.categories[category][key] = (this.categories[category][key] || 0) + dataset[key];
    });
  };

  classify(dataset) {
    let scores = {};
    let trainingCount = Object.values(this.categoryCounts).reduce((a, b) => a + b );
    Object.keys(this.categories).forEach(category => {
      scores[category] = 0;
      let categoryWords = this.categories[category];
      let total = Object.values(categoryWords).reduce((a, b) => a + b );
      Object.keys(dataset).forEach(function (key) {
        let value = dataset[key];
        let s     = categoryWords[key] || 0.1;
        let i     = 0;
        while(i<value){
          scores[category] += Math.log(s / parseFloat(total));
          i++;
        }
      });
      let s = this.categoryCounts[category] || 0.1;
      scores[category] += Math.log(s / trainingCount);
    });
    return scores;
  };

};

var b = new Bayes('good', 'bad');
b.train('good', { dry: 1, wet: 0 });
b.train('bad', { dry: 0, wet: 1 });
b.train('good', { dry: 0, wet: 1, green: 1});
b.train('good', { dry: 1, wet: 0, green: 1});
console.log(b.classify({ dry: 0, wet: 1, green: 2}));

下面是输出:

代码语言:javascript
复制
Object {
  bad: -5.991464547107982,
  good: -3.729701448634191
}

我想以百分比形式返回结果,如下所示:

代码语言:javascript
复制
Object {
  bad: 0.30,
  good: 0.70
}

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2020-11-12 00:15:43

我删除了scores[category] += Math.log(s / trainingCount);中的日志函数,

代码语言:javascript
复制
class Bayes{
  constructor(...categories) {
    this.categories     = {};
    this.categoryCounts = {};
    categories.forEach(category => {
      this.categories[category]     = {};
      this.categoryCounts[category] = 0;
    });
  }

  train(category, dataset) {
    this.categoryCounts[category]++;
    Object.keys(dataset).forEach(key => {
      this.categories[category][key] = (this.categories[category][key] || 0) + dataset[key];
    });
  };

  classify(dataset) {
    let scores = {};
    let trainingCount = Object.values(this.categoryCounts).reduce((a, b) => a + b );
    Object.keys(this.categories).forEach(category => {
      scores[category] = 0;
      let categoryWords = this.categories[category];
      let total = Object.values(categoryWords).reduce((a, b) => a + b );
      Object.keys(dataset).forEach(function (key) {
        let value = dataset[key];
        let s     = categoryWords[key] || 0.1;
        let i     = 0;
        while(i<value){
          scores[category] += Math.log(s / parseFloat(total));
          i++;
        }
      });
      let s = this.categoryCounts[category] || 0.1;
      scores[category] = (s / trainingCount);
    });
    return scores;
  };

};

var b = new Bayes('good', 'bad');
b.train('good', { dry: 1, wet: 0 });
b.train('bad', { dry: 0, wet: 1 });
b.train('good', { dry: 0, wet: 1, green: 1});
b.train('good', { dry: 1, wet: 0, green: 1});
console.log(b.classify({ dry: 0, wet: 1, green: 2}));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64774083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档