模式識別課上學習了bp演算法,並用bp演算法實現了男女生分類器,之前因為時間匆忙只是簡單記錄了一下**實現,現在重溫一下發現**中還是存在著一些問題,於是修改了一下bug,也當做是複習吧。本文完整**和資料集可以到這裡:bp演算法的python實現獲得。
bp演算法是神經網路中十分經典的演算法之一,要把它解釋清楚實在需要很多時間,我只想重點講一下基於bp演算法的男女生分類器python實現,理論方面推薦看知乎大佬的講解:神經網路,bp演算法的理解與推導。
採用bp神經網路設計男女生分類器。採用的特徵包括身高、體重、鞋碼、50m成績、肺活量共五個特徵,bp神經網路包含乙個隱層,隱層結點數為5。要求:自行編寫**完成後向傳播演算法,採用交叉驗證的方式實現對於效能指標的評判(包含se,sp,acc和auc,auc的計算可以基於平台的軟體包)。
file
: dataset.py
***,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..
.
資料處理
資料處理定義了兩個函maxminnorm
和loaddataset
,分別用於資料讀取和資料集歸一化。資料集檔案放在同級目錄dataset.csv
檔案中,利用pandas庫讀取,並選出需要的特徵列,此處不需要籍貫特徵。返回dataset,dataset[0]為資料標籤,0代表女生,1代表男生。
# 歸一化函式
defmaxminnorm
(array)
: maxcols=array.
max(axis=0)
mincols=array.
min(axis=0)
data_shape = array.shape
data_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
# 資料集讀取與處理
defloaddataset
(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]]
.values
dataset = data[:,
[0,2
,3,4
,5,6
]]dataset = np.array(dataset)
dataset = maxminnorm(dataset)
return dataset
兩個部落格維護起來實在太麻煩了,需要完整**的請倉庫自取:bp演算法的python實現。完整內容見個人部落格:修行小生 Python簡單實現BP演算法
啟用函式為relu函式 import numpy as np n 64 樣本數 d in 1000 輸入維度 h 100 隱藏層維度 d out 10 輸出維度 隨機建立一些訓練資料 x np.random.randn n,d in y np.random.randn n,d out 隨機初始權重 ...
BP 演算法手動實現
github部落格傳送門 csdn部落格傳送門 numpy matplotlib 深度學習基礎網路模型 mnist手寫體識別資料集 import numpy as np import matplotlib.pyplot as plt x np.linspace 1,100,100 造出一些100個偽...
標準BP演算法用Python程式設計實現
1.需要匯入兩個模組 import pandas as pd import numpy as np 2.定於啟用函式 def sigmoid x return1 1 np.exp x 3.標準bp演算法 def bp x train,y train,numb,inta x train,y train...