本篇部落格的知識和**全都**於此:寒小陽的部落格:泰坦尼克哈之災
一、這裡先說一下通常處理缺失值的幾種方法:
i)如果缺失的樣本佔總數極大,我們可能就直接捨棄了;因為如果作為特徵加入的話,可能反倒帶入噪音,影響最後的結果
ii)如果缺值的樣本適中,且為非連續值特徵屬性,我們可以把nan作為乙個新類別,加入到類別特徵中
iii)如果缺值的樣本適中,且為連續值特徵屬性,有時候可以考慮給定乙個step(比如這裡的age,我們可以考慮每隔2/3歲為乙個步長),然後把它離散化,之後把nan作為乙個type加到屬性類目中
iv)如果缺失值得個數不是特別多,那我們也可以試著根據已有得值,擬合一下資料,補充上去
二、我以kaggle上的經典入門題目:鐵達尼號之災為例來分享一下用隨機森林來補全缺失值的方法。
1)先來描述一下資料,資料共有12個特徵如下:
其中5個物件型特徵,7個數值型特徵;7個數值型特徵中passengerid和survived特徵暫時派不上用場,所以最後放到隨機森林裡的特徵也就是剩下的5個:『age』,『fare』,『parch』,『sibsp』,『pclass』。
2)**如下:
from sklearn.ensemble import randomforestregressor
defset_missing_ages
(df)
:#把數值型特徵都放到隨機森林裡面去
age_df=df[
['age'
,'fare'
,'parch'
,'sibsp'
,'pclass']]
known_age = age_df[age_df.age.notnull()]
.as_matrix(
) unknown_age = age_df[age_df.age.isnull()]
.as_matrix(
) y=known_age[:,
0]#y是年齡,第一列資料
x=known_age[:,
1:]#x是特徵屬性值,後面幾列
rfr=randomforestregressor(random_state=
0,n_estimators=
2000
,n_jobs=-1
)#根據已有資料去擬合隨機森林模型
rfr.fit(x,y)
#**缺失值
predictedages = rfr.predict(unknown_age[:,
1:])
#填補缺失值
df.loc[
(df.age.isnull())
,'age'
]= predictedages
return df,rfr
Pandas 資料庫互動 刪除缺失值 補全缺失值
1.使用流行的python的sql工具包sqlalchemy,它能簡化你的資料庫操作。2.同時,pandas提供了乙個read sql函式,允許你從通用的sqlalchemy連線中輕鬆地讀取資料 3.在anaconda中,已經預設安裝了sqlalchemy,可以直接使用 import sqlalch...
Pandas中loc用法 索引 補全缺失值
loc 通過行標籤索引行資料 loc 1 表示索引的是第1行 index 是整數 import pandas as pd data 1,2,3 4,5,6 index 0,1 columns a b c df pd.dataframe data data,index index,columns co...
用隨機森林做特徵選擇
關於隨機森林的介紹,可見本部落格中 首先提出兩個指標,特徵重要性和分類精確度。一.特徵重要性 對於隨機森林中的一顆決策樹,其訓練資料集是使用bagging方法得到的,即套袋法,還有大約1 3的袋外資料我們可以用它進行特徵重要性的度量,假設針對某個特徵x,我們利用套袋法建立了一顆決策樹t,然後用t對袋...