以下是本文所用資料~~~

一、直接上手擼代碼
import pandas as pd
import numpy as np
import math
data = pd.read_excel('上證指數.xls')
data = np.array(data.iloc[3:-1,1:])
e = 1
ita = 0.0035
#sigmoid
def sigmoid(x):
return 1/(1+np.exp(-x))
#sigmoid導函式
def sigmoid_derivation(x):
return np.exp(x)/(np.exp(x)+1)**2
#將整個矩陣歸一化
max1 = data.max(axis = 0)
min1 = data.min(axis = 0)
t = np.empty((len(data),4))
for i in range(4):
t[:,i] = (data[:,i]-min1[i])/(max1[i]-min1[i])
#截取訓練集和測驗集,這里使用了最后一天為測驗集
train = t[:-1,:-1]#訓練集
train_result = t[:-1,-1]#訓練結果
test = t[-1,:-1]#測驗集
test_result = t[-1,-1]#測驗結果
#初始化權重和偏置值
w2 = np.random.random((3,3))
b2 = np.random.random((3,1))
w3 = np.random.random((1,3))
b3 = np.random.random((1,1))
i = 0
while i<len(train):
#前向計算
z2 = w2.dot(train[i].T) + b2.T
a2 = sigmoid(z2)
z3 = w3.dot(a2.T) + b3
a3 = z3
#計算誤差
ex = train_result[i] - a3
#反向計算
delta3 = -((ex)*(z3))
delta2 = w3.T.dot(delta3)*sigmoid_derivation(z2)
dw3 = delta3.dot(a2)
db3 = delta3
dw2 = delta2.dot(train[i])
db2 = delta3
#更新矩陣
w3 = w3 + ita*(-dw3)
b3 = b3 + ita*(-db3)
w2 = w2 + ita*(-dw2)
b2 = b2 + ita*(-db2)
#誤差均值
e = (e + ex)/i
#迭代次數
i = i + 1
print('w2矩陣為:',w2)
print('w3矩陣為:',w3)
print('b2矩陣為:',b2)
print('b3矩陣為:',b3)
#計算預測值
z2 = w2.dot(test.T) + b2.T
a2 = sigmoid(z2)
z3 = w3.dot(a2.T) + b3
a3 = z3
#返歸一化
print('預測值為:',a3*(max1[3]-min1[3])+min1[3])
print('真實資料為:{}'.format(test_result*(max1[3]-min1[3])+min1[3]))
print('誤差為:{}'.format((a3*(max1[3]-min1[3])+min1[3]) - (test_result*(max1[3]-min1[3])+min1[3])))
輸出結果為:

二、調庫代碼
import pandas as pd
import numpy as np
import math
from sklearn.neural_network import MLPRegressor,MLPClassifier
data = pd.read_excel('上證指數.xls')
data = np.array(data.iloc[3:-1,1:])
data1 = np.array(data)
X = data1[:, 0:2]
Y = data1[:, 2]
max1 = data.max(axis = 0)
min1 = data.min(axis = 0)
t = np.empty((len(data),4))
for i in range(4):
t[:,i] = (data[:,i]-min1[i])/(max1[i]-min1[i])
#截取訓練集和測驗集,這里使用了最后一天為測驗集
train = t[:-1,:-1]#訓練集
train_result = t[:-1,-1]#訓練結果
test = t[-1,:-1]#測驗集
test_result = t[-1,-1]#測驗結果
clf = MLPRegressor(hidden_layer_sizes=(4,1), activation='relu',solver='adam',alpha=0.0001,max_iter=2000)
clf = clf.fit(train,train_result)
pred = clf.predict(test.reshape(1, -1))
print('回歸預測結果:', pred)
print('預測值為:',pred*(max1[3]-min1[3])+min1[3])
print('真實資料為:{}'.format(test_result*(max1[3]-min1[3])+min1[3]))
print('誤差為:{}'.format((pred*(max1[3]-min1[3])+min1[3]) - (test_result*(max1[3]-min1[3])+min1[3])))
輸出結果為:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/426500.html
標籤:AI
上一篇:Deep Interest Evolution Network(DIEN)專題3:代碼決議之模型訓練和模型結構
下一篇:R語言邏輯運算子(Logical Operators,大于、小于、等于、不等于、與或非、是否為真)、R語言邏輯運算子(Logical Operators)實戰示例
