task1:赛题理解学习笔记
1、心跳信号分类预测赛题理解
该数据来自某平台心电图数据记录,总数据量超过20万,主要为1列心跳信号序列数据,其中每个样本的信号序列采样频次一致,长度相等。为了保证比赛的公平性,将会从中抽取10万条作为训练集,2万条作为测试集A,2万条作为测试集B,同时会对心跳信号类别(label)信息进行脱敏。
通过这道赛题来引导大家走进医疗大数据的世界,主要针对于于竞赛新人进行自我练习,自我提高。
- 本题为传统的数据挖掘问题,通过数据科学以及机器学习深度学习的办法来进行建模得到结果。
- 本题为典型的多分类问题,心跳信号一共有4个不同的类别
- 主要应用xgb、lgb、catboost,以及pandas、numpy、matplotlib、seabon、sklearn、keras等等数据挖掘常用库或者框架来进行数据挖掘任务。
2、数据概况
train.csv
- id 为心跳信号分配的唯一标识
- heartbeat_signals 心跳信号序列(数据之间采用“,”进行分隔)
- label 心跳信号类别(0、1、2、3)
testA.csv
- id 心跳信号分配的唯一标识
- heartbeat_signals 心跳信号序列(数据之间采用“,”进行分隔)
3、对不懂的包的查询
3.1Python的gc模块:
python对于垃圾回收,采取的是引用计数为主,标记-清除+分代回收为辅的回收策略。对于循环引用的情况,一般的自动垃圾回收方式肯定是无效了,这时候就需要显式地调用一些操作来保证垃圾的回收和内存不泄露。这就要用到python内建的垃圾回收模块gc模块。详细介绍:
链接: https://www.cnblogs.com/franknihao/p/7326849.html.
3.2Python中的lightgbm模块
LightGBM 是一个梯度 boosting 框架, 使用基于学习算法的决策树. 它是分布式的, 高效的, 它具有以下优势:
1、速度和内存使用的优化
----减少分割增益的计算量
----通过直方图的相减来进行进一步的加速
减少内存的使用 减少并行学习的通信代价
2、稀疏优化
3、准确率的优化
----Leaf-wise (Best-first) 的决策树生长策略
----类别特征值的最优分割
4、网络通信的优化
5、并行学习的优化
----特征并行
----数据并行
----投票并行
6、GPU 支持可处理大规模数据
https://lightgbm.apachecn.org/#/docs/2
3.3Python中tqdm模块的用法
tqdm是Python中专门用于进度条美化的模块,通过在非while的循环体内嵌入tqdm,可以得到一个能更好展现程序运行过程的提示进度条。
tqdm中的tqdm()是实现进度条美化的基本方法,在for循环体中用tqdm()包裹指定的迭代器或range()即可,下面是两个简单的例子:
from tqdm import tqdm
import time
text =""
for char in tqdm(["a","b","c","d"]):
time.sleep=(0.25)
text = text+char
print(text)
import time
from tqdm import trange
for i in trange(100):
time.sleep(0.01)
3.4from sklearn.preprocessing import OneHotEncoder
OneHotEncoder独热编码:
独热码,在英文文献中称做 one-hot code, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。举例如下: 假如有三种颜色特征:红、黄、蓝。 在利用机器学习的算法时一般需要进行向量化或者数字化。那么你可能想令 红=1,黄=2,蓝=3. 那么这样其实实现了标签编码,即给不同类别以标签。然而这意味着机器可能会学习到“红<黄<蓝”,但这并不是我们的让机器学习的本意,只是想让机器区分它们,并无大小比较之意。所以这时标签编码是不够的,需要进一步转换。因为有三种颜色状态,所以就有3个比特。
即红色:1 0 0 ,黄色: 0 1 0,蓝色:0 0 1 。如此一来每两个向量之间的距离都是根号2,在向量空间距离都相等,所以这样不会出现偏序性,基本不会影响基于向量空间度量算法的效果。
独热编码用来解决类别型数据的离散值问题。
from sklearn import preprocessing
enc = preprocessing.OneHotEncoder()
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]) # fit来学习编码
a=enc.transform([[0, 1, 3]]).toarray()
print(a)
输出结果:
数据矩阵是4*3,即4个数据,3个特征维度。
观察上边的数据矩阵,第一列为第一个特征维度,有两种取值0\1. 所以对应编码方式为10 、01
同理,第二列为第二个特征维度,有三种取值0\1\2,所以对应编码方式为100、010、001
同理,第三列为第三个特征维度,有四中取值0\1\2\3,所以对应编码方式为1000、0100、0010、0001
再来看要进行编码的参数[0 , 1, 3], 0作为第一个特征编码为10, 1作为第二个特征编码为010, 3作为第三个特征编码为0001. 故此编码结果为 1 0 0 1 0 0 0 0 1