通过贝叶斯概率机器学习

//通过贝叶斯概率机器学习
const execMathExpress=require('exec-mathexpress');
//一个神经元,同过学习特征,判断是否发出信号
class Yuan {
    constructor(props) {
        this.props=props||{};
    }
    //学习特征
    learn(props){
        for(let k in props){
            if(!this.props[k]){
                this.props[k]='1/2'
            }
            const arr=this.props[k].split('/').map((num)=>parseInt(num));
            if(props[k]){
                arr[0]++;
            }
            arr[1]++;
            this.props[k]=arr[0]+'/'+arr[1];
        }
    }
    //判断是否发出信号
    is(props){
        const gArr=[]
        for(let k in props){
            if(props[k]){
                gArr.push(this.props[k]);
            }else{
                const arr=this.props[k].split('/').map((num)=>parseInt(num));
                gArr.push(arr[1]-arr[0]+'/'+arr[1]);
            }
        }
        return this.execByes(gArr);
    }
    //贝叶斯计算公式
    execByes(gArr){
        console.log(gArr)
        const arr1=[]
        const arr2=[]
        const Obj={}
        for(let i=0;i<gArr.length;i++){
            arr1.push('P'+i)
            arr2.push('(1-P'+i+')')
            Obj['P'+i]=gArr[i];
        }
        const str1=arr1.join('*');
        const str2=arr2.join('*');
        const str=str1+'/('+str1+'+'+str2+')';
        return execMathExpress(str,Obj).toString();
    }
}
//初始化,或者历史数据
const oneYuan=new Yuan()

//学习过程
oneYuan.learn({
    longhars:1,
    bigeye:1,
    bigfoot:1,
})
oneYuan.learn({
    longhars:1,
    bigeye:0,
    bigfoot:1,
})
oneYuan.learn({
    longhars:0,
    bigeye:0,
    bigfoot:0,
})
//学习的结果数据
console.log(oneYuan.props)

//判断过程,d是否大于1/2
const d=oneYuan.is({
    longhars:1,

    bigeye:0,
    bigfoot:1,
})
console.log(d)
原文地址:https://www.cnblogs.com/caoke/p/12367596.html