Task3 特征工程

特征工程概括

  1. 數(shù)據(jù)理解:主要在EDA階段完成,了解數(shù)據(jù)的性質(zhì):定類,定序胞锰,定距术幔,定比
  2. 數(shù)據(jù)清洗:提高數(shù)據(jù)質(zhì)量,主要包括
    1. 特征變換
    2. 缺失值處理
    3. 異常值處理
    4. 其他
  3. 特征構(gòu)造:增強(qiáng)數(shù)據(jù)表達(dá)砂缩,添加先驗(yàn)知識(shí)
  4. 特征選擇:降低噪聲
  5. 類別不平衡:

代碼

2.3 異常值處理

通過箱線圖去掉異常值。原理見https://www.zhihu.com/question/36172806

# 輸入數(shù)據(jù),列名和清洗的尺度挟冠,輸出異常值處理好的數(shù)據(jù)
def outliers_proc(data, col_name, scale=3):
    """
    用于清洗異常值,默認(rèn)用 box_plot(scale=3)進(jìn)行清洗
    :param data: 接收 pandas 數(shù)據(jù)格式
    :param col_name: pandas 列名
    :param scale: 尺度
    :return:
    """

    def box_plot_outliers(data_ser, box_scale):
        """
        利用箱線圖去除異常值
        :param data_ser: 接收 pandas.Series 數(shù)據(jù)格式
        :param box_scale: 箱線圖尺度袍睡,
        :return:
        """
        iqr = box_scale * (data_ser.quantile(0.75) - data_ser.quantile(0.25))
        val_low = data_ser.quantile(0.25) - iqr
        val_up = data_ser.quantile(0.75) + iqr
        rule_low = (data_ser < val_low)
        rule_up = (data_ser > val_up)
        return (rule_low, rule_up), (val_low, val_up)

    data_n = data.copy()
    data_series = data_n[col_name]
    rule, value = box_plot_outliers(data_series, box_scale=scale)
    index = np.arange(data_series.shape[0])[rule[0] | rule[1]]
    print("Delete number is: {}".format(len(index)))
    data_n = data_n.drop(index)
    data_n.reset_index(drop=True, inplace=True)
    print("Now column number is: {}".format(data_n.shape[0]))
    index_low = np.arange(data_series.shape[0])[rule[0]]
    outliers = data_series.iloc[index_low]
    print("Description of data less than the lower bound is:")
    print(pd.Series(outliers).describe())
    index_up = np.arange(data_series.shape[0])[rule[1]]
    outliers = data_series.iloc[index_up]
    print("Description of data larger than the upper bound is:")
    print(pd.Series(outliers).describe())
    
    fig, ax = plt.subplots(1, 2, figsize=(10, 7))
    sns.boxplot(y=data[col_name], data=data, palette="Set1", ax=ax[0])
    sns.boxplot(y=data_n[col_name], data=data_n, palette="Set1", ax=ax[1])
    return data_n

特征構(gòu)造

1. 構(gòu)造統(tǒng)計(jì)量特征

先使用groupby分組知染,之后計(jì)算某列的各種統(tǒng)計(jì)量

# 計(jì)算某品牌的銷售統(tǒng)計(jì)量,同學(xué)們還可以計(jì)算其他特征的統(tǒng)計(jì)量

# 這里要以 train 的數(shù)據(jù)計(jì)算統(tǒng)計(jì)量
Train_gb = Train_data.groupby("brand")
all_info = {}
for kind, kind_data in Train_gb:
    info = {}
    kind_data = kind_data[kind_data['price'] > 0]
    info['brand_amount'] = len(kind_data)
    info['brand_price_max'] = kind_data.price.max()
    info['brand_price_median'] = kind_data.price.median()
    info['brand_price_min'] = kind_data.price.min()
    info['brand_price_sum'] = kind_data.price.sum()
    info['brand_price_std'] = kind_data.price.std()
    info['brand_price_average'] = round(kind_data.price.sum() / (len(kind_data) + 1), 2)
    all_info[kind] = info
brand_fe = pd.DataFrame(all_info).T.reset_index().rename(columns={"index": "brand"})
data = data.merge(brand_fe, how='left', on='brand')
2. 時(shí)間特征

使用pd.to_datetime

# 使用時(shí)間:data['creatDate'] - data['regDate']斑胜,反應(yīng)汽車使用時(shí)間控淡,一般來說價(jià)格與使用時(shí)間成反比
# 不過要注意,數(shù)據(jù)里有時(shí)間出錯(cuò)的格式止潘,所以我們需要 errors='coerce'
data['used_time'] = (pd.to_datetime(data['creatDate'], format='%Y%m%d', errors='coerce') - 
                            pd.to_datetime(data['regDate'], format='%Y%m%d', errors='coerce')).dt.days
3. 地理信息
# 從郵編中提取城市信息掺炭,相當(dāng)于加入了先驗(yàn)知識(shí)
data['city'] = data['regionCode'].apply(lambda x : str(x)[:-3])
data = data
4. 數(shù)據(jù)分桶

使用pd.cut

# 數(shù)據(jù)分桶 以 power 為例
# 這時(shí)候我們的缺失值也進(jìn)桶了,
# 為什么要做數(shù)據(jù)分桶呢凭戴,原因有很多涧狮,= =
# 1. 離散后稀疏向量?jī)?nèi)積乘法運(yùn)算速度更快,計(jì)算結(jié)果也方便存儲(chǔ)么夫,容易擴(kuò)展者冤;
# 2. 離散后的特征對(duì)異常值更具魯棒性,如 age>30 為 1 否則為 0档痪,對(duì)于年齡為 200 的也不會(huì)對(duì)模型造成很大的干擾涉枫;
# 3. LR 屬于廣義線性模型,表達(dá)能力有限钞它,經(jīng)過離散化后拜银,每個(gè)變量有單獨(dú)的權(quán)重殊鞭,這相當(dāng)于引入了非線性,能夠提升模型的表達(dá)能力尼桶,加大擬合操灿;
# 4. 離散后特征可以進(jìn)行特征交叉,提升表達(dá)能力泵督,由 M+N 個(gè)變量編程 M*N 個(gè)變量趾盐,進(jìn)一步引入非線形,提升了表達(dá)能力小腊;
# 5. 特征離散后模型更穩(wěn)定救鲤,如用戶年齡區(qū)間,不會(huì)因?yàn)橛脩裟挲g長(zhǎng)了一歲就變化

# 當(dāng)然還有很多原因秩冈,LightGBM 在改進(jìn) XGBoost 時(shí)就增加了數(shù)據(jù)分桶本缠,增強(qiáng)了模型的泛化性

bin = [i*10 for i in range(31)]
data['power_bin'] = pd.cut(data['power'], bin, labels=False)
data[['power_bin', 'power']].head()
5. 特征歸一化/標(biāo)準(zhǔn)化

對(duì)于NN 和LR模型,還需要把特征歸一化/標(biāo)準(zhǔn)化
使用公式 x - min / max - min

特征選擇

1.過濾式
2. 包裹式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末入问,一起剝皮案震驚了整個(gè)濱河市丹锹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芬失,老刑警劉巖楣黍,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異棱烂,居然都是意外死亡租漂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門颊糜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哩治,“玉大人,你說我怎么就攤上這事芭析∶” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵馁启,是天一觀的道長(zhǎng)驾孔。 經(jīng)常有香客問我,道長(zhǎng)惯疙,這世上最難降的妖魔是什么翠勉? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮霉颠,結(jié)果婚禮上对碌,老公的妹妹穿的比我還像新娘。我一直安慰自己蒿偎,他們只是感情好朽们,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布怀读。 她就那樣靜靜地躺著,像睡著了一般骑脱。 火紅的嫁衣襯著肌膚如雪菜枷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天叁丧,我揣著相機(jī)與錄音啤誊,去河邊找鬼。 笑死拥娄,一個(gè)胖子當(dāng)著我的面吹牛蚊锹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播稚瘾,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼牡昆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了摊欠?” 一聲冷哼從身側(cè)響起迁杨,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凄硼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捷沸,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摊沉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痒给。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片说墨。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖苍柏,靈堂內(nèi)的尸體忽然破棺而出尼斧,到底是詐尸還是另有隱情,我是刑警寧澤试吁,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布棺棵,位于F島的核電站,受9級(jí)特大地震影響熄捍,放射性物質(zhì)發(fā)生泄漏烛恤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一余耽、第九天 我趴在偏房一處隱蔽的房頂上張望缚柏。 院中可真熱鬧,春花似錦碟贾、人聲如沸币喧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杀餐。三九已至干发,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怜浅,已是汗流浹背铐然。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恶座,地道東北人搀暑。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像跨琳,于是被迫代替她去往敵國和親自点。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • day3:今天進(jìn)行的是特征工程部分脉让,也就是對(duì)一些特征進(jìn)行處理桂敛,構(gòu)造適合各種模型的數(shù)據(jù)。 特征工程的目標(biāo) 對(duì)于特征進(jìn)...
    醬油啊_閱讀 999評(píng)論 0 0
  • 常見的特征工程包括: 異常處理: 1.通過箱線圖(或 3-Sigma)分析刪除異常值溅潜;2.BOX-COX 轉(zhuǎn)換(處...
    上善若水弱水三千閱讀 331評(píng)論 0 0
  • 本次主要學(xué)習(xí)的是特征工程的相關(guān)內(nèi)容 Datawhale 零基礎(chǔ)入門數(shù)據(jù)挖掘-Task3 特征工程 常見的特征工程包...
    YAN_DUDU閱讀 230評(píng)論 0 0
  • 1. 數(shù)據(jù)分箱 一般在建立分類模型時(shí)术唬,需要對(duì)連續(xù)變量離散化,特征離散化后滚澜,模型會(huì)更穩(wěn)定粗仓,降低了模型過擬合的風(fēng)險(xiǎn)。比...
    100MHz閱讀 337評(píng)論 0 0
  • “數(shù)據(jù)決定了機(jī)器學(xué)習(xí)的上限设捐,而算法只是盡可能逼近這個(gè)上限”借浊,這里的數(shù)據(jù)指的就是經(jīng)過特征工程得到的數(shù)據(jù)。特征工程指的...
    MackXu閱讀 210評(píng)論 0 0