心跳信号分类---(上)

​ ”明月如霜,好风如水,清景无限 “

为了能打上卡,文远硬冲了一手,没来得及认真看程序,不过也记录一下。来分析一下baseline。

天池心跳分类

首先是读取数据就不说了,数据的特色就是输入为序列数据,所以最好还是做一下处理,用split(’,’)来分割一下。

for i in range(1000):
    dd.iloc[i,:] = train.values[i][1].split(',')
dd

再看一下输出label。
在这里插入图片描述
再看看这个标签为1(八成有问题)的心跳序列:
在这里插入图片描述
看起来,波动的很剧烈啊,这个心跳数据应该是归一化了。

下面是数据预处理:

首先的经典地方就是,通过类型转换来减小内存,还是很值得模仿的。

def reduce_mem_usage(df):  ###类型转化,减少内存(下面是重点代码)
        if col_type != object:  ##  
            c_min = df[col].min()
            c_max = df[col].max()
            if str(col_type)[:3] == 'int':
                if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:
                    df[col] = df[col].astype(np.int8)
                elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:
                    df[col] = df[col].astype(np.int16)
                elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:
                    df[col] = df[col].astype(np.int32)
                elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:
                    df[col] = df[col].astype(np.int64)  
            else:
                if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:
                    df[col] = df[col].astype(np.float16)
                elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:
                    df[col] = df[col].astype(np.float32)
                else:
                    df[col] = df[col].astype(np.float64)
        else:
            df[col] = df[col].astype('category')

在这里插入图片描述
看下这个可以一说的地方:

x_train = train.drop(['id','label'], axis=1)
y_train = train['label']
x_test=test.drop(['id'], axis=1)

对于df数据的增删操作,与数组不同,并不会对原数据生效,直接重新赋值才会生效。
也就是说这样,才会改变原df:

train = train.drop(['id','label'], axis=1)

模型训练:

def abs_sum(y_pre,y_tru):
    y_pre=np.array(y_pre)
    y_tru=np.array(y_tru)
    loss=sum(sum(abs(y_pre-y_tru))) ## AE
    return loss

这里还是值得思考的,这是个分类问题,所以这种定义还是挺好的。如果是回归问题,一般用MSE或者RMSE还是比较多。

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))
​
    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[train_index], train_x.iloc[valid_index], train_y[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)
        test += test_pred
        score=abs_sum(val_y, val_pred)
        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
    
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_test = lgb_model(x_train, y_train, x_test)

这个代码里,可以说的地方有:OneHotEncoder编码,clf_name == “lgb” 模型为lightgbm,然后是params 参数优化,可以尝试下网格搜索或者是随机搜索,最后就是交叉验证的调整。

最后的输出结果提交的时候,记得把小数的都调整成0和1。当然验证是发现:
在这里插入图片描述
也就是说分类第0类到第3类都不是。好了最后记录一下天池的cdw安装第三方库的操作:

!pip install catboost

文章对你有帮助的话,记得点赞并将公众号设置成星标哦。源码

END

作者:不爱跑马的影迷不是好程序猿

   喜欢的话请关注点赞👇 👇👇 👇                     

图片

壹句: 北山移文

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 零基础入门数据挖掘-心跳信号分类预测是一门数据挖掘技术的课程,旨在帮助零基础的学习者了解数据挖掘的基本概念和技术,以及如何应用这些技术来预测心跳信号分类。该课程涵盖了数据预处理、特征提取、模型训练和评估等方面的内容,通过实践案例和练习,让学习者掌握数据挖掘的基本方法和技巧,提高数据分析和预测的能力。 ### 回答2: 数据挖掘是一种抽取数据中潜在信息的方法,通过对数据的深度分析,可以从海量的数据中发现异常趋势、模式和规律,从而为数据分析提供更多的洞见。心跳信号分类预测是一项基于数据挖掘技术的任务,其目标是对心跳信号进行分类,并预测出心脏病患者的风险。 在零基础学习数据挖掘时,需要掌握一些基本概念和技术。首先,需要了解数据预处理的基本方法,包括数据清洗、数据转换、数据集成和数据规约。数据挖掘的一项重要工作是特征选择,这是通过从原始数据中选取最具代表性的数据特征来提高模型的预测性能。特征选择的主要方法包括过滤法、包裹法和嵌入法。 数据挖掘中的常用算法包括决策树、KNN、朴素贝叶斯、神经网络和支持向量机等。 在进行心跳信号分类预测的情况下,常用的算法包括卷积神经网络(CNN)、长短期记忆网络(LSTM)和一些监督学习算法,如支持向量机(SVM)和K-最近邻(KNN)算法等。 在进行实际应用时,还需要注意如何选择正确的性能指标来评估分类模型的性能。如:召回率,精确率,F1得分等。实验操作和编程语言方面,可以学习使用Python等编程语言来实现数据挖掘模型,常用的数据挖掘工具包有Scikit-learn和Tensorflow等。 总之,零基础入门数据挖掘-心跳信号分类预测需要花费一定的时间和精力,同时需要有扎实的数理基础、编程技能和实际应用经验。在学习中,需要注重细节和思路的整理,尽可能摆脱机械性的模仿和应试心态,以寻找创新点和优化方案,提高模型的预测性能。 ### 回答3: 数据挖掘是一门快速发展的技术,随着人工智能的不断发展和应用,数据挖掘也逐渐成为一个备受关注的领域。在其中,心跳信号分类预测是一项重要的应用,因为它能够对人类的健康状况进行诊断和预测。 零基础入门数据挖掘-心跳信号分类预测,首先需要了解什么是数据挖掘。数据挖掘是一种从大量数据中提取到有用信息的过程,它可以帮助我们更好地理解数据或找出其中隐藏的模式。数据挖掘主要分为数据预处理、特征提取、数据建模和模型评估等过程。 对于心跳信号分类预测问题,我们需要从一定数量的数据样本中提取出有用的特征,并将其转换为模型可以处理的数字信息。这一过程需要对特征值进行筛选和处理,以确保数据的精度和可靠性。 建立好的数据模型需要进行训练,并从训练集中学习到解决问题的规律和模式,进而可以对新的数据进行预测和分类。模型的质量和准确性取决于训练集的质量和大小,以及选择的算法和模型。 在这个过程中,我们需要使用一些数据挖掘工具和算法,例如Python,R,SPSS等。这些工具可以帮助我们更有效地处理数据和构建数据模型。 总之,零基础入门数据挖掘-心跳信号分类预测需要一定的学习和实践,需要掌握一些基本的数据挖掘知识和技巧,才能达到良好的预测效果和应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值