資料探勘專案(二)

2021-09-11 22:28:20 字數 3036 閱讀 7105

【特徵工程(2天)】

目標:對資料特徵進行衍生和進行特徵挑選。

包括但不限於:特徵衍生,特徵挑選。

分別用iv值和隨機森林等進行特徵選擇……以及你能想到特徵工程處理。

特徵選擇( feature selection )也稱特徵子集選擇( feature subset selection , fss ),或屬性選擇( attribute selection )。是指從已有的m個特徵(feature)中選擇n個特徵使得系統的特定指標最優化,是從原始特徵中選擇出一些最有效特徵以降低資料集維度的過程,是提高學習演算法效能的乙個重要手段。

iv值進行特徵選擇

import math

import numpy as np

from scipy import stats

from sklearn.utils.multiclass import type_of_target

def woe(x, y, event=1):

res_woe =

iv_dict = {}

for feature in x.columns:

x = x[feature].values

# 1) 連續特徵離散化

if type_of_target(x) == 'continuous':

x = discrete(x)

# 2) 計算該特徵的woe和iv

# woe_dict, iv = woe_single_x(x, y, feature, event)

woe_dict, iv = woe_single_x(x, y, feature, event)

iv_dict[feature] = iv

return iv_dict

def discrete(x):

# 使用5等分離散化特徵

res = np.zeros(x.shape)

for i in range(5):

point1 = stats.scoreatpercentile(x, i * 20)

point2 = stats.scoreatpercentile(x, (i + 1) * 20)

x1 = x[np.where((x >= point1) & (x <= point2))]

mask = np.in1d(x, x1)

res[mask] = i + 1 # 將[i, i+1]塊內的值標記成i+1

return res

def woe_single_x(x, y, feature,event = 1):

# event代表**正例的標籤

event_total = sum(y == event)

non_event_total = y.shape[-1] - event_total

iv = 0

woe_dict = {}

for x1 in set(x): # 遍歷各個塊

y1 = y.reindex(np.where(x == x1)[0])

event_count = sum(y1 == event)

non_event_count = y1.shape[-1] - event_count

rate_event = event_count / event_total

rate_non_event = non_event_count / non_event_total

if rate_event == 0:

rate_event = 0.0001

# woei = -20

elif rate_non_event == 0:

rate_non_event = 0.0001

# woei = 20

woei = math.log(rate_event / rate_non_event)

woe_dict[x1] = woei

iv += (rate_event - rate_non_event) * woei

return woe_dict, iv

import warnings

warnings.filterwarnings("ignore")

iv_dict = woe(x_train, y_train)

iv = sorted(iv_dict.items(), key = lambda x:x[1],reverse = true)

iv

隨機森林挑選特徵

import warnings

warnings.filterwarnings("ignore")

from sklearn.model_selection import gridsearchcv

from sklearn.ensemble import randomforestclassifier

# 觀察預設引數的效能

rf0 = randomforestclassifier(oob_score=true, random_state=2333)

rf0.fit(x_train, y_train)

print('袋外分數:', rf0.oob_score_)

model_metrics(rf0, x_train, x_test, y_train, y_test)

rf = randomforestclassifier(n_estimators=120, max_depth=9, min_samples_split=50,

min_samples_leaf=20, max_features = 9,oob_score=true, random_state=2333)

rf.fit(x_train, y_train)

print('袋外分數:', rf.oob_score_)

model_metrics(rf, x_train, x_test, y_train, y_test)

需要學習了解的東西太多。虛心借鑑前輩的力量。

參考原文:

資料探勘專案(一)

第一次實踐資料探勘。虛心學習。基於機器學習的資料分析模型的建立,主要分為以下幾步 資料獲取 資料預處理 模型選擇 資料統一化 模型建立 模型結果分析 首先要對資料進行評估,資料的大小來決定使用工具。本資料為金融資料,目的為 貸款使用者是否會逾期。匯入資料 import pandas as pd im...

資料探勘專案(五)

目標任務 模型調優 使用網格搜尋法對5個模型進行調優 調參時採用五折交叉驗證的方式 並進行模型評估,記得展示 的執行結果。網格搜尋是一種調參手段 窮舉搜尋 在所有候選的引數選擇中,通過迴圈遍歷,嘗試每一種可能性,表現最好的引數就是最終的結果。其原理就像是在陣列裡找最大值。為什麼叫網格搜尋?以有兩個引...

資料探勘 如何做資料探勘專案

筆者鼓勵致力於從事資料行業的去參加一些人工智慧,機器學習的培訓,然後有人說 其實很多企業不喜歡培訓出來的人,認為培訓不貼近實際,紙上談兵。我倒不這麼看,其實即使在企業內乾資料探勘的人,很多也出不了活,這個不僅僅涉及業務和技術,更是管理上的問題。任正非說,華為最後能留下來的財富只有兩樣 一是管理框架 ...