首页 > 其他分享 >接上篇,test预测值不对的问题

接上篇,test预测值不对的问题

时间:2023-07-20 20:55:21浏览次数:21  
标签:接上 df 0.0 预测值 output1 np test output array

修改了代码

#库的导入
import numpy as np
import pandas as pd
import math
from tensorflow.keras.losses import BinaryCrossentropy
losscc = BinaryCrossentropy()

#小波基函数
def wavelet(x):
    return (math.cos(1.75*x)) * (np.exp((x**2)/(-2)))
#激活函数tanh
def tanh(x):
    return (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))

#数据输入
data=pd.read_pickle('ICC_rms.pkl')
df=pd.DataFrame(data)
X = df.iloc[:, 0:510].values #所有样本的x值,0-510列 矩阵(1544,510)由此得出样本个数1544个,特征510
y = df.iloc[:, 511].values #所有样本的标签,511列 矩阵(1544,)
#把y转成1-0形式,Neurons对应0,Astrocytes对应1
Y=np.array([-1.0] * 1544)
for i in range(len(y)):
    if y[i] =='Neurons':
        Y[i]=0
    if y[i] =='Astrocytes':
        Y[i]=1

#输入数据的导入,用于测试数据的归一化与返归一化
df = pd.read_csv("train.csv")
df.columns = ["Co", "Cr", "Mg", "Pb", "Ti"]
Co = df["Co"]
Co = np.array(Co)
Cr = df["Cr"]
Cr = np.array(Cr)
Mg=df["Mg"]
Mg=np.array(Mg)
Pb = df["Pb"]
Pb =np.array(Pb)
Ti = df["Ti"]
Tisample = np.array(Ti)
sampleinsample = np.mat([Co,Cr,Mg,Pb])
Ti = np.array(Y)
samplein = np.mat(X.T)
sampleinminmax = np.array([samplein.min(axis=1).T.tolist()[0],samplein.max(axis=1).T.tolist()[0]]).transpose()#对应最大值最小值
sampleout = np.mat([Ti])
sampleoutminmax = np.array([sampleout.min(axis=1).T.tolist()[0],sampleout.max(axis=1).T.tolist()[0]]).transpose()#对应最大值最小值

#导入WNN.py训练好的参数
w1=np.load('w1.npy')
b=np.load('b.npy')
a=np.load('a.npy')
w2=np.load('w2.npy')
w1 = np.mat(w1)
w2 = np.mat(w2)
b = np.mat(b)
a = np.mat(a)

#隐含层节点数
hiddenunitnum = 8
#测试数据数量
testnum = 24


#测试数据的导入
df = pd.read_csv("test.csv")
df.columns = ["Co", "Cr", "Mg", "Pb", "Ti"]
Co = df["Co"]
Co = np.array(Co)
Cr = df["Cr"]
Cr = np.array(Cr)
Mg=df["Mg"]
Mg=np.array(Mg)
Pb = df["Pb"]
Pb =np.array(Pb)
Ti = df["Ti"]
# Ti = np.array(Ti)
# input=np.mat([Co,Cr,Mg,Pb])
Ti = np.array(Y)
# inputtest = np.mat(X.T) 
inputtest=np.mat(X)

#测试数据中输入数据的归一化
# inputnorm=(np.array(input.T)-sampleinminmax.transpose()[0])/(sampleinminmax.transpose()[1]-sampleinminmax.transpose()[0])
#hidden_out2用于保存隐含层输出
hidden_out = np.mat(np.zeros((testnum,hiddenunitnum)))
#计算隐含层输出
for m in range(testnum):
    for j in range(hiddenunitnum):
        # d = ((inputnorm[m, :] * w1[j, :].T) - b[j, :]) * (a[j, :] ** (-1))
        d = ((inputtest[m, :] * w1[j, :].T) - b[j, :]) * (a[j, :] ** (-1))
        hidden_out[m, j] = wavelet(d)
#计算输出层输出
output = tanh(hidden_out * w2 )
#对输出结果进行反归一化
# diff = sampleoutminmax[:,1]-sampleoutminmax[:,0]
# networkout2 = output*diff+sampleoutminmax[0][0]
networkout2 = output+sampleoutminmax[0][0]
networkout2 = np.array(networkout2).transpose()
output1=networkout2.flatten()#降成一维数组
output1=output1.tolist()
for i in range(testnum):
    output1[i] = float('%.2f'%output1[i])
print("the prediction is:",output1)

# #将输出结果与真实值进行对比,计算误差
# output=Ti
# 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)
# average_loss1=losscc(output,output1)
# 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)
# print("the MAE is :",mae)
# print("the RMSE is :",rmse)
# print("the MAPE is :",mape)
# print("the SMAPE is :",smape)

#计算预测值与真实值误差与真实值之比的分布
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)

修改了inputtest并且去掉了归一化,但是还是不对,预测值全变成了0

the prediction is: [0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, -0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, -0.0, 0.0]

 

标签:接上,df,0.0,预测值,output1,np,test,output,array
From: https://www.cnblogs.com/jiezstudy/p/17569645.html

相关文章

  • You don't have either docker-client or docker-client-latest installed. Pleas
    如何安装docker-client或docker-client-latest概述在本文中,我将向您展示如何安装docker-client或docker-client-latest,并解释每一步所需的代码及其用途。无论您是一名刚入行的开发者还是有经验的开发者,这篇文章都将帮助您完成安装过程。准备工作在开始之前,请确保您已经正......
  • idea给java程序创建test目录
    在Java程序中创建test目录的方法在Java开发中,我们经常需要编写测试代码来验证我们的程序的正确性。为了更好地组织测试代码,我们可以创建一个独立的test目录来存放所有的测试代码。为什么要创建test目录?创建test目录有以下几个好处:更好的组织结构:将测试代码与正式代码分离,使项......
  • Test Parameter-批量生成测试用例
    TestParameter-批量生成测试用例_哔哩哔哩_bilibili1.背景:如果涉及多个被测目标,例如基于多个传感器输入值测试,测试环境包括Tester(测试方),ECU(被测对象),Tester发送传感器变量SensorA和SensorB,ECU反馈Force值的过程,根据不同传感器输入值测试Force反馈值,如何结合TestParameter和Tes......
  • Test Parameter-List Parameter批量执行测试
      TestParameter-ListParameter批量执行测试_哔哩哔哩_bilibili1.ListParameter可以理解为多个常量值的集合2.背景:还是一个模拟车速测试的例子,测试序列流程如下图 若被测车速范围值太多,每次重复编写费时且易错3.创建一个ListParameter1)在已创建的Paramete......
  • speedtest-cli
    speedtest-cli命令行下测试服务器外网速度补充说明speedtest-cli是一个使用python编写的命令行脚本,通过调用speedtest.net测试上下行的接口来完成速度测试,最后我会测试运维生存时间所在服务器的外网速度。项目地址:https://github.com/sivel/speedtest-cli安装speedtest-clisp......
  • Test Parameter-Scalar Parameter创建
    TestParameter-ScalarParameter创建_哔哩哔哩_bilibili1.背景:例:编写一个传感器输入值的测试,测试环境包括Tester(测试方),ECU(被测对象),Tester发送传感器变量SensorA和SensorB,ECU反馈Force值的过程,根据不同传感器输入值测试Force反馈值,即便有自定义的TestCase模板,每次还是需要输入......
  • Test Commands-Functions下——创建自定义Test Case
    TestCommands-Functions下_哔哩哔哩_bilibili基于上一节所创建的测试实例,编写多个不同车速的TestCase,若仅改变信号EngineSpeed的值,也要重复编写多次,花费时间长且易出错,这时可通过Functions功能自定义一个TestCase模板,并基于该模板添加多个TestCase用例1)选择Functions——Tes......
  • Test Commands-Functions上
    TestCommands-Functions上_哔哩哔哩_bilibili1.对于冗长的测试用例,随着添加的内容越多,同时伴随人员编写时间的增加,后续修改测试用例内容,排查错误的难度也随之上升,这时可以使用vTESTstudio自带的工具"Functions"对测试用例进行优化。2.Functions栏在TestTableEditor左下角;用......
  • 聚焦于任务调度的测试平台pytestx
    设计理念聚焦于任务调度,接口自动化80%本地编写,20%交由平台管理。如果使用pytest做接口自动化,那么个人认为最好的编写工具是PyCharm,任何低代码测试平台都无法取代。当然不会代码,或者不使用pytest,那低代码测试平台,或者yaml,甚至excel写自动化用例,都是可以接受的。而在使用pytest这......
  • Atcoder Grand Contest 057 D - Sum Avoidance
    先来找些性质:\(A\)中最小的元素\(M\)肯定是最小的不是\(S\)的因子的数,由于\(\text{lcm}(1,2,3,\cdots,43)>10^{18}\),所以\(M\le43\)。对于每个\(0\lei<M\),\(\bmodM=i\)的数被选择的部分必然是一段后缀,因为如果你选择了\(M\)选择了某个\(\bmodM=i\)的数\(v\),......