Python 当预测值是连续的而实际值是离散的时,如何找到准确度?

Python 当预测值是连续的而实际值是离散的时,如何找到准确度?,python,tensorflow,machine-learning,time-series,lstm,Python,Tensorflow,Machine Learning,Time Series,Lstm,我正在使用LSTM建立一个时间序列预测模型 我的数据集包含datetime列以及一个名为device的列,该列显示1和0中的数据 下面是数据集的外观 datetime device 2020-11-03 06:57:34.328887 0 2020-11-03 06:58:36.177615 1 2020-11-03 06:59:34.328887 1 2020-11-03 07:00:36.177615 1 基本上,“设

我正在使用LSTM建立一个时间序列预测模型 我的数据集包含
datetime
列以及一个名为device的列,该列显示1和0中的数据 下面是数据集的外观

datetime                     device
2020-11-03 06:57:34.328887     0
2020-11-03 06:58:36.177615     1
2020-11-03 06:59:34.328887     1
2020-11-03 07:00:36.177615     1
基本上,“设备”列显示1和0,其中1表示设备正在使用,0表示设备未在使用,数据集包含超过25k条记录

我想做什么 我使用LSTM来预测该设备将来是否会被使用 我将数据集分为80%的训练、10%的验证和10%的测试

我的预测输出如下所示
[0.7432404,0.1035113……]
而我的实际输出是1和0

因此,我编写了一段代码,将预测数组中的连续值转换为1和0 然后通过与我的实际数据进行比较来检查准确性

这是我写的代码

def findAccuracy(y_pred):
    co=(max(y_pred)-min(y_pred))/2
    co=min(y_pred)+co
    
    return co

def AccuracyCheck(co, y_pred, y_act):
    testr=[]
    for i in range(len(y_pred)):
      if (y_pred[i]>=co):
        testr.append(1)
      else:
        testr.append(0)
        
    comp=[]
    for i in range(len(y_pred)):
      if(testr[i]==np.float64(y_act[i])):
        comp.append(1)
      else:
        comp.append(0)  
        
    tr_test=comp.count(1)
    pred=tr_test/len(comp)
    print("Test Accuracy is: ", pred*100)    
        
co=findAccuracy(y_pred)
AccuracyCheck(co, y_pred, y_act)
所以基本上我创建了一个阈值限制,并根据该限制将其相应地转换为1和0。 准确率在66%到70%之间波动,我可能认为我写的这段代码是我没有得到更好结果的原因。我应该如何提高分类数据的准确性,或者是否有其他方法/算法可供我使用,以便获得预期结果


我创建模型的代码链接在这里:

您可以使用
AUC
而不是准确性来评估性能,无论它是否跨时代学习。根据
ROC曲线
,您还可以为您的模型确定最合适的阈值

另外,请记住
分类数据
指的是特征或输入属于分类的数据。这里的输出/响应变量/y是分类的(二进制的)。因此,这是一个分类问题,您的输出来自
物流功能。如果查看逻辑函数,您将看到它不会返回0-1,而是将输出限制在一个范围[0,1]内


有一个所有可用scikit学习指标的列表。您可以看到哪一个适合分类(多类),哪一个只适合两个类。还要记住,模型评估不会查看要素空间。因此,无论您是否使用了LSTM或任何其他技术来生成您的特征。只需要你的
y\u pred
y\u act

为什么不使用
BinaryAccurance()
?我使用了二进制精度,精度大约为0.68。这并没有改善。你的精确计算对我来说很奇怪。例如,如果所有目标均为零,且模型对其进行了完美预测,则您的准确率将达到约50%。我认为改变精确算法对你没有帮助。你的LSTM是基于字符的吗?你能告诉我,我应该如何处理只有一个特性的单变量二进制数据,这也是预测特性吗?由于分类问题需要1个以上的特征分类问题不需要1个以上的特征-例如,根据名字对性别进行分类:-)。您需要的只是预测的向量y_pred,然后计算AUC:-)。try->sklearn.metrics.roc\u曲线(y\u act,y\u pred,)