将阵列喂给分类器

发布于 2025-01-17 11:39:24 字数 2062 浏览 4 评论 0原文

我使用贝叶斯分类器函数通过数组来循环循环。 这是我的数组:

var data = ['good', {
    dry: 1,
    wet: 0,
    moist:0
}, 'bad', {
    dry: 0,
    wet: 1,
    moist: 1
}, 'neutral', {
    dry: 1,
    wet: 1,
    moist:1
}, 'good', {
    dry: 1,
    wet: 0,
    moist: 1
}];

这是我的分类器函数:

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] || '') + 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', 'neutral');
  b.train('good', { dry: 1, wet: 0, moist:0});
  b.train('bad', {dry: 0,wet: 1,moist: 1});
  b.train('neutral', {dry: 1,wet: 1,moist:1});
  b.train('good', {dry: 1,wet: 0,moist: 1});
  console.log(b.classify({ dry: 0, wet: 1, moist: 1}));
// good: 0.5, bad: 0.25, neutral: 0.25

但是当我不知道如何通过迭代Data来训练数据时。 我需要帮助将数组作为JavaScript对象动态馈送。

I have an issue looping through an array using a bayesian classifier function.
Here is my array:

var data = ['good', {
    dry: 1,
    wet: 0,
    moist:0
}, 'bad', {
    dry: 0,
    wet: 1,
    moist: 1
}, 'neutral', {
    dry: 1,
    wet: 1,
    moist:1
}, 'good', {
    dry: 1,
    wet: 0,
    moist: 1
}];

Here's my classifier function:

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] || '') + 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;
    };
  
  };

Normally, to classify the data; I'll do:

var b = new Bayes('good', 'bad', 'neutral');
  b.train('good', { dry: 1, wet: 0, moist:0});
  b.train('bad', {dry: 0,wet: 1,moist: 1});
  b.train('neutral', {dry: 1,wet: 1,moist:1});
  b.train('good', {dry: 1,wet: 0,moist: 1});
  console.log(b.classify({ dry: 0, wet: 1, moist: 1}));
// good: 0.5, bad: 0.25, neutral: 0.25

But when I can't figure out how to train the data by iterating through data.
I need help to feed the array dynamically as a javascript object.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

同尘 2025-01-24 11:39:24

如果您可以保证数据结构一致性,例如

let data = [key, value, key, value, key, value......]

    const data = ['good', { dry: 1, wet: 0, moist:0}, 'neutral', {dry: 1,wet: 1,moist:1}, 'good', {dry: 1,wet: 0,moist: 1}];

    // 1: chunk it
    const size = 2;
    const chunks = [];
    while (data.length) {
        chunks.push(data.splice(0, size));
    }
    console.log(chunks);

    // 2: loop through your train
    let keys = chunks.map(val=>val[0])
    let deDupeKeys = [...new Set(keys)]
    console.log(keys)
    console.log(deDupeKeys) 

    // var b = new Bayes(deDupeKeys)

    chunks.forEach(chunk => {
        console.log(chunk[0])
        console.log(chunk[1])

        // b.train(chunk[0],chunk[1]);
    })

if you can guarantee the data structure consistency, such as

let data = [key, value, key, value, key, value......]

    const data = ['good', { dry: 1, wet: 0, moist:0}, 'neutral', {dry: 1,wet: 1,moist:1}, 'good', {dry: 1,wet: 0,moist: 1}];

    // 1: chunk it
    const size = 2;
    const chunks = [];
    while (data.length) {
        chunks.push(data.splice(0, size));
    }
    console.log(chunks);

    // 2: loop through your train
    let keys = chunks.map(val=>val[0])
    let deDupeKeys = [...new Set(keys)]
    console.log(keys)
    console.log(deDupeKeys) 

    // var b = new Bayes(deDupeKeys)

    chunks.forEach(chunk => {
        console.log(chunk[0])
        console.log(chunk[1])

        // b.train(chunk[0],chunk[1]);
    })

浅听莫相离 2025-01-24 11:39:24

假设data数组的格式为:data = [category, dataset,category, dataset...],一个简单的解决方案是循环data 数组如下并训练分类器。

for (let i = 0; i < data.length; i = i + 2) {
  console.log("category : ", data[i], "dataset : ", data[i + 1]);
  b.train(data[i], data[i + 1]);
}

Assuming the data array will have the format: data = [category, dataset, category, dataset...], a simple solution would be to loop the data array as follows and train the classifier.

for (let i = 0; i < data.length; i = i + 2) {
  console.log("category : ", data[i], "dataset : ", data[i + 1]);
  b.train(data[i], data[i + 1]);
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文