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

1. 報(bào)告要求

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

2. 初步草案

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

3. 并行化解決方案

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

梯度計(jì)算函數(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)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

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