BP算法的python实现 + 男女生分类器

模式识别课上学习了BP算法,并用BP算法实现了男女生分类器,之前因为时间匆忙只是简单记录了一下代码实现,现在重温一下发现代码中还是存在着一些问题,于是修改了一下Bug,也当做是复习吧。本文完整代码和数据集可以到这里:BP算法的python实现获得。

BP算法是神经网络中十分经典的算法之一,要把它解释清楚实在需要很多时间,我只想重点讲一下基于BP算法的男女生分类器python实现,理论方面推荐看知乎大佬的讲解:神经网络,BP算法的理解与推导。

要求

采用BP神经网络设计男女生分类器。采用的特征包括身高、体重、鞋码、50m成绩、肺活量共五个特征,BP神经网络包含一个隐层,隐层结点数为5。要求:自行编写代码完成后向传播算法,采用交叉验证的方式实现对于性能指标的评判(包含SE,SP,ACC和AUC,AUC的计算可以基于平台的软件包)。

数据集

file: dataset.pySex,Birthplace,Height,Weight,ShoeSize,_50m,Pulmonary
1,湖北,163,51,41,7.5,2500
1,河南,171,64,41,7.5,3500
1,云南,182,68,45,7.8,4900
1,广西,172,66,42,8.2,4800
1,四川,185,80,44,8.5,5100
0,河北,164,47,38,9,2500
0,河南,160,46,38,9,2500
...

Python实现

数据处理

数据处理定义了两个函maxminnormloadDataset,分别用于数据读取和数据集归一化。数据集文件放在同级目录dataset.csv文件中,利用pandas库读取,并选出需要的特征列,此处不需要籍贯特征。返回dataset,dataset[0]为数据标签,0代表女生,1代表男生。

# 归一化函数
def maxminnorm(array):maxcols=array.max(axis=0)mincols=array.min(axis=0)data_shape = array.shapedata_rows = data_shape[0]data_cols = data_shape[1]t=np.empty((data_rows,data_cols))for i in range(data_cols):t[:,i]=(array[:,i]-mincols[i])/(maxcols[i]-mincols[i])return t# 数据集读取与处理
def loadDataset(filepath):"""加载数据集,对数据进行预处理,并打乱数据集filepath: 数据集文件存放路径"""pydata = pd.read_csv(filepath)# 填充缺省值--用各列平均数补全pydata['ShoeSize'] = pydata['ShoeSize'].fillna(pydata['ShoeSize'].mean())pydata['_50m'] = pydata['_50m'].fillna(pydata['_50m'].mean())pydata['Pulmonary'] = pydata['Pulmonary'].fillna(pydata['Pulmonary'].mean())data = pydata.dropna()data = data.iloc[:,[0,1,2,3,4,5,6]].valuesdataset = data[:,[0,2,3,4,5,6]]dataset = np.array(dataset)dataset = maxminnorm(dataset)return dataset

仓库地址

两个博客维护起来实在太麻烦了,需要完整代码的请仓库自取:BP算法的python实现。完整内容见个人博客:修行小生


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部