用隨機森林補全缺失值

2021-09-25 11:47:01 字數 1470 閱讀 8790

本篇部落格的知識和**全都**於此:寒小陽的部落格:泰坦尼克哈之災

一、這裡先說一下通常處理缺失值的幾種方法:

​ 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對袋...