如何为 ECG 信号数据训练 Xgboost 分类器?

数据挖掘 机器学习 分类 xgboost
2022-02-04 13:15:34

我正在测试https://www.physionet.org/challenge/2017/sources/提交。

我喜欢其中一个Xgboost用于训练分类器的提交代码。训练数据在.mat文件中,可以转换为csv格式。

在下面的代码中,我有预训练的模型xgb.bin,我可以使用它来测试任何输入信号。但我想使用不同的数据训练模型并创建自己的训练模型。

这是预测给定输入 ecg 文件的类名的代码

def predict(data):

    #data = io.loadmat(path)['val'][0]

    from numpy import genfromtxt
    data = genfromtxt('testdata/val.csv', delimiter=',')


    features_noise = np.zeros((5, ))

    snr, rr_num, var, fr, fr2 = find_noise_features(data)
    features_noise[0] = snr
    features_noise[1] = rr_num
    features_noise[2] = var
    features_noise[3] = fr
    features_noise[4] = fr2
    features = extract_basic_features(data, 30000)
    features = np.hstack((features, features_noise.reshape(1, -1)))

    mean_ = np.array([15.96300284066109753667, 0.00412371298595770857, 38811.34497233365254942328,
                      0.48050717744965593115, 0.14397582347542958736])
    scale_ = np.array([4.22917401559752281770, 0.00093664880988427878, 62350.76443798459513345733,
                       0.15396567666240373873, 0.07085474966801086349])
    features_noise -= mean_
    features_noise /= scale_

    prediction = 0
    if features_noise[0] < -2.9:
        prediction = 3
    if features_noise[2] > 6.0:
        prediction = 3
    if features_noise[3] > 3.0:
        prediction = 3
    if features_noise[4] < -2.0:
        prediction = 3

    bst = xgb.Booster({'nthread': 4})
    bst.load_model("xgb.bin")

    dfeatures = xgb.DMatrix(features)
    prediction_prob = bst.predict(dfeatures)
    prediction = np.argmax(prediction_prob)

    return prediction

def run(data): 
    prediction = predict(data)
    print(prediction)

我想用我自己的数据集训练这个分类器。上面的模型是在https://www.physionet.org/challenge/2017/training2017.zip数据集上训练的。

查看上面的代码,您是否知道如何使用 Xgboost 训练模型。

这是我的思考步骤

  1. 计算featureszip 文件中的所有训练信号
  2. 计算feature_noise所有信号的上述代码
  3. 计算dfeatures每个信号的特征(我应该为每个信号还是一起计算所有信号)
  4. dfeatures使用 Xgboost训练所有信号(如何?)
  5. 存储 xgboost 模型

这是正确的步骤吗?

1个回答

我参加聚会可能有点晚了,但我在 CinC2017 的后续挑战中做了你所需要的,我们的算法在隐藏测试集上获得了第二好的成绩。我们的代码位于https://github.com/martinkropf/ecg-classification 论文位于https://iopscience.iop.org/article/10.1088/1361-6579/aae13e