《机器学习(周志华)》 习题5.5答案

本文通过编程实现标准BP(SGD)和累积BP(FullBatch)算法,在西瓜数据集上训练单隐层神经网络。模型在训练集和西瓜3.0上均达到100%准确率,证明了隐层非线性变换增强模型表达力。实验发现,隐层大小至少为2,SGD在未收敛时误差较高但训练时间更短,FullBatch则在相同时间下可能更快达到收敛。

编程实现标准BP算法(sgd)和累积BP算法(fullbatch),在西瓜3.0上训练一个单隐层网络,并进行比较。

需要先把字符串转成数字,这里用one-hot。把二分类问题看成多分类问题的特例,然后用softmax。最终模型在训练集上可达到100%准确率,并且在西瓜3.0@上也可以达到100%,与前面的逻辑回归相比,多了一个隐层的非线性变换,模型的表达能力确实强大了很多!

经试验,隐层大小至少为2,为1时很难训练到百分之百准确率,隐层较大时,模型收敛更快。sgd和fullbatch相比,当模型还未收敛时,用同样的epoch,sgd比fullbatch误差高,但sgd时间更短。不过用同样的时间训练,sgd可能更容易达到收敛状态。

代码如下:

# coding: utf-8
import pandas as pd 
from pandas import read_csv
import theano
import theano.tensor as T 
import numpy as np 
from theano.tensor.nnet import sigmoid, softmax, binary_crossentropy
import numpy.random as rng
import time 
import random

def one_hot_encoder(data):
	diff_type = []
	for i in data:
		if i not in diff_type:
			diff_type.append(i)
	ret = []
	for i in data:
		idx = diff_type.index(i)
		ret.append([1 if j==idx else 0 for j in rang
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值