如何查看逻辑回归模型分类后的特定交易样本行数据?
解决方案
你的错误确实是因为y_pred_test的长度是测试集的720条,而df是包含2880条数据的完整数据集,两者长度不匹配,无法直接用布尔索引关联。要查看分类后的样本行级信息,关键是保留测试集在原数据中的索引,这样就能对应回原数据集的具体交易记录。
方法一:拆分时保留DataFrame索引(推荐)
调整数据处理流程,先拆分数据集再做缩放,这样测试集会保留原数据的索引:
x = df[x_train_features] y = df["y"].astype("int") # 先拆分数据集(输入为DataFrame,会保留原索引) X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.25) # 仅用训练集拟合scaler,避免数据泄露 scaler = MinMaxScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # 训练模型 logreg = LogisticRegression() logreg.fit(X_train_scaled, y_train) # 生成预测结果 y_pred_test = (logreg.predict_proba(X_test_scaled)[:, 1] >= 0.5).astype(bool) # 获取分类为"好"(True)的交易记录 good_trades = df.loc[X_test[y_pred_test].index] # 计算盈利(假设盈亏列名为"profit",根据实际列名修改) total_profit = good_trades["profit"].sum() print(f"模型分类为'好'的交易总盈利:{total_profit}")
方法二:拆分时单独保存索引
如果已经按原流程用numpy数组做了拆分,可以通过单独保存索引来关联原数据:
x = df[x_train_features] y = df["y"].astype("int") # 保存原数据的索引 original_indices = x.index scaler = MinMaxScaler() scaledx = scaler.fit_transform(x) # 拆分时同时拆分索引 X_train, X_test, y_train, y_test, idx_train, idx_test = train_test_split( scaledx, y, original_indices, test_size=0.25 ) logreg = LogisticRegression() logreg.fit(X_train, y_train) y_pred_test = (logreg.predict_proba(X_test)[:, 1] >= 0.5).astype(bool) # 获取分类为"好"的交易索引 good_indices = idx_test[y_pred_test] # 从原数据集提取对应记录 good_trades = df.loc[good_indices] # 计算盈利 total_profit = good_trades["profit"].sum()
额外:查看所有测试集的分类结果
如果想同时查看测试集的真实标签、预测标签和交易详情,可以合并成一个结果表:
# 基于方法一的X_test和y_pred_test test_results = X_test.copy() test_results["真实标签"] = y_test test_results["预测标签"] = y_pred_test # 合并原数据中的盈亏等信息 test_results = test_results.join(df[["profit"]], how="left") # 查看分类为"好"的交易 print("分类为'好'的交易详情:") print(test_results[test_results["预测标签"] == True]) # 查看分类为"坏"的交易 print("\n分类为'坏'的交易详情:") print(test_results[test_results["预测标签"] == False])
内容的提问来源于stack exchange,提问作者cyrusl123
相关产品推荐
相关产品推荐

