基於處理好的資料--data.csv
data=pd.read_csv('data.csv',encoding='gbk')
y=data['status']
x_cl=data.drop('status',axis=1)
# 計算 iv 函式
def cal_iv(x, y, n_bins=6, null_value=np.nan,):
# 剔除空值
x = x[x != null_value]
# 若 x 只有乙個值,返回 0
if len(x.unique()) == 1 or len(x) != len(y):
return 0
if x.dtype == np.number:
# 數值型變數
if x.nunique() > n_bins:
# 若 nunique 大於箱數,進行分箱
x = pd.qcut(x, q=n_bins, duplicates='drop')
# 計算iv
groups = x.groupby([x, list(y)]).size().unstack().fillna(0)
t0, t1 = y.value_counts().index
groups = groups / groups.sum()
not_zero_index = (groups[t0] > 0) & (groups[t1] > 0)
groups['iv_i'] = (groups[t0] - groups[t1]) * np.log(groups[t0] / groups[t1])
iv = sum(groups['iv_i'])
return iv
from sklearn.ensemble import randomforestclassifier
rf = randomforestclassifier()
rf.fit(x_cl, y)
rf_impc = pd.series(rf.feature_importances_, index=x_cl.columns).sort_values(ascending=false)
# 篩選 重要性前十五 個特徵
imp_fea_rf = rf_impc.index[:15]
# 合併特徵並篩選出有用特徵
imp_fea = list(set(imp_fea_iv) | set(imp_fea_rf))
x_imp = x_cl[imp_fea]
x_imp.shape
資料探勘專案(2)特徵選擇
此次進行特徵選擇的資料還是上次用到的金融資料並 貸款使用者是否會逾期。此次資料為了排除缺失值對資料的影響,將所有缺失的樣本資料進行刪除,並刪除了幾個對資料分類無影響的變數,最後保留1534 86的資料量。1.刪除方差較小的特徵,也就是所謂的不發散的特徵,因為這些特徵在所有的資料中變化量很小或者幾乎沒...
原 文字挖掘 特徵選擇
特徵選擇有很多方法,看了很多資料後,我總結了以下幾種,以後有新內容會隨時修改 1.df 基於文件頻率的特徵提取方法 概念 df document frequency 指出現某個特徵項的文件的頻率。步驟 1 從訓練語料中統計出保函某個特徵的文件頻率 個數 2 根據設定的閾值 min max 當該特徵的...
資料探勘 ctr特徵
訓練集分成k fold,用其他k 1 fold計算ctr,然後merge給第k個fold,遍歷k次。然後訓練集整體計算ctr,再merge給測試集。def ctr fea train,test,feature for fea in feature print fea temp train label...