《如何打一場數(shù)據(jù)挖掘賽事》入門版
—— 貢獻(xiàn)者:牧小熊、駱秀韜

一、準(zhǔn)備步驟
1.1 平臺注冊與比賽報(bào)名
賽事鏈接:
https://challenge.xfyun.cn/topic/info?type=diabetes&ch=ds22-dw-gzh02注冊(記得填寫個(gè)人信息)


點(diǎn)擊報(bào)名參賽,顯示成功報(bào)名


1.2 數(shù)據(jù)下載
數(shù)據(jù)獲取
官網(wǎng)下載數(shù)據(jù):下載數(shù)據(jù)及實(shí)名認(rèn)證。
詳細(xì)操作可查看:https://xj15uxcopw.feishu.cn/docx/doxcn11gwo7cEuAXWhCrDld4Inb請把數(shù)據(jù)文件和代碼文件放在同一個(gè)文件夾下,保證正常運(yùn)行
1.3 參考資料
python環(huán)境的搭建請參考:
Mac設(shè)備:Mac上安裝Anaconda最全教程 https://zhuanlan.zhihu.com/p/350828057 Windows設(shè)備:Anaconda超詳細(xì)安裝教程 https://blog.csdn.net/fan18317517352/article/details/123035625
二、實(shí)踐思路
本次比賽是一個(gè)數(shù)據(jù)挖掘賽,需要選手通過訓(xùn)練集數(shù)據(jù)構(gòu)建模型,然后對驗(yàn)證集數(shù)據(jù)進(jìn)行預(yù)測,預(yù)測結(jié)果進(jìn)行提交。
本題的任務(wù)是構(gòu)建一種模型,該模型能夠根據(jù)患者的測試數(shù)據(jù)來預(yù)測這個(gè)患者是否患有糖尿病。這種類型的任務(wù)是典型的二分類問題(患有糖尿病 / 不患有糖尿病),模型的預(yù)測輸出為 0 或 1 (患有糖尿病:1,未患有糖尿病:0)
機(jī)器學(xué)習(xí)中,關(guān)于分類任務(wù)我們一般會想到邏輯回歸、決策樹等算法,在這個(gè) Baseline 中,我們嘗試使用決策樹來構(gòu)建我們的模型。我們在解決機(jī)器學(xué)習(xí)問題時(shí),一般會遵循以下流程:

2.1 代碼實(shí)現(xiàn)
以下代碼,請?jiān)趈upyter notbook或python編譯器環(huán)境中實(shí)現(xiàn)
#安裝相關(guān)依賴庫 如果是windows系統(tǒng),cmd命令框中輸入pip安裝,參考上述環(huán)境配置
#!pip install sklearn
#!pip install pandas
#---------------------------------------------------
#導(dǎo)入庫
#----------------數(shù)據(jù)探索----------------
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
#數(shù)據(jù)預(yù)處理
data1=pd.read_csv('比賽訓(xùn)練集.csv',encoding='gbk')
data2=pd.read_csv('比賽測試集.csv',encoding='gbk')
#label標(biāo)記為-1
data2['患有糖尿病標(biāo)識']=-1
#訓(xùn)練集和測試機(jī)合并
data=pd.concat([data1,data2],axis=0,ignore_index=True)
#將舒張壓特征中的缺失值填充為-1
data['舒張壓']=data['舒張壓'].fillna(-1)
#----------------特征工程----------------
"""
將出生年份換算成年齡
"""
data['年齡']=2022-data['出生年份'] #換成年齡
"""
人體的成人體重指數(shù)正常值是在18.5-24之間
低于18.5是體重指數(shù)過輕
在24-27之間是體重超重
27以上考慮是肥胖
高于32了就是非常的肥胖。
"""
def BMI(a):
if a<18.5:
return 0
elif 18.5<=a<=24:
return 1
elif 24<a<=27:
return 2
elif 27<a<=32:
return 3
else:
return 4
data['BMI']=data['體重指數(shù)'].apply(BMI)
#糖尿病家族史
"""
無記錄
叔叔或者姑姑有一方患有糖尿病/叔叔或姑姑有一方患有糖尿病
父母有一方患有糖尿病
"""
def FHOD(a):
if a=='無記錄':
return 0
elif a=='叔叔或者姑姑有一方患有糖尿病' or a=='叔叔或姑姑有一方患有糖尿病':
return 1
else:
return 2
data['糖尿病家族史']=data['糖尿病家族史'].apply(FHOD)
"""
舒張壓范圍為60-90
"""
def DBP(a):
if 0<=a<60:
return 0
elif 60<=a<=90:
return 1
elif a>90:
return 2
else:
return a
data['DBP']=data['舒張壓'].apply(DBP)
#------------------------------------
#將處理好的特征工程分為訓(xùn)練集和測試集,其中訓(xùn)練集是用來訓(xùn)練模型,測試集用來評估模型準(zhǔn)確度
#其中編號和患者是否得糖尿病沒有任何聯(lián)系,屬于無關(guān)特征予以刪除
train=data[data['患有糖尿病標(biāo)識'] !=-1]
test=data[data['患有糖尿病標(biāo)識'] ==-1]
train_label=train['患有糖尿病標(biāo)識']
train=train.drop(['編號','患有糖尿病標(biāo)識','出生年份'],axis=1)
test=test.drop(['編號','患有糖尿病標(biāo)識','出生年份'],axis=1)
#----------------模型訓(xùn)練----------------
model = DecisionTreeClassifier()
model.fit(train, train_label)
y_pre=model.predict(test)
y_pre
#----------------結(jié)果輸出----------------
result=pd.read_csv('提交示例.csv')
result['label']=y_pre
result.to_csv('result-de.csv',index=False)
2.2 結(jié)果提交
在提交結(jié)果處提交,提交 預(yù)測結(jié)果.csv(程序生成的CSV文件),查看自己的成績排名




推薦閱讀
歡迎長按掃碼關(guān)注「數(shù)據(jù)管道」
評論
圖片
表情
