1、题目
与上一题相同,使用神经网络实现
2、预先知识学习
神经网络:对每一层传入值进行计算,然后插入偏置单元,即全为1的单元 ,进入下一层计算,层层传递,最终得出结果。由于给出了theta的值,具体如何推导在下一节课给出
3、实现
1、导入数据
data = sio.loadmat(path)
X = data['X']
y = data['y']
将y转为一维数组方便未来与结果进行对比,得出准确率
#将y转为一维数组,方便将来计算准确率
y = y.flatten()
2、对第一层加入偏置项
#插入偏置项
X = np.insert(X,0,values=1,axis=1)
print(X.shape)
3、导入题目给出的theta
theta = sio.loadmat(thetaPath)
# print(theta.keys())
theta1 = theta['Theta1']
theta2 = theta['Theta2']
4、定义sigmoid函数
#定义sigmoid函数
def sigmoid(z):
return 1/(1+np.exp(-z))
4、逐层计算
a1 = X
z2 = X@theta1.T#第一层运算结果
a2 = sigmoid(z2)#第二层输入
print(a2.shape)
a2 = np.insert(a2,0,values=1,axis=1)#插入偏置项
print(a2.shape)
z3 = a2@theta2.T
a3 = sigmoid(z3)
print(a3.shape)
5、得到每一个数据的预测结果
y_pred = np.argmax(a3,axis=1)
y_pred = y_pred+1
注意:argmax得到的是标,最终结果需要+1
6、准确率计算
acc = np.mean(y_pred==y)
print(acc)