大作業(yè):二分類并發(fā)解決方案

1. 報告要求

  • 并行化
  • 提高運(yùn)行速度
  • 突顯cache友好
  • 對比實驗
  • 對關(guān)鍵步驟描述算法

2. 初步草案

  1. 選擇實現(xiàn)語言。我選擇了較為熟悉的python作為編程語言。因為python的庫numpy在底層調(diào)用c與fortran,并且采用優(yōu)化過的算法,因此在矩陣運(yùn)算方面速度極高
  2. 選擇預(yù)測方法。由于要突顯cache友好,且實現(xiàn)并行化,我認(rèn)為logistic regression能符合要求。
  3. 選擇訓(xùn)練方式。訓(xùn)練方式不外乎三種:BGD, mini BGD, SGD。其中SGD在運(yùn)行中占用的內(nèi)存最小(每次處理一組數(shù)據(jù)即可)。因此,我將會對三種訓(xùn)練方式進(jìn)行考察,并著重觀察SGD。
  4. 選擇并行化的解決方案。使用python內(nèi)置的multiprocessing庫即可。并驗證按參數(shù)并行運(yùn)算分批并行運(yùn)算的速度比較。

3. 并行化解決方案

3.1 按參數(shù)并行運(yùn)算

梯度計算函數(shù)

def compute_sum(parameters, result, data_array, theta, number_of_examples):
    for parameter in parameters:  # [n, n+1, n+2, ..., m]
        summition = 0
        for sample in data_array:
            # (hypothesis - real_value) * feature_i
            summition += (hypothesis(sample[:-1], theta) - sample[-1]) * sample[parameter]
        result[parameter] = summition / number_of_examples  # gradient for feature_i

運(yùn)行結(jié)果:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容