import re import matplotlib.pyplot as plt def extract_cv_mse(log_path): """ 从日志文件中提取特征数和对应的CV MSE。 日志行格式示例: "Current number of features: 156, CV MSE: 4.9253" """ feature_counts = [] cv_mses = [] pattern = re.compile(r"Current number of features:\s*(\d+),\s*CV MSE:\s*([\d\.]+)") with open(log_path, "r") as f: for line in f: match = pattern.search(line) if match: feature_counts.append(int(match.group(1))) cv_mses.append(float(match.group(2))) return feature_counts, cv_mses def plot_cv_mse(log_path, output_image="cv_mse_curve.png"): """ 根据日志文件中的数据绘制 CV MSE 曲线,并保存图片 """ feature_counts, cv_mses = extract_cv_mse(log_path) if not feature_counts: print("没有在日志文件中找到有效的 'Current number of features' 数据。") return plt.figure(figsize=(8,6)) plt.plot(feature_counts, cv_mses, marker='o', linestyle='-') plt.xlabel("Number of Features") plt.ylabel("CV MSE") plt.title("CV MSE vs. Number of Features") plt.grid(True) plt.savefig(output_image, dpi=300) plt.close() print(f"CV MSE 曲线图已保存为: {output_image}") if __name__ == "__main__": import sys if len(sys.argv) < 2: print("用法: python script.py ") else: log_file = sys.argv[1] plot_cv_mse(log_file) # python 1d-qsar/cuda/RFE_cuml_permutation_update.log