Excel本身就能編寫大量基礎機器學習演算法

2021-08-21 12:43:30 字數 2662 閱讀 7159

編者按:當初學者第一次接觸機器演算法時,直觀了解演算法正在做什麼是一項非常重要的任務,這也是論智一直推崇視覺化方法的原因之一。雖然初級演算法的數學計算並不難掌握,但當他們一看到滿篇的數學理論和符號,學習下去的興致和氣勢就消減了不少。

作為一名資料工作者,這年頭「熟悉機器學習演算法」遠比「精通excel」在求職市場上要搶手得多,但前者的「熟悉」究竟是熟悉到什麼程度呢?excel本身就能編寫大量基礎機器學習演算法,而且對於初學者來說,這樣的編寫過程不僅能加深對演算法的理解,還能幫助他們更充分地感受演算法的美妙。

下面我們用乙個例子來證明這一點。

從本質上來說,大多數資料科學演算法其實就是優化問題,而其中最常用的演算法之一就是梯度下降演算法。對於初學者來說,梯度下降這個詞可能乍一聽有些可怕,但它真的這麼複雜嗎?

以下是乙個房價**任務:根據歷史房價資料建立乙個模型,結合房屋面積**新房**。讓我們先用已有資料建立乙個**:

如上表所示,房屋面積是x,房價是y,由此我們可以繪製歷史房價資料折線圖:

現在用乙個簡單的線性模型,對歷史資料進行擬合,根據房屋面積x**新房**y(pre):

在上圖中,紅線是我們的線性模型,因此鑑於橫座標和縱座標資訊,它的表示式是:y(pred) = a + bx。

藍線是已知的歷史房價,從分布上簡單給出了房價和房屋面積相關程度的基本資訊。

連線紅線和藍線的黃色虛線表示對於同一面積的房屋,模型**和實際房價的誤差(e)。

所以我們的目標是找到最好的a和b,使誤差項e最小:

殘差平方和(sse)= ½(真實房價-**房價)2 = ½(y - ypred)2

(sse只是一種方法,還可以用其他方法統計誤差)

好了,下面我們就要用到梯度下降了。梯度下降是一種優化演算法,它能幫我們找到優化權重(a,b),並保證模型**的準確率。下面是具體步驟:

步驟1:用隨機值初始化權重a和b,並計算誤差(sse)。

步驟2:計算梯度,即當權重從初始隨機值逐漸變小時sse的變化。這有助於我們把a和b朝sse最小的方向優化。

步驟3:用梯度調整權重以使sse最小化,以達到最佳值。

步驟4:用新權重進行**,並計算新的sse。

步驟5:重複步驟2和3,直到再次調整權重後不再明顯降低**錯誤率。

如果說這樣描述有些泛泛而談,下面我們就結合圖表詳細介紹。請牢記一點,事先把資料處理好有助於更高效的優化。

第一步: 為了擬合y(pred) = a + bx,用隨機值初始化a和b,並計算**誤差(sse)。

第二步:計算權重的誤差梯度。

∂sse/∂a =-(y-ypred)

∂sse/∂b =-(y-ypred)x

其中,sse=½ (y-ypred)2 = ½(y-(a+bx))2

雖然有一點點讓人煩惱的微積分計算,但這已經很基礎了,∂sse/∂a和∂sse/∂b是我們想要的梯度,它們給出了sse「下降」的方向。

第三步:用梯度調整權重,使sse獲得最小值,也就是最佳值。

這之後我們就能用新權重更新a和b的值,以便模型沿著最優方向移動。

因為a -∂sse/∂a

b -∂sse/∂b

所以更新規則就是:

新的a = a - r × ∂sse/∂a = 0.45–0.01× 3.300 = 0.42

新的b = b - r × ∂sse/∂b = 0.75–0.01×1.545 = 0.73

其中r=0.01是學習率,表示權重調整的步幅。

第四步:用新的a和b進行**並計算新的sse。

可以看到,sse已經從0.677下降到0.553了,這意味著模型的**準確率有所提高。

第五步:重複第二步和第三步,直到再改變a和b,sse不再發生明顯變化。

以上就是用excel實現的梯度下降演算法,比起一堆數學計算,這樣**並茂的演示是不是更有趣呢?

在mooc課程中,除了吳恩達的deeplearning.ai和udacity,李飛飛強烈推薦的fast.ai也有其獨到之處。這家公司的ceo jeremy howard是深度學習領域的一朵奇葩,他沒有過硬的學術背景,也沒有大型科技公司的就職經歷,僅憑自學就在kaggle競賽中鋒芒畢露。對於這樣乙個人,他的課絕對值得初學者學習。

原 編寫Excel巨集

朋友使用excel製作 時向我提出這樣乙個需求 有一列寫出計算公式,另一列將該公式的計算結果自動算出,具體如下圖 我告訴他,這個寫乙個巨集就可以實現了。具體步驟如下 1.找到 工具 選單欄下的巨集 m 選單下的巨集 m 如下圖所示 2.在彈出的對話方塊上輸入名稱 calc,然後單擊建立按鈕,如下圖 ...

Java編寫匯出EXCEL檔案

建立乙個service,在dopost方法中寫入如下 其中 hssfcell cell row.createcell 0 cell.setcellvalue 名 是設定單元格表頭內容 cell.setcellstyle style 將表頭居中 將filename設定為動態儲存位址 servletco...

專案競標書編寫 精大

最近在編寫乙個客戶的專案競標書,他們是坐硬體,給別人提供硬體,但沒有軟體的研發能力。而我只和客戶接觸過一次,是帶著我們做好的系統原型,最初的目的 1 是想讓客戶了解我們在拿到專案的標書,並很快根據標書的需求就作出了系統原型,證明我們反應速度 2 證明我們有快速構建系統的能力 3 我們有快速理解系統需...