I. 概要
BP-GA アルゴリズムの設計: 遺伝的アルゴリズムに基づく BP ニューラル ネットワーク アルゴリズム (以下、BP-GA と呼びます) は、BP ニューラル ネットワークの学習プロセスにおいて重みとしきい値を染色体として記述し、適切な適応関数を選択します。 BP-GA アルゴリズムの利点は、通常の BP 学習アルゴリズムと比較して、非微分可能など、従来の方法では処理できないいくつかの例を処理できることです。特性関数 (伝達関数) または勾配情報なし 既存のノード このアルゴリズムには、染色体ビット列と重み値の間のエンコーディング マッピングと評価関数という 2 つの重要な問題が含まれます。
2. 走行結果
コードの一部:
def load_data_wrapper(filename):
lineData = []
with open(filename) as txtData:
lines = txtData.readlines()
for line in lines:
linedata = line.strip().split(',')
lineData.append(linedata)
return lineData
# 提出特征和标签,特征做输入,标签为输出
def splitData(dataset):
Character= []
Label = []
for i in range(len(dataset)):
Character.append([float(tk) for tk in dataset[i][1:-1]])
Label.append(float(dataset[i][-1]))
return Character, Label
#输入特征数据归一化
def max_min_norm_x(dataset):
min_data = []
for i in range(len(dataset)):
min_data.append(min(dataset[i]))
new_min = min(min_data)
max_data = []
for i in range(len(dataset)):
max_data.append(max(dataset[i]))
new_max = max(max_data)
data = np.array(dataset)
data_x =[]
for x in np.nditer(data, op_flags=['readwrite']):
#x[...] = 2 * (x -new_min)/(new_max-new_min)-1
x[...] = (x - new_min) / (new_max - new_min)
#print('x[...]:',x[...])
data_x.append(x[...])
data_x3 = []
for index in range(0, len(data_x), 3):
data_x3.append([data_x[index], data_x[index+1], data_x[index+2]])
#print("data_x3:",data_x3)
return data_x3
def load_data_wrapper(filename): lineData = [] with open(filename) as txtData: 行数 = txtData.readlines() 行数の行: linedata = line.strip().split(',') lineData.append(linedata) return lineData # フィーチャとラベルを提案します。フィーチャは入力、ラベルは出力です。 def splitData(dataset): Character= [] Label = [] for i in range(len(dataset)): Character.append([float(tk) for tk in dataset[i][1:-1]]) Label.append(float(dataset[i][-1])) return Character, Label #入力特徴データ正規化 def max_min_norm_x(dataset): min_data = [ ] for i 範囲 (len(データセット)): min_data.append(min(dataset[i])) new_min = min(min_data) max_data = [] for i in range(len(dataset)): max_data.append(max(dataset[i])) new_max = max(max_data) ) data = np.array(dataset) data_x =[] for x in np.nditer(data, op_flags=['readwrite']): #x[...] = 2 * (x -new_min)/(new_max- new_min)-1 x[...] = (x - new_min) / (new_max - new_min) #print('x[...]:',x[...]) data_x.append(x[.. .]) data_x3 = [] range(0, len(data_x), 3) のインデックス: data_x3.append([data_x[index], data_x[index+1], data_x[index+2]]) #print( "data_x3:",data_x3) データ_x3 を返す
def load_data_wrapper(filename): lineData = [] with open(filename) as txtData: Lines = txtData.readlines() 行ごとの行: linedata = line.strip().split(',') lineData.append(linedata) return lineData #フィーチャとラベルを提案します。フィーチャは入力、ラベルは出力です。 def splitData(dataset): Character= [] Label = [] for i in range(len(dataset)): Character.append([float(tk) for tk in dataset[i][1:-1]]) Label.append(float(dataset[i][-1])) return Character, Label #入力特徴データ正規化 def max_min_norm_x(dataset): min_data = [ ] for i in range(len(dataset)): min_data.append(min(dataset[i])) new_min = min(min_data) max_data = [] for i in range(len(dataset)): max_data.append(max (dataset) [i])) new_max = max(max_data) data = np.array(dataset) data_x = [] for x in np.nditer(data, op_flags=['readwrite']): #x[...] = 2 * (x-new_min)/(new_max-new_min)-1 x[...] = (x - new_min) / (new_max - new_min) #print('x[...]:',x[...]) data_x.append(x[...]) data_x3 = [] インデックス用range(0, len(data_x), 3) 内: data_x3.append([data_x[index], data_x[index+1], data_x[index+2]]) #print("data_x3:",data_x3) return data_x3
def load_data_wrapper(filename): lineData = [] with open(filename) as txtData: Lines = txtData.readlines() 行ごとの行: linedata = line.strip().split(',') lineData.append(linedata) return lineData #フィーチャとラベルを提案します。フィーチャは入力、ラベルは出力です。 def splitData(dataset): Character= [] Label = [] for i in range(len(dataset)): Character.append([float(tk) for tk in dataset[i][1:-1]]) Label.append(float(dataset[i][-1])) return Character, Label #入力特徴データ正規化 def max_min_norm_x(dataset): min_data = [ ] for i in range(len(dataset)): min_data.append(min(dataset[i])) new_min = min(min_data) max_data = [] for i in range(len(dataset)): max_data.append(max (dataset) [i])) new_max = max(max_data) data = np.array(dataset) data_x = [] for x in np.nditer(data, op_flags=['readwrite']): #x[...] = 2 * (x-new_min)/(new_max-new_min)-1 x[...] = (x - new_min) / (new_max - new_min) #print('x[...]:',x[...]) data_x.append(x[...]) data_x3 = [] インデックス用range(0, len(data_x), 3) 内: data_x3.append([data_x[index], data_x[index+1], data_x[index+2]]) #print("data_x3:",data_x3) return data_x3
フルコード: 返信キーワード
3. 参考文献
[1] Wang Chongjun、Yu Wendi、Chen Zhaoqian、Xie Junyuan. 遺伝的アルゴリズムに基づく BP ニューラル ネットワーク アルゴリズムとその応用 [J]. 南京大学ジャーナル: 自然科学版、2003、39(5):459-466
[2] Pan Hao、Wang Xiaoyong、Chen Qiong、Huang Shaoluan、遺伝的アルゴリズムに基づく BP ニューラル ネットワーク技術の応用 [J]、Computer Applications、2005、25(12): 2777-2779