Python 当预测值是连续的而实际值是离散的时,如何找到准确度?
我正在使用LSTM建立一个时间序列预测模型 我的数据集包含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 基本上,“设
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,)