画loss曲线图并使其平滑,做滤波处理

import numpy as np
import  matplotlib.pyplot as plt
import pandas as pd
# 读取存储为txt文件的数据
def data_read(dir_path):
    with open(dir_path, "r") as f:
        raw_data = f.read()
        # data = raw_data[1:-1].split(" ,")   # [-1:1]是为了去除文件中的前后中括号"[]"
        data = raw_data[0:-1].split()  # [-1:1]是为了去除文件中的前后中括号"[]"
        # data =
        data = np.asfarray(data, float)
    return data

def moving_average(interval, windowsize):
    window = np.ones(int(windowsize)) / float(windowsize)
    re = np.convolve(interval, window, 'same')
    return re
if __name__ == "__main__":
    train_loss_path = r"output_l.txt"  # 存储文件路径
    rolling_intv = 50

#/*
    y_train_loss = data_read(train_loss_path)  # loss值,即y轴
    y_train_loss = pd.DataFrame(y_train_loss)
    y_train_loss = list(np.hstack(y_train_loss.rolling(rolling_intv, min_periods=1).mean().values))
#*/
    # y_train_loss = data_read(train_loss_path)
    # y_train_loss = moving_average(y_train_loss, 2)
    x_train_loss = range(len(y_train_loss))  # loss的数量,即x轴

    plt.figure()

    # 去除顶部和右边框框
ax = plt.axes()
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

plt.xlabel('iters')  # x轴标签
plt.ylabel('loss')  # y轴标签

# 以x_train_loss为横坐标,y_train_loss为纵坐标,曲线宽度为1,实线,增加标签,训练损失,
# 默认颜色,如果想更改颜色,可以增加参数color='red',这是红色。
plt.plot(x_train_loss, y_train_loss, linewidth=1, linestyle="solid", label="val loss")
plt.xlim(0, 300)
plt.legend()
plt.title('Loss curve')
plt.show()
plt.savefig("loss.png")
首先,让我们使用Python和LightGBM库来实现鸢尾花数据集(Iris dataset)的分类。这是一个经典的机器学习入门示例,我们将使用LGBMClassifier进行训练和预测。 ```python # 导入所需的库 import lightgbm as lgb from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report, confusion_matrix, accuracy_score import matplotlib.pyplot as plt import seaborn as sns # 加载鸢尾花数据集 iris = load_iris() X = iris.data y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 定义模型参数 params = { 'objective': 'multiclass', 'num_class': len(iris.target_names), 'metric': 'multi_logloss', # 使用多类别交叉熵作为评估指标 } # 创建LightGBM数据集 lgb_train = lgb.Dataset(X_train, label=y_train) lgb_eval = lgb.Dataset(X_test, label=y_test, reference=lgb_train) # 训练模型 model = lgb.train(params, lgb_train, valid_sets=[lgb_train, lgb_eval], verbose_eval=False) # 预测 y_pred = model.predict(X_test) # 分类结果评价 print("Classification Report:") print(classification_report(y_test, y_pred, target_names=iris.target_names)) conf_mat = confusion_matrix(y_test, y_pred) sns.heatmap(conf_mat, annot=True, cmap="Blues", fmt='d') plt.xlabel('Predicted') plt.ylabel('Actual') plt.title('Confusion Matrix') plt.show() accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy}") ``` 现在我们来看一下GOSS (Graduated Sampling for Splitting)、EFB (Early Stopping based on the Best)、直方图滤波(Histogram Filtering)和Leaf-wise(逐叶优化)这些技术的原理: 1. **GOSS**:这是一种动态采样策略,根据每个叶子节点的重要性动态调整样本数量,有助于提高模型训练效率和准确性。 2. **EFB**:早期停止是指在验证集上的性能不再提升时就停止训练,避免过拟合。通过这种方法,我们可以控制模型复杂度,防止过度拟合数据。 3. **直方图滤波**:在图像处理中用于降噪,这里可能不是LightGBM直接应用的技术,但在某些特征选择或预处理阶段可能会用到。它通过统计相邻像素值的分布来进行平滑处理。 4. **Leaf-wise**:逐叶优化意味着在每次迭代中,模型只更新一部分叶子节点的权重,这可以帮助减少内存消耗和计算时间,特别是对于大规模数据集。 至于可视化分类结果,我们已经展示了混淆矩阵,它可以帮助我们直观地了解模型在各个类别间的错误情况。如果想更深入地分析,还可以尝试绘制ROC曲线或PR曲线
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值