如何運用批次輸入、多處理技術加速特徵工程

閱讀時間約 9 分鐘

How to utilize batch input and multi-processing techniques to accelerate feature engineering?

Image Creator from Microsoft Bing

Image Creator from Microsoft Bing

問題

在進行特徵工程的過程中,我們通常需要處理各種各樣的數據,並轉換它們成有意義的特徵,以供後續的模型訓練和預測使用。然而,當數據集過於龐大,尤其是當記憶體限制造成RAM不足時,這個過程變得困難重重。這不僅影響效能,也可能阻礙我們進行更深入的特徵工程實驗。

解決方案:分割與多處理技術

為了克服這個效能問題,我們需要尋找解決方法,讓特徵工程能在有限的資源下順利進行。以下是我所採取的解決方案:

1. 數據分割與存儲

在進行 feature engineering 之前,我首先將原始數據集進行分割,按照特定的 ID 進行切割,將每個子集分別存儲成 pickle 檔案。這個步驟也須考量後續的feature engineering 內容,這次遇到的處理是以 group by ID 的方式進行,因此在這個步驟也依 ID 進行分割。這樣做的好處不僅有助於減少單次操作時的內存使用量,還能夠提高之後多處理的效能。

2. 批次處理(batch)與多處理(multiprocess)

在分割好數據後,我們使用批次(batch)的方式進行feature engineering。這意味著我們只處理一小部分數據,而不是一次性處理整個資料集。這有助於控制內存的使用,避免RAM不足的問題。此外,我們還運用了多處理(multiprocess)的技術,同時在多個處理單元中執行特徵工程,進一步提高效能。

實作細節

Data

這次選用 kaggle dataset : Bank Transaction Data ,他是一個銀行的交易數據,數據量不大,僅以次作為 sample 以實作後續內容(讀者可以找任何的資料取代,資料在本篇不是重點)。

import pandas as pd 

data_path = './data/bank.xlsx'
df = pd.read_excel(data_path, sheet_name='Sheet1')
df.rename(columns = {'Account No':'ID'}, inplace = True)
df.head(5)
df.head(5)

df.head(5)

數據分割與存儲

我將原始的資料集按照特定的標識(ID)進行分割,並將每個子集分別存儲成pickle檔案。這使得每個子集都可以獨立地載入和處理。

import os

def split_by_id_save_to_pickle(df: pd.DataFrame, output_path:str) -> list:
unique_accounts = df['ID'].unique()
pickle_filename_list = []

for account_id in unique_accounts:
account_data = df[df['ID'] == account_id]
account_id = account_id[:-1]
pickle_filename = f'{account_id}.pickle'

account_data = account_data.reset_index(drop=True)

account_data.to_pickle(os.path.join(output_path,pickle_filename))
pickle_filename_list.append(pickle_filename)

return pickle_filename_list

pickle_filename_list = split_by_id_save_to_pickle(df,'process')


範例 feature engineering

這裡以 “calculate_transaction_percentage“ 計算交易佔該ID的總交易比例,也是只是一個 sample ,可以換任何的 feature engineering 。

並且再用一個 preprocess function 把要做的事情都包起來,從讀取 pickle 到特徵工程以及最後再存回去 pickle。

def calculate_transaction_percentage(data):

data.sort_values(by=['ID', 'DATE'], inplace=True)
data['Accumulated Deposit'] = data.groupby('ID')['DEPOSIT AMT'].cumsum()
data['Transaction Percentage'] = data['DEPOSIT AMT'] / (data['Accumulated Deposit'] )
return data


def preporcess(args):

file_name = args[0]
input_path = args[1]
output_path = args[2]

try:
data = pd.read_pickle(os.path.join(input_path,file_name))
data = calculate_transaction_percentage(data)
data.to_pickle(os.path.join(output_path,file_name))
return f"success: {file_name}"
except Exception as e:
print(e)
return f"error: {file_name}"


多處理 multiprocess

對每個分割後的子集,我使用批次的方式進行特徵工程。這意味著我們每次只處理數據的一部分,從而有效控制了記憶體的使用。同時,我們使用多處理技術,將特徵工程任務分配給多個處理單元,並且同步地進行處理,從而極大地提高了效能。

def concurrent_multi_process(list_:list, function_:Callable, *para):
""" Implement multi-process to speed up process time. Args: Input: list, function output: list of function's output """
args = ((element, *para) for element in list_)
with concurrent.futures.ProcessPoolExecutor() as executor:
result_list = list(tqdm(executor.map(function_, args), total = len(list_)))

return result_list

file_list = concurrent_multi_process(pickle_filename_list,
preporcess,
'process',
'output')

結論

在這篇文章中,我們討論在特徵工程過程中因RAM不足而導致的效能問題。為了解決這個問題,我們引入了數據分割、批次處理和多處理等技術,從而成功地突破了效能瓶頸。這些方法不僅幫助我們克服了記憶體限制,還大幅提高了特徵工程的效能,使我們能夠更深入地進行資料分析和建模工作。希望本篇文章能夠啟發更多的資料科學從業者,針對效能問題尋找更多的解決方案,我們下次見!

32會員
37內容數
歡迎來到《桃花源記》專欄。這裡不僅是一個文字的集合,更是一個探索、夢想和自我發現的空間。在這個專欄中,我們將一同走進那些隱藏在日常生活中的"桃花源"——那些讓我們心動、讓我們反思、讓我們找到內心平靜的時刻和地方
留言0
查看全部
發表第一個留言支持創作者!
Karen的沙龍 的其他內容
How to access feature names in a trained XGB model ? 故事是這樣的... 在接手某個專案中,取得了一份已經訓練好的 pickle 檔案記載著 XGBoost model weight ,但因為 feature engineering 的程式碼交
matplotlib 無法顯示中文,看了很多篇教學文都無效 mac 解法可以參考這篇...
在進行開發工作時,可能會使用不同的 Git 帳號做登入和推送的情形,例如: 公司的 Git 帳號和個人的帳號,這樣做的好處是為了確保開發工作能清楚劃分,所以需要做切換帳號的動作,特別是在不同的專案間切換 commit 的對象,因此有了這篇文紀錄這個過程。
網路爬蟲(web crawler),也叫網路蜘蛛(spider) 是一個強大的自動化工具,可以自由瀏覽、擷取訪問網頁的各項資訊,例如:新聞文章、電商商品價格,當專案中需要添加外部數據或進行大量資料收集時,網路爬蟲就是一個非常實用的工具。
上篇我們在安裝 VirtualBox 練習使用虛擬化切割出獨立空間做開發,那除了使用 VM 達到虛擬化外,另一個輕量級的虛擬化技術 - 容器化。 要使用容器,那就不能不認識 Docker
「我只有 Windows 電腦也可以操作 Linux 指令嗎?」 「想試試看其他作業系統,需要移除作業系統再重灌嗎?」 「想了解虛擬化,快來試試看 VirtualBox」 今天就來實作 VirtualBox 安裝 Linux ubuntu 作業系統吧!
How to access feature names in a trained XGB model ? 故事是這樣的... 在接手某個專案中,取得了一份已經訓練好的 pickle 檔案記載著 XGBoost model weight ,但因為 feature engineering 的程式碼交
matplotlib 無法顯示中文,看了很多篇教學文都無效 mac 解法可以參考這篇...
在進行開發工作時,可能會使用不同的 Git 帳號做登入和推送的情形,例如: 公司的 Git 帳號和個人的帳號,這樣做的好處是為了確保開發工作能清楚劃分,所以需要做切換帳號的動作,特別是在不同的專案間切換 commit 的對象,因此有了這篇文紀錄這個過程。
網路爬蟲(web crawler),也叫網路蜘蛛(spider) 是一個強大的自動化工具,可以自由瀏覽、擷取訪問網頁的各項資訊,例如:新聞文章、電商商品價格,當專案中需要添加外部數據或進行大量資料收集時,網路爬蟲就是一個非常實用的工具。
上篇我們在安裝 VirtualBox 練習使用虛擬化切割出獨立空間做開發,那除了使用 VM 達到虛擬化外,另一個輕量級的虛擬化技術 - 容器化。 要使用容器,那就不能不認識 Docker
「我只有 Windows 電腦也可以操作 Linux 指令嗎?」 「想試試看其他作業系統,需要移除作業系統再重灌嗎?」 「想了解虛擬化,快來試試看 VirtualBox」 今天就來實作 VirtualBox 安裝 Linux ubuntu 作業系統吧!
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
對於我們大多數人來說,與他人建立深層次的聯繫並不是天生具備的能力。我們可能會藏在面具背後,遮掩自己的脆弱。我們的對話保持膚淺,以避免展示真正的自我。潛在的友誼和人際關係永遠無法開花結果。 安德魯·布斯塔曼特(Andrew Bustamante)也曾面臨著這些困擾。但是,他在中央情報局(CIA)
Thumbnail
槓桿投資是以小本金滾出獲利,但是承擔的風險更大 如果本來投資就會賠錢,運用槓桿只會加速賠錢的速度 常見的槓桿投資有 1.信貸借錢買股票 2.房貸買房子 3.操作台指期
Thumbnail
在室內設計中,顏色和燈光是重要的元素,可以用來創造不同的氛圍和情感。 一、顏色 適當地使用顏色可以創造不同的氛圍和情感。 例如,暖色調可以創造溫馨的氛圍,而冷色調則可以創造寧靜的氛圍。 另外,配搭不同的顏色可以使空間看起來更大或更小。 室內色彩搭配原則主要包括以下幾點: 1.對比色: 利用高對比度的
Thumbnail
顧問,現在員工越來越難找,尤其像我們這樣的傳統產業,找人真的很不容易,雖然公司在業界有一定的知名度,但一般人還是不知道的,該如何做才能找到好的人才呢?作者提了一些建議給他,並跟他說長期來看,必須要提升雇主品牌才行。 什麼是雇主品牌?與公司品牌和產品品牌又有何不同呢?
Thumbnail
心想事成是每個人都想達到的狀態,但為什麼我們每次都和願望失之交臂?為什麼好像越渴望到最後卻離它越遠?本書用神經醫學及心理學的角度教你如何突破這種窘境、如何活出你理想中的人生。
Thumbnail
身為方格子的讀者,相信不少人有這個跟我一樣的困擾:「追蹤的作者那麼多,每天發布的文章有好多篇,看到後來都不知道在看什麼了…。」
Thumbnail
有句台語將錢形容的貼切「人兩腳,錢四腳;錢要跟我們,卡贏咱去追錢」意思是:只依靠工作賺錢是不夠的,一定要想辦法「讓存款為你工作」學會「馭錢之術」比埋頭苦幹卻留不住賺來的錢重要。有紀律的將收入的一部分,定期買入月配息基金;就能簡單創造「被動收入」開始讓存款為你工作!挑隻適合你的基金讓它開始為你下蛋吧!
Thumbnail
許多有在操作台股的人,常常會來問我,有沒有什麼辦法,可以從總體經濟的角度,來觀察大盤的走向,我說應該會有,這個我把它稱之為「總體經濟投資法則」。下面是一個小小的例子,把台股與國外的重要指標連結起來,尤其是美股。這個操作的總體經濟邏輯是這樣的。
Thumbnail
對話式行銷(conversational marketing)是讓你的顧客在行銷漏斗中前進的最快方式。利用聊天機器人(Chatbot)與客戶進行「一對一的對話」,藉此展現親和力與公信力,並與客戶建立強勁的情感連結。該如何運用「對話式行銷」才能讓潛在客群更容易與你的品牌互動,進而提高轉換率嗎?
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
對於我們大多數人來說,與他人建立深層次的聯繫並不是天生具備的能力。我們可能會藏在面具背後,遮掩自己的脆弱。我們的對話保持膚淺,以避免展示真正的自我。潛在的友誼和人際關係永遠無法開花結果。 安德魯·布斯塔曼特(Andrew Bustamante)也曾面臨著這些困擾。但是,他在中央情報局(CIA)
Thumbnail
槓桿投資是以小本金滾出獲利,但是承擔的風險更大 如果本來投資就會賠錢,運用槓桿只會加速賠錢的速度 常見的槓桿投資有 1.信貸借錢買股票 2.房貸買房子 3.操作台指期
Thumbnail
在室內設計中,顏色和燈光是重要的元素,可以用來創造不同的氛圍和情感。 一、顏色 適當地使用顏色可以創造不同的氛圍和情感。 例如,暖色調可以創造溫馨的氛圍,而冷色調則可以創造寧靜的氛圍。 另外,配搭不同的顏色可以使空間看起來更大或更小。 室內色彩搭配原則主要包括以下幾點: 1.對比色: 利用高對比度的
Thumbnail
顧問,現在員工越來越難找,尤其像我們這樣的傳統產業,找人真的很不容易,雖然公司在業界有一定的知名度,但一般人還是不知道的,該如何做才能找到好的人才呢?作者提了一些建議給他,並跟他說長期來看,必須要提升雇主品牌才行。 什麼是雇主品牌?與公司品牌和產品品牌又有何不同呢?
Thumbnail
心想事成是每個人都想達到的狀態,但為什麼我們每次都和願望失之交臂?為什麼好像越渴望到最後卻離它越遠?本書用神經醫學及心理學的角度教你如何突破這種窘境、如何活出你理想中的人生。
Thumbnail
身為方格子的讀者,相信不少人有這個跟我一樣的困擾:「追蹤的作者那麼多,每天發布的文章有好多篇,看到後來都不知道在看什麼了…。」
Thumbnail
有句台語將錢形容的貼切「人兩腳,錢四腳;錢要跟我們,卡贏咱去追錢」意思是:只依靠工作賺錢是不夠的,一定要想辦法「讓存款為你工作」學會「馭錢之術」比埋頭苦幹卻留不住賺來的錢重要。有紀律的將收入的一部分,定期買入月配息基金;就能簡單創造「被動收入」開始讓存款為你工作!挑隻適合你的基金讓它開始為你下蛋吧!
Thumbnail
許多有在操作台股的人,常常會來問我,有沒有什麼辦法,可以從總體經濟的角度,來觀察大盤的走向,我說應該會有,這個我把它稱之為「總體經濟投資法則」。下面是一個小小的例子,把台股與國外的重要指標連結起來,尤其是美股。這個操作的總體經濟邏輯是這樣的。
Thumbnail
對話式行銷(conversational marketing)是讓你的顧客在行銷漏斗中前進的最快方式。利用聊天機器人(Chatbot)與客戶進行「一對一的對話」,藉此展現親和力與公信力,並與客戶建立強勁的情感連結。該如何運用「對話式行銷」才能讓潛在客群更容易與你的品牌互動,進而提高轉換率嗎?