尝试了解此代码中应用于 LSTM 数据的 accuracy() 函数
Trying to understand the accuracy() function being applied to LSTM data in this code
我一直在使用 LSTM 为我的机器学习进行股票价格预测class,我对编程还很陌生,所以感谢您的耐心等待!
无论如何,我有这个生成准确度分数的函数,我正试图更好地理解该函数的某些组件。也就是说,数据转换和 lamda 函数的目的是什么?
函数如下:
def accuracy(model, data):
y_test = data["y_test"]
X_test = data["X_test"]
y_pred = model.predict(X_test)
y_test = np.squeeze(data["column_scaler"]["Close"].inverse_transform(np.expand_dims(y_test, axis=0)))
y_pred = np.squeeze(data["column_scaler"]["Close"].inverse_transform(y_pred))
y_pred = list(map(lambda current, future: int(float(future) > float(current)), y_test[:-LOOKUP_STEP], y_pred[LOOKUP_STEP:]))
y_test = list(map(lambda current, future: int(float(future) > float(current)), y_test[:-LOOKUP_STEP], y_test[LOOKUP_STEP:]))
return accuracy_score(y_test, y_pred)
我很好奇如果我只使用这样的函数会有什么区别:
def accuracy(model, data):
y_test = data["y_test"]
X_test = data["X_test"]
y_pred = model.predict(X_test)
return accuracy_score(y_Test, y_pred)
嗯,你应该更好地描述你的数据和模型输出。我想数据是一个 pandas 数据帧,你正在使用 sklearn 来预处理你的数据。
首先你需要规范化你的数据,所以我想你的代码中某处有一个 MinMaxScaler
或一些 sklearn 转换,它将你的数据帧的整个列映射到 0 到 1 之间的值,从你的代码似乎是 column_scaler
。因此,您必须使用 inverse_transform
将这些值非标准化为真实值(现金值)。因此,y_pred 值 0 成为您最初对数据的最低值,假设 $10,29。
然后您将价格预测转换为真假值(布尔值),检查未来价格是否高于当前价格(向前看 LOOKUP_STEP
个跳动)。
有了这个仅显示价格上涨与否的数组,您可以计算 Jaccard Score (from sklearn I suppose),它仅告诉您相对于错误的价格,您有多少上涨价格是正确的。
如果你没有执行那些 post 处理步骤 accuracy_score
会给出不同的值,我不确定它是否接受浮点数作为值,它会给出错误。
我一直在使用 LSTM 为我的机器学习进行股票价格预测class,我对编程还很陌生,所以感谢您的耐心等待!
无论如何,我有这个生成准确度分数的函数,我正试图更好地理解该函数的某些组件。也就是说,数据转换和 lamda 函数的目的是什么?
函数如下:
def accuracy(model, data):
y_test = data["y_test"]
X_test = data["X_test"]
y_pred = model.predict(X_test)
y_test = np.squeeze(data["column_scaler"]["Close"].inverse_transform(np.expand_dims(y_test, axis=0)))
y_pred = np.squeeze(data["column_scaler"]["Close"].inverse_transform(y_pred))
y_pred = list(map(lambda current, future: int(float(future) > float(current)), y_test[:-LOOKUP_STEP], y_pred[LOOKUP_STEP:]))
y_test = list(map(lambda current, future: int(float(future) > float(current)), y_test[:-LOOKUP_STEP], y_test[LOOKUP_STEP:]))
return accuracy_score(y_test, y_pred)
我很好奇如果我只使用这样的函数会有什么区别:
def accuracy(model, data):
y_test = data["y_test"]
X_test = data["X_test"]
y_pred = model.predict(X_test)
return accuracy_score(y_Test, y_pred)
嗯,你应该更好地描述你的数据和模型输出。我想数据是一个 pandas 数据帧,你正在使用 sklearn 来预处理你的数据。
首先你需要规范化你的数据,所以我想你的代码中某处有一个 MinMaxScaler
或一些 sklearn 转换,它将你的数据帧的整个列映射到 0 到 1 之间的值,从你的代码似乎是 column_scaler
。因此,您必须使用 inverse_transform
将这些值非标准化为真实值(现金值)。因此,y_pred 值 0 成为您最初对数据的最低值,假设 $10,29。
然后您将价格预测转换为真假值(布尔值),检查未来价格是否高于当前价格(向前看 LOOKUP_STEP
个跳动)。
有了这个仅显示价格上涨与否的数组,您可以计算 Jaccard Score (from sklearn I suppose),它仅告诉您相对于错误的价格,您有多少上涨价格是正确的。
如果你没有执行那些 post 处理步骤 accuracy_score
会给出不同的值,我不确定它是否接受浮点数作为值,它会给出错误。