本次跟着Coggle 30 Days of ML学习算法竞赛,而不是基于现成baseline来操作,预计重新熟悉并学习
- Pandas、Numpy 处理数据
- Sklearn、LightGBM 模型使用
- 构建特征工程、筛选特征
- NLP模型搭建
数据挖掘比赛为“糖尿病遗传风险检测挑战赛”,比赛报名地址:2022 iFLYTEK A.I.开发者大赛-讯飞开放平台
以下为打卡内容:
任务1:报名比赛- 步骤1:报名比赛2022 iFLYTEK A.I.开发者大赛-讯飞开放平台
- 步骤2:下载比赛数据(点击比赛页面的赛题数据)
- 步骤3:解压比赛数据,并使用pandas进行读取;
- 步骤4:查看训练集和测试集字段类型,并将数据读取代码写到博客;
import pandas as pd
train_df = pd.read_csv('./train.csv', encoding='gbk')
test_df = pd.read_csv('./test.csv', encoding='gbk')
print(train_df.shape, test_df.shape)
print(train_df.dtypes, test_df.dtypes)
任务2:比赛数据分析
- 步骤1:统计字段的缺失值,计算缺失比例;
- 通过缺失值统计,训练集和测试集的缺失值分布是否一致?
- 通过缺失值统计,有没有缺失比例很高的列?
- 步骤2:分析字段的类型;
- 有多少数值类型、类别类型?
- 你是判断字段类型的?
- 在博客中通过文字写出你的判断;
- 步骤3:计算字段相关性;
- 通过.corr()计算字段之间的相关性;
- 有哪些字段与标签的相关性最高?
- 尝试使用其他可视化方法将字段 与 标签的分布差异进行可视化;
# 缺失值计算 print(train_df.isnull().mean(0)) print(test_df.isnull().mean(0)) # 缺失值分布一致,舒张压列均缺失约4.9% # 分析字段类型 print(train_df.info()) print(test_df.info()) #计算特征相关性 corr = train_df.corr() print(corr) #相关性可视化 import seaborn as sns import matplotlib.pyplot as plt # 解决中文显示问题 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # plt.figure(figsize = (15,10)) heatmap = sns.heatmap(corr,cmap = 'Purples') plt.show() # 患有糖尿病标识与肱三头肌皮褶厚度、体重指数相关性较高
任务3:逻辑回归尝试
- 步骤1:导入sklearn中的逻辑回归;
- 步骤2:使用训练集和逻辑回归进行训练,并在测试集上进行预测;
- 步骤3:将步骤2预测的结果文件提交到比赛,截图分数;
- 步骤4:将训练集20%划分为验证集,在训练部分进行训练,在测试部分进行预测,调节逻辑回归的超参数;
- 步骤4:如果精度有提高,则重复步骤2和步骤3;
test_df['患有糖尿病标识'] = -1
data = pd.concat([train_df,test_df])
# 字符串转化数字
from sklearn.preprocessing import LabelEncoder
labelencoder = LabelEncoder()
data['糖尿病家族史'] = labelencoder.fit_transform( data['糖尿病家族史'])
#缺失值填充
data['舒张压'] = data['舒张压'].fillna(data['舒张压'].mean())
#逻辑回归尝试
from sklearn.linear_model import LogisticRegression as LR
X_train = data[data['患有糖尿病标识'] >= 0 ].drop(['患有糖尿病标识','编号'],axis = 1)
y_train = data[data['患有糖尿病标识'] >= 0 ]['患有糖尿病标识']
X_test = data[data['患有糖尿病标识'] < 0 ].drop(['患有糖尿病标识','编号'],axis = 1)
print(X_train.shape,y_train.shape,X_test.shape) # (5070, 8) (5070,) (1000, 8)
X_train.info()
model = LR()
model.fit(X_train,y_train)
y_test = model.predict(X_test)
test_df['label']=y_test
test_df.rename({'编号':'uuid'},axis = 1)[['uuid','label']].to_csv('submit.csv',index = False)
## 将训练集20%划分为验证集,在训练部分进行训练,在测试部分进行预测,调节逻辑回归的超参数
from sklearn.model_selection import train_test_split
X_train2,X_valid2,y_train2,y_valid2 = train_test_split(X_train,y_train,test_size = 0.2 )
print(X_train2.shape,y_train2.shape,X_valid2.shape,y_valid2.shape)
model = LR()
model.fit(X_train2,y_train2)
y_pred = model.predict(X_valid2)
from sklearn.metrics import f1_score
print(f1_score(y_pred,y_valid2)) #0.75
任务4:特征工程(使用pandas完成)
- 步骤1:统计每个性别对应的【体重指数】、【舒张压】平均值
- 步骤2:计算每个患者与每个性别平均值的差异;
- 步骤3:在上述基础上将训练集20%划分为验证集,使用逻辑回归完成训练,精度是否有提高?
- 步骤4:思考字段含义,尝试新的特征,将你的尝试写入博客;



