論理関数の回復

画像








この記事では、 ブラックボックス法を使用して論理関数を再構築するように設計されたアルゴリズムの既製の実装と説明を見つけることができます。 論理関数とは、ブール値のセットを引数として受け取り、それに応じて1つを返す関数を意味します。 例:

def customlogic(params): return params[0] and params[1] and not params[5] and params[11] or params[2] and not params[3] or params[0] and params[5] and not params[6] or params[7] and not params[8]
      
      





記事の最後で、現実世界から取得したデータでアルゴリズムをチェックします。



私の意見では、このタスクは神経生理学に密接に関連しており、ご想像のとおり、私はニューロンの仕事に触発されたので、このタイプの細胞の仕事と構造に関連する類推が使用されます。 特に、樹状突起の構造機能に関する記事を読んだ後に、何かを放棄したいという欲求が生じました。 私はほとんどの資料を学んでいませんが、いくつかのアナロジーを作りました。



歌詞は十分だと思います。仕事に取り掛かりましょう。

クラスのソースコードと例
 import random class LogicReconstructer: groups=[] threshold = 0.99 maxmem = 10 numparams = 0 def __init__(self,numparams,threshold = 0.99, totalmem = 10): self.numparams=numparams self.threshold=threshold self.maxmem=totalmem def getactive(self,params): if len(params)!=self.numparams: raise Exception("LogicReconstructer: numparams mismatch") active=[] for x in range(self.numparams): if params[x]: active.append(x) return active def extractgroups(self,params,result): active=self.getactive(params) exist = False ignore = False if result and active: ind=0 while ind<len(self.groups): if len(active)>len(self.groups[ind][0]) and self.issublist(self.groups[ind][0],active): ignore=True break elif len(active)==len(self.groups[ind][0]) and self.issublist(active,self.groups[ind][0]): exist=True break elif len(active)<len(self.groups[ind][0]) and self.issublist(active,self.groups[ind][0]): del self.groups[ind] ind-=1 ind+=1 if not exist and not ignore: self.groups.append([active,[0]*self.numparams,False]) def extractinhibitors(self,params,result): active=self.getactive(params) if result: count=0 for _,grp in enumerate(self.groups): if self.issublist(grp[0],active): count+=1 if count>1: return for _,grp in enumerate(self.groups): if not grp[2] and self.issublist(grp[0],active): neg=[] negvalue=False for y in range(self.numparams): if grp[1][y]<=-self.threshold: neg.append(y) negvalue|=params[y] elif grp[1][y]>=self.threshold: grp[2]=True for y in range(self.numparams): if params[y]: if y in neg or not negvalue: grp[1][y] = self.counting(grp[1][y],self.maxmem,result) def counting(self,prc,total,item): result=prc-prc/total if not item: result-=1/total else: result+=1/total return result def issublist(self,a,b): for ind,item in enumerate(a): if item not in b: return False return True def getsublist(self,a,b): result=[] for ind,item in enumerate(a): if item in b: result.append(item) return result def simulate(self,params): result=False for ind,item in enumerate(self.groups): if item[2]: locres=True for x in range(len(item[0])): locres&=params[item[0][x]] for x in range(len(item[1])): if item[1][x]<=-self.threshold: locres=locres&~params[x] result|=locres return result def getlogicfunc(self,guess=False): result="" for ind,item in enumerate(self.groups): if item[2] or guess: locres="" for x in range(len(item[0])): if x!=0: locres+=" and " locres+=str(item[0][x]) for x in range(len(item[1])): if item[1][x]<=-self.threshold: locres+=" and not "+str(x) if ind!=0: result+=" or " result+=locres return result def randparams(self): result = [] for x in range(self.numparams): result.append(random.choice([True, False])) return result def isready(self): result=bool(self.groups) for ind,item in enumerate(self.groups): result&=item[2] return result def getlogicstuct(self): result = [] for _,item in enumerate(self.groups): grp=[] if item[2]: for x in range(len(item[0])): grp.append([item[0][x],True]) for x in range(len(item[1])): if item[1][x]<=-self.threshold: grp.append([x,False]) if grp: result.append(grp) return result def simulatebystruct(self,params,grps): for _,item in enumerate(grps): locres=True for _,param in enumerate(item): if param[1]: locres&=params[param[0]] else: locres&=~params[param[0]] if not locres: break if locres: return True return False def customlogic(params): return params[0] and params[1] and not params[5]and params[11] or params[2] and not params[3] \ or params[0] and params[5] and not params[6] or params[7] and not params[8] def newme(): numparams = 12 neuron=LogicReconstructer(numparams) while not neuron.isready(): params=neuron.randparams() funcresult=customlogic(params) neuron.extractgroups(params,funcresult) neuron.extractinhibitors(params,funcresult) for x in range(1000): params=neuron.randparams() if neuron.simulate(params)!=customlogic(params): print("Simulate is wrong.") return print(neuron.getlogicfunc()) if __name__ == "__main__": newme()
      
      







したがって、入力パラメーターのセットがあり、それらの一部は実行結果にまったく影響を与えない可能性があるため、最初に行うことは、どのパラメーターが重要かを理解することです。 独立したアクティベーショングループを収集することから始めることをお勧めします。つまり、関数の結果がTrueの場合、 extractgroupsメソッドで確認できる予約を使用して、アクティブなパラメーターの数をデータベースに書き込みます。 したがって、論理AND演算子に関連付けられたパラメーターを見つけます。 この段階は、樹状突起の成長と比較できます。



それでは、シナプスのセットアップに移りましょう。まず、抑制接続を強調する必要があります。 グループは抑制関係から条件付きで独立しているため、ベイズの定理を使用できます。 言い換えれば、活性化グループが機能した場合、結果に対する残りのパラメーターの効果を計算します。 パラメータが結果に悪影響を与える場合、つまり アクティベートされると、ほとんどの場合、結果はFalseでしたが、抑制的です(AND NOT)。 詳細については、 extractinhibitorsメソッドを参照してください。



アルゴリズムの作業は、すべてのグループがすべての抑制接続が見つかったという確認を受け取ったときに完了したと見なされます。 確認は、パラメータの1つのベイジアン確率がしきい値を超えたことです。



しかし、関数が動作するいくつかの重要なパラメーターが欠落していると仮定すると、どうすればこれを決定できますか? 例:

 params[0] and params[1] and not params[2] or params[3] and random.choice([True, False])
      
      





4つのパラメーターについて知っていますが、5番目のパラメーターは考慮しません。 具体的には、この場合、パラメーター3のみで構成されるアクティベーショングループは、しきい値を超えません。 しかし、それを考慮に入れると、3番目と同じグループになります。 ご理解のとおり、グループは論理演算子ORで区切られています。



しかし、グループ全体が欠落している場合:

 params[0] and params[1] and not params[2] or random.choice([True, False]) and random.choice([True, False])
      
      



その後、分析中のグループ(トートロジーについては申し訳ありません)がユニットパラメーターに分割され、各パラメーターがアクティベーションになります。これはサインです。



customlogicいじって、アルゴリズムが機能することを確認してください。 たとえば、グループ内の多数の抑制結合では、決定されない場合があることに気付きました。

ボーナスC ++ベッドシート
 // neuro.cpp:      . // #include "stdafx.h" #include <vector> #include <map> #include <stdlib.h> #include <time.h> #include <iostream> using namespace std; class Bool { public: Bool(): m_value(){} Bool( bool value ) : m_value(value){} operator bool() const { return m_value;} bool* operator& () { return &m_value; } const bool * const operator& () const { return &m_value; } private: bool m_value; }; class neuron { public: double threshold; int synapticmem; int numparams; map<int,vector<char>> groups; map<int,vector<double>> bayesian; map<int,map<char,bool>> grouplogic; int maxid; neuron(int numparams, double threshold = 0.99, int synapticmem = 10) { this->numparams=numparams; this->threshold=threshold; this->synapticmem=synapticmem; maxid=0; srand ( time(NULL) ); } ~neuron() { } vector<char> getactive(vector<Bool>& params) { if (params.size()!=numparams) throw 1;// numparams mismatch vector<char> active; for (int i=0;i<this->numparams;i++) if (params[i]) active.push_back((char)i); return active; } void extractgroups(vector<Bool>& params, bool result) { vector<char> active= this->getactive(params); bool ignore = false; bool exist = false; if (result && active.size()>0) { map<int,vector<char>>::iterator i=this->groups.begin(); while (i!=this->groups.end()) { if (active.size()>i->second.size()&&this->issublist(i->second,active)) { ignore=true; break; } else if (active.size()==i->second.size()&&this->issublist(active,i->second)) { exist=true; break; } else if (active.size()<i->second.size()&&this->issublist(active,i->second)) { this->bayesian.erase(i->first); this->grouplogic.erase(i->first); i=this->groups.erase(i); } else i++; } if (!exist && !ignore) { this->groups[this->maxid]=active; this->bayesian[this->maxid]=*new vector<double>(numparams,0); this->maxid++; } } } template< class T > bool issublist(vector<T>& sublist, vector<T>& fulllist) { for (int i=0;i<sublist.size();i++) { bool match = false; for (int n=0;n<fulllist.size();n++) if (sublist[i]==fulllist[n]) { match=true; break; } if (!match) return false; } return true; } template<class InputIterator, class T> InputIterator find (InputIterator first, InputIterator last, const T& val) { while (first!=last) { if (*first==val) return first; ++first; } return last; } void extractinhibitors(vector<Bool>& params, bool result) { vector<char> active= this->getactive(params); if (result) { bool count = false; for (map<int,vector<char>>::iterator i=this->groups.begin();i!=this->groups.end();++i) if(this->issublist(i->second,active)) if (!count) count=true; else return; } for (map<int,vector<char>>::iterator i=this->groups.begin();i!=this->groups.end();++i) if (grouplogic.count(i->first)==0) if (this->issublist(i->second,active)) { vector<char> neg; bool negvalue = false; for (int n=0;n<this->numparams;n++) if (this->bayesian[i->first][n]<=-1*this->threshold) { neg.push_back((char)n); negvalue|=params[n]; } else if (this->bayesian[i->first][n]>=this->threshold) if (grouplogic.count(i->first)==0) this->build_grouplogic(i->first); for (int n=0;n<this->numparams;n++) if (params[n]) if (!negvalue || this->find(neg.begin(), neg.end(), n) != neg.end()) this->bayesian[i->first][n]=counting(this->bayesian[i->first][n],result); } } double counting(double prc, bool result) { double oneless = prc - prc/this->synapticmem; if (result) oneless+=1.0/this->synapticmem; else oneless-=1.0/this->synapticmem; return oneless; } void build_grouplogic(int indgroup) { for (int i=0;i<this->groups[indgroup].size();i++) this->grouplogic[indgroup][(char)groups[indgroup][i]]=true; for (int i=0;i<numparams;i++) if (this->bayesian[indgroup][i]<=-1*threshold) this->grouplogic[indgroup][(char)i]=false; } bool isready() { int count = 0; for (map<int,vector<char>>::iterator i=this->groups.begin();i!=this->groups.end();++i) if (grouplogic.count(i->first)!=0) count++; if (count==groups.size()&&groups.size()>0) return true; return false; } bool randomBool() { return rand() % 2 == 1; } void randparams(vector<Bool>& params) { for (int i=0;i<this->numparams;i++) params[i]=this->randomBool(); } string getfunction() { string result=""; bool maincount=false; for (map<int,map<char,bool>>::iterator i=this->grouplogic.begin();i!=this->grouplogic.end();++i) { if (maincount) result+=" or "; string locres=""; bool count = false; for (map<char,bool>::reverse_iterator n=i->second.rbegin();n!=i->second.rend();++n) { if (count) locres+=" and "; if (!n->second) locres+="not "; locres+=(char)(((int)'0')+(int)n->first); count=true; } result+=locres; maincount=true; } return result; } bool simulate(vector<Bool>& params) { bool result=false; for (map<int,map<char,bool>>::iterator i=this->grouplogic.begin();i!=this->grouplogic.end();++i) { bool locres=true; bool count = false; for (map<char,bool>::iterator n=i->second.begin();n!=i->second.end();++n) { if (n->second) locres&=params[(int)n->first]; else locres&=!params[(int)n->first]; } result|=locres; } return result; } }; bool customlogic(vector<Bool>& params) { return params[0] && params[1] && !params[2] || params[3] && !params[1] || params[5] && !params[0] && params[1]; } int _tmain(int argc, _TCHAR* argv[]) { int numparams = 6; clock_t start = clock() ; neuron* nine=new neuron(numparams); while (!nine->isready()) { vector<Bool> params(numparams, false); nine->randparams(params); bool result = customlogic(params); nine->extractgroups(params,result); nine->extractinhibitors(params,result); } clock_t end = clock(); double elapsed_time = (end-start)/(double)CLOCKS_PER_SEC; for (int i=0;i<1000;i++) { vector<Bool> params(numparams, false); nine->randparams(params); if (nine->simulate(params)!=customlogic(params)) { printf("Simulate is wrong"); return 0; } } printf("%s\n%.3f sec\n",nine->getfunction().c_str(),elapsed_time); getchar(); return 0; }
      
      







実験



もちろん、アルゴリズムが機能するのは良いことですが、実世界のデータに対応できますか? ここから取った1つのデータセットでテストすることにしました 。 タスクは、float型の4つのパラメーターに従って、本物から偽の紙幣を分類することです。 私は彼らが何を意味するのか全く理解していなかったと言わなければなりません。 しかし、これは実験の純粋さの手中にあるだけです。なぜなら、機械は私ではなく訓練されるべきだからです。

それが起こった
 def getbinary(num,max,min =0 ): result=[] binnums=int(math.ceil(math.log(abs(min-max),2))) binstr=('{0:0'+str(binnums)+'b}').format(-min+num) for _,item in enumerate(binstr): if item=='1': result.append(True) else: result.append(False) return result def banknotes(): file = open('C:/bankdata.txt', 'r')# http://archive.ics.uci.edu/ml/datasets/banknote+authentication lines = file.readlines() file.close() data = [] for i in range(len(lines)): data.append(lines[i].strip().split(",")) lines.clear() numdata = [] paramsmax=[0,0,0,0] paramsmin=[0,0,0,0] for i in range(len(data)): tmp=[] for x in range(len(data[i])): if x!=4: tmp.append(int(round(float(data[i][x])))) paramsmax[x]=max(paramsmax[x],int(round(float(data[i][x])))) paramsmin[x]=min(paramsmin[x],int(round(float(data[i][x])))) else: if data[i][x]=='0': tmp.append(False) else: tmp.append(True) numdata.append(tmp) data.clear() bindata=[] for i in range(len(numdata)): tmp=[] for x in range(len(numdata[i])): if x!=4: tmp.extend(getbinary(numdata[i][x],paramsmax[x],paramsmin[x])) else: tmp.extend([numdata[i][x]]) bindata.append(tmp) numdata.clear() neuron = LogicReconstructer(len(bindata[0])-1,totalmem=7, threshold=0.98) for _,item in enumerate(bindata): neuron.extractgroups(item[:-1],item[-1:][0]) ready=False while not neuron.isready(): rnd=random.randint(0,len(bindata)-1) neuron.extractinhibitors(bindata[rnd][:-1],bindata[rnd][-1:][0]) logicstruct=neuron.getlogicstuct() print(logicstruct) falsepositive = 0 falsenegative = 0 for _,item in enumerate(bindata): res = neuron.simulatebystruct(item[:-1],logicstruct) if res!=item[-1:][0]: if res: falsepositive+=1 else: falsenegative+=1 print(falsenegative/len(bindata),falsepositive/len(bindata))
      
      







アルゴリズムはバイナリデータのみを受け入れるため、数値を整数に丸めgetbinary関数を使用してバイナリ形式に変換する必要がありました 。 トレーニング後、134個の論理グループで構成されるこのような構造を得ました。

論理構造
  logicstr="[[[2, True], [3, True], [6, True], [7, True], [10, True], [11, True], [12, True], [13, True], [14, True], [16, True]], [[1, True], [3, True], [4, True], [8, True], [12, True], [15, True], [16, True], [17, True]], [[1, True], [3, True], [5, True], [10, True], [12, True], [14, True], [16, True], [6, False], [7, False], [8, False], [11, False]], [[1, True], [2, True], [5, True], [6, True], [7, True], [11, True], [13, True], [14, True], [16, True], [10, False]], [[1, True], [2, True], [5, True], [6, True], [11, True], [12, True], [13, True], [14, True], [16, True]], [[2, True], [3, True], [8, True], [9, True], [12, True], [15, True], [16, True]], [[1, True], [2, True], [3, True], [4, True], [8, True], [15, True], [17, True], [6, False], [7, False], [11, False]], [[1, True], [4, True], [7, True], [8, True], [11, True], [15, True], [2, False], [6, False]], [[1, True], [6, True], [10, True], [11, True], [12, True], [15, True], [16, True], [17, True]], [[0, True], [5, True], [6, True], [7, True], [8, True], [12, True], [14, True], [17, True], [10, False], [11, False], [13, False]], [[0, True], [4, True], [7, True], [15, True], [17, True], [6, False], [16, False]], [[1, True], [3, True], [5, True], [10, True], [12, True], [14, True], [17, True], [2, False], [6, False], [7, False]], [[0, True], [5, True], [6, True], [7, True], [12, True], [13, True], [14, True], [16, True], [2, False], [11, False]], [[0, True], [4, True], [7, True], [8, True], [16, True], [17, True], [6, False], [15, False]], [[1, True], [4, True], [8, True], [11, True], [13, True], [14, True], [2, False]], [[0, True], [4, True], [12, True], [14, True], [17, True], [6, False], [11, False], [13, False]], [[2, True], [3, True], [4, True], [8, True], [11, True], [15, True], [17, True], [1, False], [6, False], [7, False]], [[1, True], [3, True], [5, True], [6, True], [7, True], [11, True], [14, True], [2, False], [10, False], [12, False]], [[1, True], [2, True], [4, True], [12, True], [14, True], [11, False]], [[1, True], [6, True], [7, True], [8, True], [9, True], [14, True]], [[2, True], [5, True], [9, True], [14, True]], [[1, True], [4, True], [7, True], [11, True], [13, True], [14, True], [2, False], [3, False], [8, False], [12, False], [17, False]], [[1, True], [3, True], [5, True], [8, True], [10, True], [11, True], [14, True], [17, True], [6, False]], [[2, True], [3, True], [6, True], [7, True], [9, True], [13, True], [14, True]], [[1, True], [5, True], [6, True], [8, True], [11, True], [12, True], [13, True], [14, True], [16, True], [0, False], [7, False]], [[2, True], [3, True], [7, True], [9, True], [11, True], [14, True]], [[1, True], [5, True], [6, True], [7, True], [11, True], [12, True], [14, True], [16, True], [0, False], [8, False]], [[1, True], [3, True], [4, True], [8, True], [12, True], [13, True], [15, True], [16, True], [2, False], [5, False], [6, False], [11, False]], [[1, True], [6, True], [8, True], [10, True], [11, True], [12, True], [14, True]], [[1, True], [2, True], [4, True], [8, True], [13, True], [15, True], [16, True], [6, False]], [[1, True], [2, True], [5, True], [6, True], [10, True], [14, True], [16, True], [11, False], [13, False]], [[2, True], [3, True], [4, True], [7, True], [8, True], [11, True], [15, True], [1, False], [6, False], [17, False]], [[1, True], [6, True], [10, True], [11, True], [13, True], [15, True], [16, True], [17, True]], [[1, True], [2, True], [5, True], [7, True], [11, True], [12, True], [13, True], [14, True], [16, True]], [[2, True], [4, True], [6, True], [8, True], [11, True], [13, True], [16, True], [0, False], [15, False]], [[1, True], [5, True], [6, True], [7, True], [10, True], [14, True], [17, True], [2, False], [8, False], [11, False], [12, False]], [[1, True], [5, True], [10, True], [12, True], [13, True], [14, True], [16, True]], [[0, True], [4, True], [7, True], [15, True], [16, True], [6, False], [17, False]], [[1, True], [2, True], [3, True], [4, True], [7, True], [8, True], [16, True], [17, True], [6, False]], [[1, True], [2, True], [5, True], [6, True], [11, True], [14, True], [17, True], [10, False], [12, False]], [[1, True], [2, True], [4, True], [8, True], [12, True], [15, True], [16, True]], [[1, True], [4, True], [11, True], [13, True], [15, True], [16, True], [17, True], [5, False], [6, False], [7, False], [8, False]], [[2, True], [3, True], [5, True], [10, True], [11, True], [12, True], [13, True], [14, True]], [[2, True], [5, True], [8, True], [10, True], [11, True], [12, True], [13, True], [14, True]], [[1, True], [2, True], [5, True], [6, True], [7, True], [8, True], [11, True], [14, True], [3, False], [10, False], [12, False], [16, False], [17, False]], [[1, True], [7, True], [9, True], [13, True], [15, True], [16, True]], [[1, True], [2, True], [5, True], [10, True], [13, True], [14, True], [17, True], [3, False], [6, False], [11, False]], [[0, True], [5, True], [6, True], [7, True], [8, True], [11, True], [14, True], [17, True], [12, False], [16, False]], [[1, True], [3, True], [6, True], [7, True], [10, True], [11, True], [14, True], [5, False]], [[0, True], [5, True], [7, True], [8, True], [11, True], [12, True], [13, True], [14, True], [16, True], [2, False], [6, False]], [[2, True], [3, True], [4, True], [6, True], [11, True], [13, True], [16, True], [17, True], [1, False], [7, False], [8, False], [15, False]], [[1, True], [5, True], [6, True], [8, True], [10, True], [14, True], [17, True], [11, False]], [[1, True], [2, True], [5, True], [8, True], [10, True], [14, True], [17, True], [3, False], [6, False], [11, False]], [[2, True], [4, True], [6, True], [7, True], [11, True], [13, True], [15, True], [1, False], [16, False], [17, False]], [[1, True], [4, True], [11, True], [12, True], [14, True], [17, True], [2, False], [3, False], [13, False]], [[1, True], [2, True], [3, True], [5, True], [6, True], [7, True], [8, True], [12, True], [13, True], [14, True]], [[1, True], [2, True], [5, True], [6, True], [10, True], [12, True], [14, True], [17, True], [3, False], [7, False]], [[1, True], [6, True], [7, True], [9, True], [13, True], [14, True]], [[1, True], [9, True], [11, True], [12, True], [13, True], [15, True], [16, True], [17, True]], [[1, True], [7, True], [9, True], [12, True], [13, True], [14, True]], [[1, True], [2, True], [5, True], [10, True], [12, True], [14, True], [16, True]], [[3, True], [4, True], [6, True], [11, True], [12, True], [16, True], [0, False]], [[1, True], [8, True], [9, True], [12, True], [15, True], [16, True]], [[2, True], [4, True], [6, True], [7, True], [11, True], [13, True], [17, True], [15, False]], [[1, True], [2, True], [6, True], [7, True], [8, True], [10, True], [12, True], [14, True], [17, True]], [[2, True], [3, True], [4, True], [8, True], [11, True], [13, True], [14, True], [1, False], [12, False]], [[0, True], [4, True], [8, True], [13, True], [14, True], [2, False], [11, False], [12, False], [16, False], [17, False]], [[2, True], [3, True], [4, True], [8, True], [11, True], [15, True], [16, True], [1, False], [6, False], [7, False], [17, False]], [[2, True], [4, True], [8, True], [11, True], [12, True], [14, True], [0, False], [3, False]], [[1, True], [5, True], [6, True], [7, True], [11, True], [13, True], [14, True], [17, True], [0, False]], [[2, True], [3, True], [6, True], [8, True], [9, True], [13, True], [14, True]], [[1, True], [5, True], [6, True], [8, True], [10, True], [14, True], [16, True], [11, False]], [[1, True], [2, True], [6, True], [7, True], [10, True], [11, True], [14, True], [17, True]], [[1, True], [3, True], [6, True], [10, True], [11, True], [13, True], [14, True], [5, False]], [[1, True], [2, True], [3, True], [5, True], [7, True], [8, True], [11, True], [12, True], [14, True], [16, True]], [[2, True], [3, True], [4, True], [6, True], [11, True], [12, True], [15, True], [1, False], [7, False]], [[1, True], [2, True], [5, True], [10, True], [13, True], [14, True], [16, True], [6, False], [11, False]], [[1, True], [2, True], [3, True], [5, True], [6, True], [8, True], [11, True], [14, True], [16, True]], [[1, True], [2, True], [5, True], [6, True], [7, True], [8, True], [12, True], [13, True], [14, True], [17, True]], [[1, True], [3, True], [5, True], [6, True], [10, True], [13, True], [14, True], [17, True], [2, False], [11, False]], [[2, True], [3, True], [9, True], [11, True], [12, True], [13, True], [15, True], [16, True]], [[2, True], [3, True], [6, True], [7, True], [8, True], [9, True], [14, True], [17, True]], [[1, True], [8, True], [9, True], [11, True], [13, True], [14, True]], [[1, True], [2, True], [6, True], [7, True], [10, True], [11, True], [14, True], [16, True], [5, False], [13, False]], [[1, True], [3, True], [6, True], [10, True], [11, True], [12, True], [14, True], [17, True]], [[1, True], [2, True], [7, True], [8, True], [10, True], [11, True], [12, True], [13, True], [14, True]], [[0, True], [5, True], [6, True], [7, True], [11, True], [14, True], [16, True], [8, False], [12, False], [13, False]], [[1, True], [4, True], [7, True], [11, True], [15, True], [17, True], [2, False], [6, False]], [[0, True], [5, True], [7, True], [11, True], [12, True], [13, True], [14, True], [16, True], [17, True], [2, False], [6, False]], [[3, True], [4, True], [6, True], [7, True], [11, True], [13, True], [15, True], [0, False], [17, False]], [[1, True], [3, True], [5, True], [6, True], [11, True], [12, True], [13, True], [14, True], [16, True]], [[1, True], [3, True], [5, True], [10, True], [11, True], [13, True], [14, True], [17, True], [2, False], [6, False]], [[1, True], [6, True], [7, True], [10, True], [11, True], [12, True], [13, True], [14, True], [16, True]], [[1, True], [3, True], [4, True], [8, True], [12, True], [13, True], [15, True], [17, True], [2, False], [6, False], [7, False], [11, False]], [[4, True], [6, True], [8, True], [11, True], [12, True], [17, True], [0, False], [15, False]], [[1, True], [7, True], [8, True], [10, True], [11, True], [12, True], [15, True], [16, True], [17, True]], [[1, True], [5, True], [10, True], [12, True], [13, True], [14, True], [17, True]], [[1, True], [3, True], [6, True], [7, True], [8, True], [10, True], [12, True], [14, True]], [[0, True], [5, True], [6, True], [7, True], [12, True], [13, True], [14, True], [17, True], [3, False], [8, False], [11, False]], [[3, True], [4, True], [6, True], [7, True], [8, True], [11, True], [13, True], [16, True], [15, False]], [[2, True], [3, True], [4, True], [11, True], [12, True], [14, True], [0, False], [1, False], [8, False]], [[4, True], [6, True], [7, True], [8, True], [11, True], [13, True], [15, True], [1, False], [2, False], [3, False]], [[1, True], [2, True], [4, True], [11, True], [14, True], [3, False], [6, False], [10, False]], [[2, True], [3, True], [6, True], [7, True], [9, True], [12, True], [15, True], [16, True], [17, True]], [[1, True], [3, True], [4, True], [7, True], [11, True], [15, True], [16, True], [2, False], [6, False]], [[2, True], [3, True], [8, True], [9, True], [11, True], [13, True], [15, True], [16, True], [17, True]], [[2, True], [3, True], [6, True], [7, True], [10, True], [11, True], [12, True], [13, True], [14, True], [17, True]], [[1, True], [3, True], [4, True], [7, True], [12, True], [13, True], [15, True], [17, True], [6, False]], [[1, True], [4, True], [8, True], [11, True], [15, True], [16, True], [2, False], [13, False]], [[1, True], [6, True], [7, True], [8, True], [10, True], [12, True], [13, True], [14, True]], [[1, True], [2, True], [5, True], [7, True], [11, True], [12, True], [13, True], [14, True], [17, True]], [[2, True], [4, True], [6, True], [8, True], [11, True], [13, True], [17, True], [0, False], [15, False]], [[1, True], [2, True], [3, True], [5, True], [6, True], [7, True], [12, True], [13, True], [14, True], [17, True]], [[4, True], [5, True], [11, True], [13, True], [16, True], [1, False], [15, False]], [[1, True], [2, True], [4, True], [8, True], [12, True], [15, True], [17, True], [11, False]], [[2, True], [3, True], [4, True], [7, True], [11, True], [15, True], [17, True], [1, False], [6, False]], [[2, True], [4, True], [7, True], [11, True], [12, True], [14, True], [0, False], [3, False]], [[2, True], [3, True], [5, True], [6, True], [7, True], [11, True], [12, True], [14, True], [17, True], [0, False], [8, False], [16, False]], [[1, True], [3, True], [4, True], [11, True], [14, True], [2, False], [6, False], [16, False]], [[2, True], [3, True], [6, True], [7, True], [9, True], [13, True], [15, True], [16, True], [17, True]], [[2, True], [8, True], [9, True], [11, True], [14, True]], [[1, True], [2, True], [3, True], [4, True], [7, True], [15, True], [17, True], [6, False], [11, False]], [[1, True], [6, True], [7, True], [8, True], [10, True], [11, True], [14, True], [5, False]], [[1, True], [2, True], [3, True], [5, True], [6, True], [7, True], [12, True], [13, True], [14, True], [16, True]], [[1, True], [5, True], [6, True], [11, True], [12, True], [14, True], [17, True], [2, False]], [[2, True], [3, True], [4, True], [11, True], [13, True], [15, True], [16, True], [1, False]], [[2, True], [8, True], [9, True], [11, True], [12, True], [15, True], [16, True]], [[0, True], [5, True], [6, True], [7, True], [11, True], [13, True], [14, True], [17, True], [1, False], [2, False], [8, False], [12, False]], [[1, True], [2, True], [6, True], [10, True], [11, True], [12, True], [14, True], [17, True]], [[0, True], [4, True], [8, True], [13, True], [15, True], [17, True], [2, False], [3, False], [5, False], [6, False]], [[1, True], [3, True], [7, True], [8, True], [10, True], [11, True], [12, True], [14, True], [5, False], [6, False], [16, False]], [[1, True], [2, True], [3, True], [5, True], [8, True], [11, True], [12, True], [13, True], [14, True], [16, True]], [[1, True], [2, True], [3, True], [5, True], [6, True], [11, True], [13, True], [14, True], [16, True], [10, False]], [[1, True], [4, True], [8, True], [11, True], [15, True], [17, True], [2, False], [12, False]]]" logicstruct=literal_eval(logicstr)
      
      







これにより、2.8%の偽陰性と0.6%の偽陽性が得られます。これらの134グループは、約700の肯定的な例をまとめました。合計1372件のエントリがありました。起動ごとに新しい構造を生成できます。また、データをトレーニングサンプルとテストサンプルに分けず、「アルゴリズムはすべてを記憶し、新しいデータで覆われている」という点で批判していることに注意してください。これは非常に適切です。



画像







All Articles