二、人工神经网络
监督学习问题分为两类:分类(输出分类标签)和回归(输出连续数字),这些都能通过线性或者非线性模型来解决,ANN的基本构建块就是线性模型。
代码如下(示例):
import numpy as np
def activation_function(inpt):
if(inpt>250):
return 250
else:
return inpt
def prediction_error(desired,expected):
return np.abs(np.mean(desired-expected))
def update_weight(weights,predicted,idx):
weights=weights+0.00001*(desired_output[idx]-predicted)*inputs[idx]
return weights
weights=np.array([0.05,.1])
inputs=np.array([60,40,100,300,-50,310])
desired_output=np.array([60,40,150,250,-50,250])
def training_loop(inpt,weights):
error=1
idx=0
iteration=0
while(iteration<2000 or error>=0.01):
predicted=activation_function(weights[0]+weights[1]*inputs[idx])
error=prediction_error(desired_output[idx],predicted)
weights=update_weight(weights,predicted,idx)
idx=idx+1
idx=idx%inputs.shape[0]
iteration=iteration+1
return error,weights
error,new_weights=training_loop(inputs,weights)
print('----------Final Results----------')
print('Learned Weights:',new_weights)
new_inputs=np.array([10,240,550,-160])
new_outputs=np.array([10,240,250,-160])
for i in range(new_inputs.shape[0]):
print('Sample ',i+1,', Expected=',new_outputs[i],', Predicted=',activation_function(new_weights[0]+new_weights[1]*new_inputs[i]))