2021年-2022年第二学期《机器学习》课程大作业代码及注释
题目:神经网络预测游戏胜率
代码:
1 import numpy 2 import scipy.special 3 4 class neuralNetwork: 5 # 初始化 6 def __init__(self,inputnodes,hiddennodes,outputnodes,learningrate): 7 # 输入维数 8 self.inodes=inputnodes 9 # 隐藏层数 10 self.hnodes=hiddennodes 11 # 输出维数 12 self.onodes=outputnodes 13 14 # 初始化权重值,创建两个链接权重矩阵 15 self.wih=numpy.random.normal(0.0,pow(self.hnodes,-0.5),(self.hnodes,self.inodes)) 16 self.who=numpy.random.normal(0.0,pow(self.onodes,-0.5),(self.onodes,self.hnodes)) 17 18 # 学习率 19 self.lr=learningrate 20 21 # 激活函数 22 self.activation_function=lambda x:scipy.special.expit(x) 23 24 pass 25 26 def train(self,inputs_list,targets_list): 27 28 inputs=numpy.array(inputs_list,ndmin=2).T 29 targets=numpy.array(targets_list,ndmin=2).T 30 31 hidden_inputs=numpy.dot(self.wih,inputs) 32 hidden_outputs=self.activation_function(hidden_inputs) 33 34 final_inputs=numpy.dot(self.who,hidden_outputs) 35 final_outputs=self.activation_function(final_inputs) 36 37 output_errors=targets-final_outputs 38 hidden_errors=numpy.dot(self.who.T,output_errors) 39 40 self.who+=self.lr*numpy.dot((output_errors*final_outputs*(1.0-final_outputs)),numpy.transpose(hidden_outputs)) 41 self.wih+=self.lr*numpy.dot((hidden_errors*hidden_outputs*(1.0-hidden_outputs)),numpy.transpose(inputs)) 42 43 pass 44 45 # 给定输入,得到输出 46 def query(self,inputs_list): 47 inputs=numpy.array(inputs_list,ndmin=2).T 48 hidden_inputs=numpy.dot(self.wih,inputs) 49 hidden_outputs=self.activation_function(hidden_inputs) 50 51 final_inputs=numpy.dot(self.who,hidden_outputs) 52 final_outputs=self.activation_function(final_inputs) 53 54 return final_outputs 55 56 def main(): 57 #初步准备,读入英雄数据 58 d = dict() 59 i = 1 60 with open("champion.txt",'r',encoding="utf-8") as f: 61 while(True): 62 content = f.readline()[0:-1] 63 if not content: 64 break 65 d[content] = i 66 i += 1 67 #print(d) 68 69 #数据准备,读入比赛数据,训练集 70 X = [] 71 Y = [] 72 with open("match.txt",'r',encoding="utf-8") as f: 73 while(True): 74 pick = f.readline() 75 if not pick: 76 break 77 pick = pick.split(',') 78 res = f.readline() 79 for i in range(0,len(pick)): 80 if(i == len(pick)-1): 81 pick[i] = d[pick[i][0:-1]] 82 else: 83 pick[i] = d[pick[i]] 84 X.append(pick) 85 Y.append([int(res[0:-1])]) 86 #print(X) 87 #print(Y) 88 89 #训练模型 90 # 参数,输入维数,输出维数,隐藏层数,学习率 91 dmin_in = 5 92 dmin_out = 2 93 n_hide = 2 94 learn_rate = 0.0001 95 nw = neuralNetwork(dmin_in,n_hide,dmin_out,learn_rate) 96 nw.train(X,Y) 97 98 #测试模型 99 while(True): 100 test = [] 101 flag = 0 102 for i in range(5): 103 s = input("输入英雄全称:") 104 if s == "退出": 105 flag = 1 106 break 107 test.append(d[s]) 108 if flag == 1: 109 break 110 res = nw.query(test) 111 #print(res) 112 print("该组合胜率为:",end='') 113 print(res[0][0]*100,end='') 114 print("%") 115 116 main()

浙公网安备 33010602011771号