import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
testnum = 200
def tanh(x):
return (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))
def de_tanh(x):
return (1-x**2)
df = pd.read_csv("2.csv") # 返回一个DataFrame的对象,这个是pandas的一个数据结构
df.columns = ["x", "y", "high", "use", "As"]
longtitude = df["x"] # 抽取前四列作为训练数据的各属性值
longtitude = np.array(longtitude)
latitude = df["y"]
latitude = np.array(latitude)
elevation = df["high"]
elevation =np.array(elevation)
functional = df["use"]
functional = np.array(functional)
As=df["As"]
As=np.array(As)
samplein = np.mat([longtitude,latitude,elevation,functional])
# df = pd.read_csv("2.csv") # 返回一个DataFrame的对象,这个是pandas的一个数据结构
# df.columns = ["Cr", "Cu", "Ni", "Pb", "Zn","As"]
# Cr = df["Cr"] # 抽取前四列作为训练数据的各属性值
# Cr = np.array(Cr)
# Cu = df["Cu"]
# Cu = np.array(Cu)
# Ni= df["Ni"]
# Ni =np.array(Ni)
# Pb = df["Pb"]
# Pb = np.array(Pb)
# Zn = df["Zn"]
# Zn = np.array(Zn)
# As=df["As"]
# As=np.array(As)
# samplein = np.mat([Cr,Cu,Ni,Pb,Zn])
sampleinminmax = np.array([samplein.min(axis=1).T.tolist()[0],samplein.max(axis=1).T.tolist()[0]]).transpose()
sampleout = np.mat([As])
sampleoutminmax = np.array([sampleout.min(axis=1).T.tolist()[0],sampleout.max(axis=1).T.tolist()[0]]).transpose()
w1=np.load('w1.npy')
w2=np.load('w2.npy')
b1=np.load('b1.npy')
b2=np.load('b2.npy')
df = pd.read_csv("1.csv")
df.columns = ["x", "y", "high", "use", "As"]
longtitude = df["x"]
longtitude = np.array(longtitude)
latitude = df["y"]
latitude = np.array(latitude)
elevation = df["high"]
elevation =np.array(elevation)
functional = df["use"]
functional = np.array(functional)
As=df["As"]
As=np.array(As)
input=np.mat([longtitude,latitude,elevation,functional])
# df = pd.read_csv("1.csv") # 返回一个DataFrame的对象,这个是pandas的一个数据结构
# df.columns = ["Cr", "Cu", "Ni", "Pb", "Zn","As"]
# Cr = df["Cr"] # 抽取前四列作为训练数据的各属性值
# Cr = np.array(Cr)
# Cu = df["Cu"]
# Cu = np.array(Cu)
# Ni= df["Ni"]
# Ni =np.array(Ni)
# Pb = df["Pb"]
# Pb = np.array(Pb)
# Zn = df["Zn"]
# Zn = np.array(Zn)
# As=df["As"]
# As=np.array(As)
# input=np.mat([Cr,Cu,Ni,Pb,Zn])
inputnorm=(2*(np.array(input.T)-sampleinminmax.transpose()[0])/(sampleinminmax.transpose()[1]-sampleinminmax.transpose()[0])-1).transpose()
hiddenout = tanh((np.dot(w1,inputnorm).transpose()+b1.transpose())).transpose()
networkout = tanh((np.dot(w2,hiddenout).transpose()+b2.transpose())).transpose()
diff = sampleoutminmax[:,1]-sampleoutminmax[:,0]
networkout2 = (networkout+1)/2
networkout2 = networkout2*diff+sampleoutminmax[0][0]
output1=networkout2.flatten()
output1=output1.tolist()
for i in range(testnum):
output1[i] = float('%.2f'%output1[i])
print("the prediction is:",output1)
output=As
rmse = (np.sum(np.square(output-output1))/len(output))**0.5
mae = np.sum(np.abs(output-output1))/len(output)
average_loss1=np.sum(np.abs((output-output1)/output))/len(output)
mape="%.2f%%"%(average_loss1*100)
f1 = 0
for m in range(testnum):
f1 = f1 + np.abs(output[m]-output1[m])/((np.abs(output[m])+np.abs(output1[m]))/2)
f2 = f1 / testnum
smape="%.2f%%"%(f2*100)
A=0
B=0
C=0
D=0
E=0
for m in range(testnum):
y1 = np.abs(output[m]-output1[m])/np.abs(output[m])
if y1 <= 0.1:
A = A + 1
elif y1 > 0.1 and y1 <= 0.2:
B = B + 1
elif y1 > 0.2 and y1 <= 0.3:
C = C + 1
elif y1 > 0.3 and y1 <= 0.4:
D = D + 1
else:
E = E + 1
print("Ratio <= 0.1 :",A)
print("0.1< Ratio <= 0.2 :",B)
print("0.2< Ratio <= 0.3 :",C)
print("0.3< Ratio <= 0.4 :",D)
print("Ratio > 0.4 :",E)
print("the MAE is :",mae)
print("the RMSE is :",rmse)
print("the MAPE is :",mape)
print("the SMAPE is :",smape)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
前馈神经网络使用Python实现,可用于数据预测,压缩包中源码BPNN.py主要用于使用训练数据集进行模型训练,生成对应的训练后模型参数,test.py主要用于利用训练好的模型对测试数据集进行预测,输出结果包括MAE、MAPE等误差值以及预测差值的分布情况等。
资源推荐
资源详情
资源评论
收起资源包目录
前馈神经网络预测.rar (2个子文件)
前馈神经网络预测
BPNN.py 3KB
test.py 4KB
共 2 条
- 1
资源评论
七层楼的疯子
- 粉丝: 1w+
- 资源: 44
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功