泰坦尼克數(shù)據(jù)集訓(xùn)練集共有1309項秒啦,經(jīng)過數(shù)據(jù)預(yù)處理會產(chǎn)生feature(9個)與label標(biāo)簽字段(是否生存陶舞?1:是捡多,2:否)司抱,最后輸入多層感知器模型訓(xùn)練筐眷,之后進(jìn)行預(yù)測
1.下載數(shù)據(jù)集
所需模塊
下載地址
url='http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.xls'
設(shè)置文件存儲路徑:(要自己新建data文件夾路徑,不然會報錯不存在文件夾习柠,后面的文件名一定要寫上匀谣,雖然我們本地沒有該文件)
filepath='C:\Users\zhangsheng\Desktop\Untitled Folder\data\titanic3.xls'
判斷文件是否存在,不存在就會下載
if not os.path.isfile(filepath):
result=urllib.request.urlretrieve(url,filepath)
print('download:',result)
2.使用pandas 的DataFrame讀取數(shù)據(jù)并進(jìn)行預(yù)處理
導(dǎo)入所需的模塊资溃,并使用pandas的read_excel()方法把xls文件讀取到DataFrame
然后查看前兩項旅客數(shù)據(jù)
(注意這里先要安裝xlrs模塊武翎,要不然會報錯沒有該模塊)
上面字段的survival是label標(biāo)簽,也就是我們要預(yù)測的目標(biāo)溶锭,其余都是特征字段
并且ticket(船票號碼)和cabin(艙位號碼)與預(yù)測結(jié)果無關(guān)宝恶,將其忽略。
我們選擇一下字段到DataFrame中趴捅,并顯示前兩項
還有以下問題必須處理5姹小!9鞍蟆综芥!
name 姓名字段在訓(xùn)練時不需要,必須先刪除欺栗,但在預(yù)測階段會使用
age 有些項的age字段是null毫痕,必須將null改為平均值
fare 同age
sex 性別字段是文字征峦,需轉(zhuǎn)換為0和1
embarked 登船港口有三個分類 需使用One-Hot Encoding 轉(zhuǎn)換
3.數(shù)據(jù)預(yù)處理
-
使用drop方法 刪除name
df = all_df.drop(['name'],axis=1)
找出含有null值的字段
圖片.png
計算age的平均值 age_mean,然后將null值替換為平均值迟几,fare同理
圖片.png
性別字段是文字,使用map方法 轉(zhuǎn)換為0栏笆,1
將embarked字段轉(zhuǎn)換為一位有效編碼
查看轉(zhuǎn)換后的DataFrame
4.將DataFrame轉(zhuǎn)換為Array
第一個字段是label类腮,后面的是features
提取features和label
Label = ndarray[:,0] #冒號提取所有項,0字段是標(biāo)簽
Features = ndarray[:,1:]#冒號提取所有項蛉加,1:提取第一至最后字段蚜枢,即特征
查看前兩項:
5.將ndarray特征字段標(biāo)準(zhǔn)化
使用preprocessing.MinMaxScaler標(biāo)準(zhǔn)化,參數(shù)feature_range設(shè)置標(biāo)準(zhǔn)化的范圍(0针饥,1)
6.將數(shù)據(jù)分為訓(xùn)練集和測試集
按照8:2的比例厂抽,使用numpy.random.rand產(chǎn)生msk
定義數(shù)據(jù)預(yù)處理的函數(shù):將之前的預(yù)處理命令全部收集在函數(shù)中
對訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)預(yù)處理