我是靠谱客的博主 认真夏天,最近开发中收集的这篇文章主要介绍数据挖掘之心电图心跳信号分类数据预处理模型训练,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数据挖掘之心电图心跳信号分类@TOC

数据来源:天池
https://tianchi.aliyun.com/competition/entrance/531883/introduction

  1. 赛题理解
    目的:根据心电图感应数据预测心跳信号,
    其中心跳信号对应正常病例以及受不同心律不齐和心肌梗塞影响的病例(4种),
    问题:4分类,有监督学习
    数据特征:
    train:
    id 为心跳信号分配的唯一标识
    heartbeat_signals 心跳信号序列(数据之间采用“,”进行分隔)
    标签:abel 心跳信号类别(0、1、2、3)
    test:
    id 心跳信号分配的唯一标识
    heartbeat_signals 心跳信号序列(数据之间采用“,”进行分隔)
import pandas as pd
train=pd.read_csv('train.csv')
test=pd.read_csv('testA.csv')

数据预处理

数据分割

def split_data(data,predict=False):
    data_=data.heartbeat_signals.str.split(',',expand=True)
    data_.columns=['s_'+str(i) for i in range(data_.shape[1])]
    data_=data_[['s_'+str(i) for i in range(data_.shape[1])]].astype(float)
    data_['id']=data.id
    data_.set_index('id')
    if predict:
        print(data_.shape)
        data_.to_csv('test_.csv')
        return data_
    else:
        data_['label']=data.label
        data_.to_csv('test_.csv')
        print(data_.shape)
        return data_  
train=split_data(train)
test=split_data(test,predict=True)

训练数据/测试数据准备

x_train=train.iloc[:,:-2]
y_train=train.iloc[:,-1]
x_test=test.iloc[:,:-1]

删除唯一值列

def delete_unique(data):
    for i in data.columns:
        if data[i].nunique()==1:
            print(i)
            data.drop(i,axis=1,inplace=True)
    return data
train=delete_unique(train)# 无只有一个值的列
test=test[train.columns[:-1]]

查看缺失值

模型训练

评估指标 abs-sum

def abs_sum(y_pre,y_tru):
    y_pre=np.array(y_pre)#此处为预测概率
    y_tru=np.array(y_tru)
    loss=sum(sum(abs(y_true-y_pr)))

2.2 交叉验证

def cv_model(clf,train_x,train_y,test_x,clf_name):
    folds=5
    seed=2021
    kf=KFold(n_splits=folds,shuffle=True,random_state=seed)
    test=np.zeros((test_x.shape[0],4))# n行4列的0矩阵,用于保存每个样本标签概率
    cv_scores=[]
    onehot_encoder=OneHotEncoder(sparse=False)
    for i ,(train_index,valid_index) in enumerate(kf.split(train_x,train_y)):
        print('************************************ {} ************************************'.format(str(i+1)))
        trn_x,trn_y,val_x,val_y=train_x.iloc[train_index],train_y.iloc[train_index],train_x.iloc[valid_index],train_y.iloc[valid_index]
        if clf_name=='lgb':
            train_matrix=clf.Dataset(trn_x,label=trn_y)
            valid_matrix=clf.Dataset(val_x,label=val_y)
            params={
                'boosting_type':'gbdt'
                ,'objective':'multiclass'
                ,'num_class':4
                ,'num_leaves':2**5
                ,'feature_fraction':0.8
                ,'bagging_fraction':0.8
                ,'bagging_freq':4
                ,'learning_rate':0.1
                ,'seed':seed
                ,'nthread':28
                ,'n_jobs':24
                ,'verbose':-1,
            }
            model=clf.train(params,train_set=train_matrix,valid_sets=valid_matrix
                            ,num_boost_round=2000
                            ,verbose_eval=100
                           ,early_stopping_rounds=200)
            val_pred=model.predict(val_x,num_iteration=model.best_iteration)
            test_pred=model.predict(test_x,num_iteration=model.best_iteration)
            val_y=np.array(val_y).reshape(-1,1)
            val_y=onehot_encoder.fit_transform(val_y)
            print('预测概率矩阵:')
            print(test_pred.shape)
            print(test_pred)
            test+=test_pred
            score=abs_sum(val_pred,val_y)
            cv_scores.append(score)
            print(cv_scores)
    print("%s_scotrainre_list:" % clf_name, cv_scores)
    print("%s_score_mean:" % clf_name, np.mean(cv_scores))
    print("%s_score_std:" % clf_name, np.std(cv_scores))
    test=test/kf.n_splits

    return test

lightgbm

def lgb_model(x_train, y_train, x_test):
    lgb_test = cv_model(lgb, x_train, y_train, x_test, "lgb")
    return lgb_test    
lgb=lgb_model(x_train,y_train,x_test)   

结果

temp=pd.DataFrame(lgb)
result=pd.read_csv('sample_submit.csv')
result['label_0']=temp[0]
result['label_1']=temp[1]
result['label_2']=temp[2]
result['label_3']=temp[3]
result.to_csv('submit.csv',index=False)

最后

以上就是认真夏天为你收集整理的数据挖掘之心电图心跳信号分类数据预处理模型训练的全部内容,希望文章能够帮你解决数据挖掘之心电图心跳信号分类数据预处理模型训练所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部