#-*- coding: utf-8 -*- """ learnstock.pyプログラム 単純な帰納的学習の例題プログラム パターン学習器 100個の学習データを読み込んで、 適合する10桁の2進数パターンを答えます 使い方 c:\>python learnstock.py < ldata.txt """ #モジュールのインポート import math import random #グローバル変数 SETSIZE=100 #学習データセットの大きさ CNO=10 #学習でデータの桁数(10社分) GENMAX=10000 #解候補生成回数 SEED=7 #乱数のシード #下請け関数の定義 #readdata()関数 def readdata(data,teacher): """学習データセットの読み込み""" for i in range(SETSIZE): line=input() data[i]=[int(num) for num in line.split()] teacher[i]=data[i][CNO] return #readdata()関数の終わり #calcscore()関数 def calcscore(data,teacher,answer): """解候補パターンのスコア(0~SETSIZE点)の計算""" score=0 #スコア(0=SETSIZE点) for i in range(SETSIZE): #一致度計算 point=0 for j in range(CNO): if answer[j]==2: point+=1 #ワイルドカード elif answer[j]==data[i][j]: point+=1 #一致 #スコアの計算 if(point==CNO)and(teacher[i]==1): score+=1 elif(point!=CNO)and(teacher[i]==0): score+=1 return score #calcscore()関数の終わり #メイン実行部 score=0 #スコア(0~SETSIZE点) answer=[0 for i in range(CNO)] #解候補 data=[[]for i in range(SETSIZE)] #学習データセット teacher=[0 for i in range(SETSIZE)] #教師データ bestscore=0 #スコアの最良値 bestanswer=[0 for i in range(CNO)] #探索途中での最良解 #乱数の初期化 random.seed(SEED) #学習データセットの読み込み readdata(data,teacher) #解候補生成と検査 for i in range(GENMAX): #解候補生成 for j in range(CNO): answer[j]=random.randint(0,2) #検査 score=calcscore(data,teacher,answer) #最良スコアの更新 if(score>bestscore): bestanswer=answer.copy() bestscore=score print(bestanswer,":score=",bestscore) #最良解の出力 print("最良解") print(bestanswer,":score=",bestscore) #learnstock.pyの終わり
1 0 0 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 0 0 0 1 1 0 1 0 0 1 0 0 1 1 0 1 0 0 1 1 1 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 0 0 1 1 0 1 0 0 1 1 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 1 0 0 1 0 0 0 1 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 1 1 0 1 0 0 1 1 1 0 0 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 0 0 1 1 0 0 0 1 1 1 0 0 0 1 0 0 1 0 0 1 1 1 0 0 0 0 1 1 0 0 1 1 1 0 1 0 1 1 0 1 0 1 1 1 1 1 0 1 1 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 1 0 0 1 0 1 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 0 1 0 0 0 1 1 1 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 0 1 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 0 0 0 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 1 1 0 1 1 0 0 1 1 0 0 0 0 1 0 1 0 1 1 0 1 0 0 1 1 1 1 0 0 1 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 0 0 0 0 1 0 0 0 1 0 1 1 1 1 0 0 1 0 0 0 1 0 0 1 0 1 1 0 0 1 1 1 1 0 1 1 0 0 0 0 0 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 1 1 0 0 1 1 1 1 0 1 1 0 0 1 0 0 0 1 0 1 1 1 1 1 0 1 1 0 1 1 0 0 1 0 0 1 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 1 0 1 0 1 1 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 1 1 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0 0 1 1 1 1 1 1 1 0 0 0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 1 0 0 1 0 1 1 1 0 0 1 0 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 0 0 1 0 1 1 1 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 1 0 0 0 1 1 0 1 0 0 1 1 1 1 1 1 1 0 1 1 0 1 0 1 1 1 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1 0 0 1 0 0 1 0 1 0 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 1 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 1 0 0 0 0 1 1 1 0 0 0 1 1 0 1 0 0 0 1 1 0 0 1 0 1 1 1 1 1 0 1 1 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 0 0 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 0 0 0 0 1 1 1 1 0 1 0 1 1 0 0 1 1 0 0 1 0 0 1 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 1 0 0 1 1 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 1 0 0 0 1 1 1 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0 1 1 0 0 1 0 0 0 0 1 0 1 1 0 1 0 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 1 1 0 1 1 1 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0 1 0 0 1 1 1 0
[1, 0, 1, 2, 0, 0, 2, 0, 1, 2] :score= 76 [2, 1, 0, 2, 0, 0, 2, 2, 2, 0] :score= 77 [0, 2, 0, 2, 1, 2, 2, 0, 0, 2] :score= 79 [2, 2, 0, 2, 0, 2, 1, 2, 0, 1] :score= 81 [1, 1, 0, 2, 2, 2, 2, 2, 0, 2] :score= 83 [2, 2, 0, 2, 2, 2, 0, 2, 0, 2] :score= 84 最良解 [2, 2, 0, 2, 2, 2, 0, 2, 0, 2] :score= 84