當(dāng)我們用自己喜歡的語言查看求和,階乘,矩陣等時(shí),它們很簡(jiǎn)單
Source
對(duì)于任何有興趣從事機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)事業(yè)或研究的人來說,是時(shí)候超越python庫,追隨好奇心進(jìn)入所有數(shù)學(xué)背后的日子了。 通常,這將帶您進(jìn)入大量公開的論文集,詳細(xì)說明其工作原理。 您對(duì)核心數(shù)學(xué)的理解越深入,您就越可能一見傾心就創(chuàng)建了一種新方法。 在您遇到類似以下內(nèi)容之前,第一篇文章上的所有內(nèi)容似乎都還不錯(cuò):
對(duì)于已經(jīng)學(xué)習(xí)數(shù)學(xué)多年或在機(jī)器學(xué)習(xí)的數(shù)學(xué)水平上工作的任何人,可以將這樣的方程式仔細(xì)地解析為含義和代碼。 但是對(duì)于許多其他人來說,這看起來像象形文字。 事實(shí)是,古代數(shù)學(xué)領(lǐng)袖似乎似乎選擇了最有趣的外觀符號(hào)來描述相當(dāng)直觀的方法。 結(jié)果是:方程和變量看起來比實(shí)際復(fù)雜得多。
我發(fā)現(xiàn)代碼不僅可以用于編寫程序,還可以用于解釋復(fù)雜性的全球通用語言。 當(dāng)我學(xué)習(xí)所有數(shù)據(jù)科學(xué)背后的數(shù)學(xué)時(shí),我總是發(fā)現(xiàn),獲得對(duì)數(shù)學(xué)的普遍理解的最佳方法是編寫代碼段來描述方程式。 最終,這些符號(hào)被理解為幾乎可以在典型論文中將其理解為文本。 在本文中,我希望分享一些示例,說明用代碼描述數(shù)學(xué)的簡(jiǎn)單性!
求和與乘積
求和符號(hào)是迭代數(shù)學(xué)中最有用和最常用的符號(hào)之一。 盡管設(shè)計(jì)復(fù)雜,但是實(shí)現(xiàn)還是相當(dāng)簡(jiǎn)單,但卻非常有用。
x = [1, 2, 3, 4, 5, 6]result = 0for i in range(6): result += x[i]Output of print(result) -》 21
如上所示,此符號(hào)代表的所有內(nèi)容都是從頂部的數(shù)字開始的for循環(huán),在頂部的數(shù)字范圍內(nèi)。 在底部設(shè)置的變量將成為索引變量,并且每個(gè)循環(huán)的所有結(jié)果都將添加到總值中。 較不常見的是,可以使用以下方法:
通常稱為乘積運(yùn)算符,該符號(hào)以相同的方式起作用,但不是將每個(gè)結(jié)果相加,而是將它們相乘。
x = [1, 2, 3, 4, 5, 1]result = 1for i in range(6): result *= x[i]Output of print(result) -》 120
階乘
階乘是“!” 幾乎所有計(jì)算器上都存在。 對(duì)許多人來說,這可能更明顯一些,但是仍然值得編寫一些代碼以了解其原理。
5! 將表示為:
result = 1for i in range(1,6): result *= iOutput of print(result) -》 120
條件括號(hào)
條件括號(hào)用于根據(jù)一組條件轉(zhuǎn)移方程的流程。 對(duì)于編碼人員,這只是常見的“ if”語句。 以上條件可以表示為:
i = 3y = [-2, 3, 4, 1]result = 0if i in y: result = sum(y)elif i 》 0: result = 1else: result = 0print(result) -》 6
如上所示,括號(hào)中每一行的正確表示法規(guī)定了每個(gè)路徑應(yīng)執(zhí)行的操作。 我還將多余的“包含”符號(hào)放入每個(gè)條件中,以增加更多的見解。 如上所示,我們檢查了i值是否在y列表中。 認(rèn)識(shí)到確實(shí)如此,我們返回了數(shù)組的總和。 如果i值不在數(shù)組中,我們將基于該值返回0或1。
點(diǎn)明智和笛卡爾矩陣乘法
最后,我想快速介紹一下任何數(shù)據(jù)科學(xué)家通常通過其喜歡的語言庫(矩陣乘法)完成的操作。 最容易理解的形式是逐點(diǎn)操作。 簡(jiǎn)寫為:
請(qǐng)注意,第一個(gè)要求是每個(gè)矩陣必須具有相同的形狀(即#rows =&#Columns =)
此代碼如下所示:
y = [[2,1],[4,3]]z = [[1,2],[3,4]]x = [[0,0],[0,0]]for i in range(len(y)): for j in range(len(y[0])): x[i][j] = y[i][j] * z[i][j]print(x) -》 [[2, 2], [12, 12]]
最后,讓我們看一下機(jī)器學(xué)習(xí)中最常用的典型矩陣乘法過程。 用復(fù)雜的術(shù)語來說,此運(yùn)算將找到每個(gè)主要行與每個(gè)次要列的點(diǎn)積。 這樣做的主要目的是:假設(shè)[#rows,#columns]→矩陣ixj要求#columns(i)== #rows(j)→最終產(chǎn)品的形狀為[#rows(i), #columns(j)]
這似乎令人困惑,我最好的建議是看一下Google圖片,以直觀了解這些要求。
該方程的代碼如下(使用numpy點(diǎn)方法):
y = [[1,2],[3,4]]z = [[2], [1]]# x has shape [2, 1]x = [[0], [0]]for i in range(len(y)) for j in range(len(z): x[i][j] = np.dot(y[i], z[:, j])print(x) -》 [[4], [10]]
這只是幾個(gè)示例,但是對(duì)這種簡(jiǎn)單代碼的理解可以使任何程序員承擔(dān)起初不祥的數(shù)學(xué)世界。 當(dāng)然,這些方法都可以合并以提高效率,并且通常具有易于使用的庫方法。 用簡(jiǎn)單的代碼編寫這些代碼的目的是查看以真實(shí)操作的形式寫出它們時(shí)的意義。
-
代碼
+關(guān)注
關(guān)注
30文章
4803瀏覽量
68756 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8425瀏覽量
132776
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論