機器學習實戰的特徵工程主要包含資料預處理、特徵構建、特徵選擇三步,首先來介紹資料預處理。
我選擇python作為工具,並將主要用到pandas、numpy等資料工具庫。載入庫:
import pandas as pd
import numpy as np
(1)檢視資料的行數和列數
print("train shape:",train.shape)
(2)檢視資料的標籤
print("train columns:",train.columns)
(3)檢視各字段的資訊(大小、資料型別)
print("檢視各字段的資訊:\n"),train.info() #不需要print
(4)檢視資料描述(資料長度、均值、標準差、極大值、極小值、四分位點)
print("train describe:\n", train.describe())
(5)檢視本題的label
print('本題的label是:',set(train.columns)-set(test.columns))
如果觀察資料時發現在某些應該是int或float等數值型的列的型別是object,表明存在錯誤資料,需要觀察後進行處理。
(1)將內容為"\\n"的髒資料替換為-1
train['column_i'] = train['column_i'].replace("\\n",-1)
(2)將格式為'str'的資料轉化為'float'型
train['column_i'] = train['column_i'].astype('float')
(1)檢視缺失值所佔比例
print("缺失值比例:", len(train['column_i'][pd.isnull(train['column_i'])]) / len(train['column_i']))
(2)刪除包含缺失值的任意行
train = train.dropna()
(3)用0/-1/均值/眾數/中位數填補
train = train.fillna(0)
train = train.fillna(-1)
train['column_i'] = train['column_i'].fillna(train['column_i'].mean()) #均值
train['column_i'] = train['column_i'].fillna(train['column_i'].mode()) #眾數
train['column_i'] = train['column_i'].fillna(train['column_i'].median()) #中位數
train['column_i'] = train['column_i'].fillna(method='pad') #前乙個非缺失值
train['column_i'] = train['column_i'].fillna(method='bfill') #後乙個非缺失值
由於測量誤差或實驗誤差,原始資料中可能會存在異常值。檢測異常值最常見的方法是資料視覺化,另外也可以根據一些規則來判定異常值,如將超出資料5%或95%的值視為異常值、距均值超過四分衛距兩倍的值看作異常值等等。
(1)min-max標準化
也稱離差標準化,將資料對映到0~1範圍之內處理,對於方差非常小的屬性可以增強其穩定性,公式為:
train['column_i'] = (train['column_i']-train['column_i'].min())/(train['column_i'].max()-train['column_i'].min())
(2)one-hot編碼
將指定列進行one-hot編碼,並合併到原dataframe中。
train = train.join(pd.get_dummies(train['gender']))
(3)對映編碼
將無實際意義的離散值對映到0~n的範圍內。
# 定義兩個字典,用於對映
label2data = dict(zip(range(0,len(set(train['column_i']))),sorted(list(set(train['column_i'])))))
data2label = dict(zip(sorted(list(set(train['column_i']))),range(0,len(set(train['column_i'])))))
train['column_i'] = train['column_i'].map(data2label) #編碼
train['column_i'] = train['column_i'].map(label2data) #解碼
機器學習實戰 特徵工程之特徵構建
特徵構建是指通過研究原始資料樣本,結合機器學習實戰經驗和相關領域的專業知識,思考問題的潛在形式和資料結構,人工創造出新的特徵,而這些特徵對於模型訓練又是有益的並且具有一定的工程意義。特徵構建的方式主要有單列操作 多列操作 分組 聚合操作這三種。在pandas庫中,主要利用map 函式進行單列的操作。...
機器學習特徵工程之特徵預處理
通過特定的統計方法 數學方法 講資料轉換成演算法要求的資料。數值型資料 歸一化標準化 缺失值類別型資料 one hot編碼 時間型別 時間的切分 在對資料進行異常值 缺失值 資料轉換等處理後,我們需要從當前資料集中選出有意義的特徵,然後輸入到演算法模型中進行訓練。對資料集進行特徵選擇主要基於以下幾方...
機器學習 特徵工程之特徵提取
第二部分 特徵提取 備註 1.資料決定了機器學習的上限,而演算法只是盡可能逼近這個上限 這句話很好的闡述了資料在機器學習中的重要性。大部分直接拿過來的資料都是特徵不明顯的 沒有經過處理的或者說是存在很多無用的資料,那麼需要進行一些特徵處理,特徵的縮放等等,滿足訓練資料的要求。2.特徵工程的過程 從資...